当我在 Amazon S3 存储桶上运行 sync 命令时,为什么会收到 ListObjectsV2 访问被拒绝错误?

2 分钟阅读
0

我正在运行 aws s3 sync 命令将对象复制到 Amazon Simple Storage Service(Amazon S3)存储桶或从中复制对象。但是当我调用 ListObjectsV2 API 时出现访问被拒绝错误。

简短描述

当您运行 sync 命令时,Amazon S3 会发出 ListObjectsV2 API 调用,以检查相关对象是否存在于源存储桶或目标存储桶中。如果任一存储桶中都没有相关对象,则 Amazon S3 将执行以下 API 调用:

  • CopyObject 调用,用于存储桶到存储桶操作
  • GetObject 调用,用于存储桶到本地操作
  • PutObject 调用,用于本地到存储桶操作

解决方法

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

配置 IAM 策略

**注意:**此解决方法假设 GetObjectPutObject 操作已被授予了 AWS Identity Access Management(IAM)用户或角色。此解决方法介绍如何解决由于不正确的 ListBucket 权限或在请求者付款中使用错误的 sync 命令语法而导致的“访问被拒绝”错误。

验证您在要将对象复制到或从中复制对象的 Amazon S3 存储桶上拥有 s3:ListBucket 权限。您必须拥有该权限才能执行 ListObjectsV2 API 调用操作。

如果您的 IAM 用户或角色属于另一个 AWS 账户,请检查您的 IAM 策略和存储桶策略是否允许 s3:ListBucket 操作。您必须同时拥有 IAM 策略和存储桶策略的 s3:ListBucket 权限。

如果您的用户或角色属于存储桶拥有者的账户,则您无需同时使用 IAM 策略和存储桶策略来允许 s3:ListBucket 操作。您只需要使用其中一个策略来允许 s3:ListBucket 操作即可。

**重要事项:**如果 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/testuser 用户授予 s3: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 命令

如果您的存储桶属于另一个账户并启用了请求者付款,请验证您的存储桶策略和 IAM 策略是否都授予了 ListObjectsV2 权限。如果已正确授予 ListObjectsV2 权限,请检查 sync 命令语法。如果您在运行 sync 命令时未包括 --request-payer requester 选项,则会出现“访问被拒绝”错误。

例如,运行以下 sync 命令,但将 requester-pays-bucket 替换为您的存储桶名称:

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

相关信息

示例 2:存储桶拥有者授予跨账户存储桶权限

Amazon S3 基于身份的策略

AWS 官方
AWS 官方已更新 3 个月前