Amazon S3 バケットで同期コマンドを実行すると、ListObjects または ListObjectsV2 アクションで Access Denied エラーが発生するのはなぜですか?

最終更新日: 2020 年 5 月 29 日

aws s3 sync コマンドを実行して、ローカルシステムのディレクトリとプレフィックスを Amazon Simple Storage Service (Amazon S3) バケットにコピーするか、あるバケットから別のバケットにコピーしています。その際、操作中に ListObjects または ListObjectsV2 アクションで Access Denied (アクセス拒否) エラーが発生します。どうすれば解決できますか?

解決方法

オブジェクトのコピー先またはコピー元の Amazon S3 バケットで s3:ListBucket のアクセス許可があることを確認します。ListObjects または ListObjectsV2 アクションを実行するには、このアクセス許可が必要です。

注意: s3:ListBucket は、ユーザーがバケット内のオブジェクトを一覧表示できるようにするアクセス許可の名前です。ListObjects または ListObjectsV2 は、バケット内のオブジェクトを一覧表示する API 呼び出しの名前です。

AWS Identity and Access Management (IAM) ユーザーまたはロールがバケットと同じ AWS アカウントに属している場合は、IAM ポリシーまたはバケットポリシーで s3:ListBucket アクションの使用が許可されているかどうかを確認します。同じアカウントに属している場合は、 s3:ListBucket を許可する IAM ポリシーとバケットポリシーの両方ともが必要となることはなりません。アクションを許可するのに必要なのは、そのうちの 1 つのみです。

重要: IAM ポリシーまたはバケットポリシーですでに s3:ListBucket アクションが許可されている場合は、そのアクションを明示的に拒否するステートメントがないか、他のポリシーを確認します。明示的な拒否ステートメントは、許可ステートメントよりも優先されます。

IAM ユーザーまたはロールが S3 バケットとは異なるアカウントに属している場合は、IAM ポリシーとバケットポリシーの両方で s3:ListBucket へのアクセス許可が必要です。

s3:ListBucketへのアクセスを許可する IAM ポリシーの例を次に示します。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546506260896",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
  }]
}

以下に、s3:ListBucket へのアクセス許可をユーザー arn:aws:iam::123456789012:user/testuser に付与する バケットポリシーの例を示します。

{
  "Id": "Policy1546414473940",
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546414471931",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
    "Principal": {
      "AWS": [
        "arn:aws:iam::123456789012:user/testuser"
      ]
    }
  }]
}