Amazon S3 バケットポリシーで、NotPrincipal エレメントの代わりに、Principal エレメントで明示的な拒否があるワイルドカードを使用する方法を教えてください。

最終更新日: 2020 年 9 月 18 日

Amazon Simple Storage Service (Amazon S3) バケットポリシーで、NotPrincipal エレメントの代わりに Principal エレメントで明示的な拒否があるワイルドカードを使用するにはどうしたらよいですか?

簡単な説明

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

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

解決方法

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

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

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

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

拒否ブロック内の StringNotLike は次のとおりです。

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

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "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"
                    ]
                }
            }
        }
    ]
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?