Amazon S3 バケットポリシーでプリンシパル要素と明示的な拒否でワイルドカードを使用するにはどうすればよいですか?

最終更新日: 2021 年 5 月 20 日

Amazon Simple Storage Service (Amazon S3) バケットポリシーで、プリンシパル要素と明示的な拒否でワイルドカードを使用したいと思います。どうすればできますか?

簡単な説明

NotPrincipal エレメントを使用し、明示的な拒否があるバケットポリシーでアクセス権を指定することで、特定の AWS Identity and Access Management (IAM) エンティティが Amazon S3 バケットにアクセスできないようにすることができます。詳細については、NotPrincipal と Deny の使用を参照してください。

ただし、NotPrincipal エレメントではワイルドカードはサポートされていないため、各ステートメントブロックのターゲットエンティティとして Principal を使用する必要があります。これには、各許可ブロックの条件が含まれます。

解決方法

NotPrincipal を使用する代わりに、各ステートメントブロックのターゲットエンティティとして Principal を使用します。これには、各許可ブロックの条件が含まれます。

始める前に、次のリソースが必要です。

この例では、ワイルドカードを aws:userid で使用して、一時的な資格を取得するために呼び出すときに呼び出しプロセスによって渡されるすべての名前 (アプリケーション、サービス、インスタンス ID など) を含めます。詳細については、すべてのリクエストで使用可能な情報を参照してください。ロックアウトを防ぐために、AWS アカウントのルートユーザーが含まれています。

注意: 例の名前を自分のロール ID とバケット名に置き換えてください。

拒否ブロックの StringNotLike:

"Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }

詳細なポリシーは次のとおりです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/cross-account-read-only-role"
                ]
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/cross-account-read-only-role"
                ]
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*",
                "arn:aws:s3:::awsexamplebucket1"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }
        }
    ]
}