Amazon S3 バケットで sync コマンドを実行すると、ListObjectsV2 で Access Denied (アクセス拒否)エラーが表示されるのはなぜですか。

最終更新日: 2021 年 3 月 26 日

Amazon Simple Storage Service (Amazon S3) バケットとの間でオブジェクトのコピーを実行するために、aws s3 sync コマンドを使用しています。しかし、ListObjectsV2 オペレーションを呼び出すと、Access Denied (アクセス拒否) エラーが発生します。どうすればこの問題を解決できますか?

簡単な説明

aws s3 sync コマンドを実行すると、Amazon S3 は、ListObjectsV2、CopyObject、GetObject、および PutObject の各 API を呼び出します。

具体的には、次の処理が行われます。

1.    Amazon S3 は、オブジェクトが存在するかどうかをチェックするために、ソースと宛先をリストします。

2.    次に、Amazon S3 は次の API 呼び出しを実行します。

バケットからバケットへのオペレーションのための CopyObject 呼び出し
バケットからローカルへのオペレーションのための GetObject
ローカルからバケットへのオペレーションのための PutObject

注: この記事では、GetObject 呼び出しおよび PutObject 呼び出しが AWS Identity Access Managemen (IAM) ユーザーまたはロールに既に付与されていることを前提としています。この記事では、不適切な ListBuckets アクセス許可によって発生するアクセス拒否エラーを解決する方法について説明します。

解決方法

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

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

IAM ユーザーまたはロールが別の AWS アカウントに属している場合は、IAM およびバケットポリシーで s3:ListBucket アクションが許可されているかどうかを確認してください。IAM ポリシーとバケットポリシーの両方で s3:ListBucket へのアクセス許可が必要です。

ユーザーまたはロールがバケット所有者のアカウントに属している場合、IAM ポリシーとバケットポリシーの両方でs3:ListBucket を許可する必要はありません。アクションを許可するには、そのうちの 1 つだけが必要です。

重要: IAM ポリシーまたはバケットポリシーのいずれかで、s3:ListBucket アクションが既に許可されている場合、そのアクションを明示的に拒否するステートメントがあるかどうか、他のポリシーを確認してください。明示的な拒否ステートメントが、許可ステートメントを上書きしてしまうからです

以下の IAM ポリシーの例では、s3:ListBucket へのアクセスを許可しています。

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

以下は、バケットポリシーの例で、ユーザー arn:aws:iam::123456789012:user/testusers3:ListBucket へのアクセス権を付与しています。

{
  "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"
      ]
    }
  }]
}