上次更新时间:2021 年 3 月 25 日
我正在运行 aws s3 sync 命令将对象复制到 Amazon Simple Storage Service (Amazon S3) 存储桶或从中复制对象。但在我调用 ListObjectsV2 操作时,我收到访问被拒绝错误。如何解决此问题?
当您运行 aws s3 sync 命令时,Amazon S3 会发出以下 API 调用:ListObjectsV2、CopyObject、GetObject 和 PutObject。
更具体地说,会发生以下情况:
1.Amazon S3 会列出源和目标以检查对象是否存在。
2. 然后,Amazon S3 会执行以下 API 调用:
执行存储桶到存储桶操作的 CopyObject 调用
执行存储桶到本地操作的 GetObject 调用
执行本地到存储桶操作的 PutObject 调用
注意:本文假设已向 AWS Identity Access Management (IAM) 用户或角色授予了 GetObject 和 PutObject 调用权限。本文介绍的是如何解决因 ListBuckets 权限不当导致的访问被拒绝错误。
解决方法验证您对向其复制或从中复制对象的 Amazon S3 存储桶拥有 s3:ListBucket 权限。您必须拥有此权限,才能执行 ListObjectsV2 操作。
注意:s3:ListBucket 是允许用户列出存储桶中对象的权限的名称。ListObjectsV2 是列出存储桶中对象的 API 调用的名称。
如果您的 IAM 用户或角色属于其他 AWS 账户,请检查您的 IAM 和存储桶策略是否允许 s3:ListBucket 操作。您的 IAM 策略和存储桶策略必须同时允许 s3:ListBucket 权限。
如果您的用户或角色属于存储桶拥有者的账户,则不需要 IAM 和存储桶策略同时允许s3:ListBucket 权限,只需要其中一个允许该操作即可。
重要提示:如果 IAM 策略或存储桶策略已允许 s3:ListBucket 操作,请检查其他策略是否有任何显式拒绝该操作的语句。显式 deny(拒绝)语句会覆盖 allow(允许)语句。
以下是允许访问 s3:ListBucket 操作的 IAM 策略示例:
{
"Version": "2012-10-17",
"Statement":
}
以下是允许用户 arn:aws:iam::123456789012:user/testuser 访问 s3:ListBucket 的存储桶策略示例:
{
"Id": "Policy1546414473940",
"Version": "2012-10-17",
"Statement":
}
}]
}