movee(モビー) オノデラのブログ

(株)movee代表。週末は自社サービスを作っています。

特定のS3オブジェクト編集権限のあるユーザーをIAMで作る

S3+CloudFrontで静的サイトを公開しているパターンがある。

S3へのファイル更新をデザイナーが担当するときはそのS3オブジェクトだけ編集できて、他のサービスにはアクセスできないようにしたい。 IAMユーザーを作成してS3オブジェクトのみ編集できるカスタマー管理ポリシーを作ってアタッチするのが良さそう。

1.IAMユーザーとIAMグループを作る

とりあえずS3OnlyAccessUserというIAMユーザーとS3OnlyAccessGroupというIAMグループを作る。現時点でカスタマー管理ポリシーを作ってないのでポリシーはアタッチしていない。

S3ユーザー

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。動作確認してないけどたぶんこれで大丈夫なはず(他のアカウントでは動作確認してる)

カスタマー管理ポリシー