現在、次のようなポリシーを持つ IAM ロールがあります。
{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
]
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/"
]
}
]
}
Boto は、get_bucket 呼び出しを実行するために、バケットのルートに ListBucket パーミッションが存在する必要があるようです。Statement 配列の最初のハッシュを削除すると、get_bucket('blah.example.com') は失敗します。エラーテキストは次のとおりです。
*** S3ResponseError: S3ResponseError: 403 禁止 <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxxx</RequestId><HostId>yyyy</HostId></Error>
boto を使用しながら、バケットのリストを特定のプレフィックス (「prefix/」など) に制限する方法はありますか?
アップデート
すべてを機能させるために、次のポリシーを使用しました。
{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
],
"Condition":{
"StringLike":{
"s3:prefix":"prefix/*"
}
}
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/*"
]
}
]
}
validate=False
メソッドにパラメーターを使用する必要がありますget_bucket
が、プレフィックス内にリストすることができます。