ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録

S3にPutObjectするときの権限で注意したいこと

概要

S3にバケット指定で書き込み権限(PutObject)を付与する場合、JSONで編集してたらちょっと引っかかってしまったのでそのメモ。超絶小ネタ。

失敗した権限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::waneal-test"
        }
    ]
}
$ aws s3 cp hige.txt s3://waneal-test/higehigehige.txt --profile s3-test-user
upload failed: ./hige.txt to s3://waneal-test/higehigehige.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

バケットに権限追加しとけばいいだろと思ってましたがだめでした。

成功した権限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::waneal-test/*"
        }
    ]
}
$ aws s3 cp hige.txt s3://waneal-test/higehige.txt --profile s3-test-user
upload: ./hige.txt to s3://waneal-test/higehige.txt

PutObject はobjectまで見る権限なので /* で指定する必要あり。他の権限についても resource までなのか object までなのかを意識する必要がある

感想、メモ

GUIからポチポチやるときは失敗しないけど、TerraformでJSON設定するときはポカリそう。いきなり本番に適用せざるを得ない場合はちゃんとIAM Policy Simulatorで検証すべし。