適当にIAMユーザを作って以下のようなポリシーを設定すれば良い。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket/*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Statementを2つ設定してやるのがポイント。
- 1つ目のStatementは example-bucket に対するフル権限を与えている。Resourcesが
/*
付きのバケット名だけだとバケットのルートディレクトリで一覧取得できないので、バケット名そのものにも権限を与えている。 - 2つ目のStatementはバケット一覧を取得する権限を与えている。これはAWS ConsoleからS3の操作をする際に必要です(単にREST APIでS3にアクセスするだけなら不要)。example-bucket以外のバケット名も見えてしまうのは諦めるしか無い。バケット名は見えても操作は一切できないので問題無いと割り切る。
AWSコンソールを使う必要がなければ1つ目のStatementだけで十分です。