かべぎわブログ

ブログです

AssumeRoleするときに外部IDをもとめるようにする

概要

クロスアカウントでAssumeRoleするときに外部IDを使用させる方法です。
悪意のある第三者にロール名、アカウントIDが漏洩しても、外部IDがわからなければAssumeRoleされないようになり、セキュリティの向上が見込めます。

手順

IAMロール作成

以下のような信頼ポリシーでIAMロールを作成します。
アカウントIDは自分の環境にあわせて変えてあげます。

"sts:ExternalId": "gaibu_id"の箇所が外部IDです。今回外部IDはgaibu_idとしています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "gaibu_id"
                }
            }
        }
    ]

AssumeRoleする

マネジメントコンソールでは外部ID付きでのスイッチロールができない(20220702時点)ため、AWSCLI等で実施します。以下はAWSCLIでの例です。

 sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/externalIdTestRole \
    --role-session-name test-session \
    --external-id gaibu_id