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

上次更新时间:2020 年 5 月 29 日

我在运行 aws s3 sync 命令以将本地系统上的目录和前缀复制到 Amazon Simple Storage Service (Amazon S3) 存储桶中,或者从一个存储桶复制到另一个存储桶。但是,我在操作期间收到 ListObjects 或 ListObjectsV2 操作访问被拒绝错误。如何解决此问题?

解决方法

验证您对在其中复制对象的 Amazon S3 存储桶上的 s3:ListBucket 拥有权限。您必须拥有此权限才能执行 ListObjectsListObjectsV2 操作。

注意:s3:ListBucket 是允许用户将对象列在存储桶中的权限的名称。ListObjectsListObjectsV2 是将对象列在存储桶中的 API 调用的名称。

如果您的 AWS Identity and Access Management (IAM) 用户或角色与存储桶属于同一个 AWS 账户,则检查您的 IAM 策略或存储桶策略是否允许您使用 s3:ListBucket 操作。如果您属于同一个账户,则不需要同时拥有 IAM 策略和存储桶策略来允许 s3:ListBucket—您只需要其中的一个即可允许操作。

重要提示:如果 IAM 策略或存储桶策略已允许 s3:ListBucket 操作,则检查其他策略中是否有显式拒绝操作的任何语句。显式拒绝语句可覆盖允许语句。

如果您的 IAM 用户或角色与 S3 存储桶属于不同的账户,则您必须对 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"
  }]
}

下面是存储桶策略的示例,可授予用户对 s3:ListBucketarn: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"
      ]
    }
  }]
}

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?