やりたいこと
S3に保存している特定のオブジェクトのみ参照(取得)できるようにしたい。
例
例えば以下のようなとき。
- S3バケット
s3://hoge
に保存しているhoge.txt
のみ取得できるようにしたい。
前提条件
- AWSアカウントがあること
- ローカル環境にAWS CLIがインストールされていること
方法
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::hoge/hoge.txt" // 取得は特定のファイルに制限する
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::hoge"
}
]
}
検証
- ローカルのaws cliに作成したIAMロールを設定する。
$ aws configure
AWS Access Key ID [****************]: XXXXXX
AWS Secret Access Key [****************]: YYYYYY
Default region name [ap-northeast-1]: [使用するリージョン]
Default output format [None]: [空欄で可]
- バケットの中の一覧を取得
$ aws s3 ls s3://hoge
hoge.txt fuga.txt peta.txt ....
- 手順4で設定した特定のファイルを取得する
$ aws s3 cp s3://hoge/hoge.txt ./
download: s3://hoge/hoge.txt to ./hoge.txt
- 他のファイルは取得できない
$ aws s3 cp s3://hoge/fuga.txt ./
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
まとめ
Listの許可を与えるところがわからずずっと詰まっていた。
特定のファイル以外はリストすらさせたくない場合はわからないです。