Amazon Simple Storage Service (Amazon S3) バケットポリシーで、プリンシパル要素と明示的な拒否でワイルドカードを使用したいと思います。どうすればできますか?
簡単な説明
特定の AWS Identity and Access Management (IAM) エンティティが Amazon S3 バケットにアクセスできないようにするには、バケットポリシーで特定のアクセス許可を指定します。バケットポリシーでは、NotPrincipal 要素と明示的な拒否を使用する必要があります。詳細については、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/s3-access-role"
]
},
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::awsexamplebucket1"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::444455556666:role/s3-access-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"
]
}
}
}
]
}
関連情報
Amazon S3 バケットアクセスを特定の IAM ロールに制限する方法
AWS JSON ポリシー要素: NotPrincipal