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

所要時間1分
0

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

簡単な説明

aws s3 sync コマンドを実行すると、Amazon S3 は次の API 呼び出しを発行します。 ListObjectsV2CopyObjectGetObjectPutObject

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

1.Amazon S3 はソースと宛先を一覧表示して、オブジェクトが存在するかどうかを確認します。

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

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

**注:**この解決策では、GetObject 呼び出しおよび PutObject 呼び出しが AWS Identity Access Management (IAM) ユーザーまたはロールにすでに付与されていることを前提としています。この解決策では、ListBucket 権限が不適切であったり、Requester Pays で正しくない sync コマンド構文を使用したりしたために発生するアクセス拒否エラーを解決する方法について説明します。

解決策

IAM ポリシーの設定

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

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

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

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

**重要:**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"
  }]
}

以下は、バケットポリシーの例で、ユーザー 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"
      ]
    }
  }]
}

リクエスタ支払いで sync コマンドを使用する

バケットが別の AWS アカウントに属し、リクエスタ支払いが有効になっている場合は、バケットポリシーと IAM 権限の両方が ListObjectsV2 権限を付与していることを確認してください。ListObjectsV2 権限が適切に付与されている場合は、sync コマンドの構文を確認してください。sync ** コマンドを使用するときは、--request-payer requester** オプションを含める必要があります。そうしないと、アクセス拒否エラーが表示されます。

例:

aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester

関連情報

バケット所有者がクロスアカウントのバケットのアクセス許可を付与する

バケットポリシーとユーザーポリシー

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ