S3+CloudFrontで静的サイトを公開しているパターンがある。
S3へのファイル更新をデザイナーが担当するときはそのS3オブジェクトだけ編集できて、他のサービスにはアクセスできないようにしたい。 IAMユーザーを作成してS3オブジェクトのみ編集できるカスタマー管理ポリシーを作ってアタッチするのが良さそう。
1.IAMユーザーとIAMグループを作る
とりあえずS3OnlyAccessUserというIAMユーザーとS3OnlyAccessGroupというIAMグループを作る。現時点でカスタマー管理ポリシーを作ってないのでポリシーはアタッチしていない。
2.S3オブジェクト権限のあるIAMポリシーを作成する
S3OnlyAccessPolicy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::my-bucket/*" } ] }
my-bucketにはS3のバケット名を入れる(2箇所)。あと注意するところはmy-bucket/ アスタリスクつけることでmy-bucket配下のファイルにアクセスできるようになる。*を忘れないように。
3.S3OnlyAccessGroupにS3OnlyAccessPolicyをアタッチする
S3OnlyAccessGroupに属するS3OnlyAccessUserはS3のmy-bucketだけ編集できるようになる。(他のリソースにはアクセスできない)
こんな状態になっていればOK。動作確認してないけどたぶんこれで大丈夫なはず(他のアカウントでは動作確認してる)