AWS IAMロールの ExternalId が大文字・小文字を区別するのか試してみた

ExternalIdの大文字・小文字は区別されました。
2023.12.20

AWS IAMロールでは、ExternalIdが設定できます。

ExternalIdで利用できる文字について、大文字・小文字を区別するのか気になったので、試してみました。

ExternalId の値は、2~1,224 文字で構成されている必要があります。この値は、空白のない英数字にする必要があります。次の記号を含めることもできます。プラス記号 (+)、等号 (=)、カンマ (,)、ピリオド (.)、アットマーク (@)、コロン (:)、スラッシュ (/)、およびハイフン (-)。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#condition-keys-sts

おすすめの方

  • Assume Roleする際のExternalIdが大文字・小文字を区別するのか知りたい方

IAMロールを作成する

「AmazonS3ReadOnlyAccess」を持つIAMロールを作成しました。

01_iam_role

信頼関係は下記となっており、「大文字・小文字が混在するExternalId」を設定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::012345678901:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "I-am-3rd-Party"
                }
            }
        }
    ]
}

大文字・小文字が一致するExternalIdでAssume Roleする

問題なくAssume Roleが成功しました。

$ aws sts assume-role \
    --role-arn arn:aws:iam::012345678901:role/external-id-test-blog-role \
    --role-session-name test-blog-aaa-session \
    --external-id I-am-3rd-Party

{
    "Credentials": {
        ...
    },
    "AssumedRoleUser": {
        ...
    }
}

大文字・小文字が異なるExternalIdでAssume Roleする(すべて小文字)

Assume Roleができませんでした。

$ aws sts assume-role \
    --role-arn arn:aws:iam::012345678901:role/external-id-test-blog-role \
    --role-session-name test-blog-bbb-session \
    --external-id i-am-3rd-party

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::012345678901:assumed-role/xxx/botocore-session-1703070136 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::012345678901:role/external-id-test-blog-role

大文字・小文字が異なるExternalIdでAssume Roleする(すべて大文字)

同じく、Assume Roleができませんでした。

$ aws sts assume-role \
    --role-arn arn:aws:iam::012345678901:role/external-id-test-blog-role \
    --role-session-name test-blog-ccc-session \
    --external-id I-AM-3RD-PARTY

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::012345678901:assumed-role/xxx/botocore-session-1703070136 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::012345678901:role/external-id-test-blog-role

さいごに

ExternalIdの大文字・小文字は区別されました。

参考