1. ホーム
  2. amazon-web-services

[解決済み] S3バケットのListObjectsのパーミッションがs3:*の時にAccessDeniedになる。

2022-04-13 20:54:53

質問

取得しています。

ListObjects操作の呼び出し時にエラー(AccessDenied)が発生しました。アクセス拒否

S3バケットからフォルダを取得しようとした場合。

このコマンドを使用します。

aws s3 cp s3://bucket-name/data/all-data/ . --recursive

バケットのIAMパーミッションは以下のようになります。

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

を可能にするために、何を変更する必要がありますか? copyls を成功させることができますか?

解決方法は?

S3バケット内のオブジェクトに対してコマンドを実行する権限は与えられていますが、バケット自体に対してアクションを実行する権限は与えられていません。

ポリシーを少し修正すると、次のようになります。

{
  "Version": "version_id",
  "Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname",
            "arn:aws:s3:::bucketname/*"
        ]
    }
  ] 
}

しかし、これではおそらく必要以上の権限を与えていることになります。AWS IAMのベストプラクティスである 最小限の特権を付与する は、次のようになります。

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::bucketname"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject"
          ],
          "Resource": [
              "arn:aws:s3:::bucketname/*"
          ]
      }
  ]
}