IAM policy設定をしていて躓いたので、備忘録として残します。
要件:とあるEC2インスタンスから、S3のある特定のバケットへのフルアクセス権限を与える。
当初、何も考えずに以下のようにpolicyを作成して、IAM roleに設定した。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::test/*",
]
}
]
}
試しに、IAM roleを付与したEC2からaws-cliのaws s3 ls
使って確認すると、アクセスを拒否される。
[root@hoge ~]# aws s3 ls s3://test/
A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied
調べていくと、IAM roleに設定するpolicyの設定が間違っていた。
bucketそのものに対するアクセスと、bucket配下のオブジェクトに対するアクセス両方を指定する必要があるらしい。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::test",
"arn:aws:s3:::test/*"
]
}
]
}
aws-cliで確認したら、S3からデータを取得できました。
[ec2-user@hoge ~]$ aws s3 ls s3://test/
2015-07-13 06:24:49 47811 -------.txt
2015-07-13 06:24:49 45773 -------.txt