当我试图将数据从公共桶复制到我自己的桶中时,它会失败,错误如下
aws s3 cp s3://awssampledbuswest2/tickit/spectrum/sales/sales_ts.000 s3://<my bkt>/
copy failed: s3://awssampledbuswest2/tickit/spectrum/sales/sales_ts.000 to s3://<my bkt>/sales_ts.000 An error occurred (AccessDenied) when calling the GetObjectTagging operation: Access Denied因为每个人都可以使用源路径,所以任何人都可以尝试用自己的路径替换<my bkt>。
令人惊讶的是,我可以将文件从公共桶下载到本地文件系统中,并将其上传到我自己的桶中。
aws s3 cp s3://awssampledbuswest2/tickit/spectrum/sales/ . --recursive和
aws s3 cp sales_ts.000 s3://<my bkt>/任何解释它发生的原因和如何避免这一错误是高度赞赏的!
PS。我尝试与AWS帐户所有者和以下的IAM用户,但没有运气。

发布于 2021-08-17 22:01:02
--这不是你的错。,这是由于源桶上的桶策略造成的。它不允许GetObjectTagging API调用。
已经设置了awssampledbuswest2桶,以便按照AWS文档中的示例的要求允许从Amazon访问。这种访问不会尝试检索对象标记。
但是,当在存储桶之间进行复制时,AWS aws s3 cp命令会尝试创建包括对象标记在内的对象的完整副本。这导致它失败。
复制到您的本地文件系统是成功的,因为AWS在复制到S3之外的目标时不尝试获取标记,因为普通操作系统没有文件标记的概念。
为了避免这个问题,,,您可以使用aws s3api copy-object命令在存储桶之间复制文件,它只做一个复制,而不试图复制标记:
aws s3api copy-object --copy-source awssampledbuswest2/tickit/spectrum/sales/sales_ts.000 --bucket YOUR-BUCKET --key sales_ts.000发布于 2022-08-18 16:48:32
一个更简单的解决方案是在复制时使用--copy-props none
示例:aws s3 cp s3://source/object-name s3://destination/object-name/ --copy-props none --recursive
发布于 2022-04-12 13:19:00
在我的例子中,问题在于AWS版本的。逐桶复制在AWS v1中运行良好。但是,当调用GetObjectTagging操作"(AccessDenied)“时,AWS v2的复制操作失败。
检查aws v2与v1打破更改列表显示与文件属性和标记有关的行为更改
当您使用another 1版本的命令在AWS s3命名空间中将文件从一个S3 S3桶位置复制到另一个S3 S3桶位置时,并且该操作使用多部分复制,则不会将源对象中的文件属性复制到目标对象。默认情况下,执行多部分副本的s3命名空间中的AWS 2命令现在将所有标记和以下属性集从源传递到目标副本:内容类型、内容语言、内容编码、内容处理、缓存控制、过期和元数据。
因此,我们需要将GetObjectTagging操作添加到源桶的IAM策略和目标桶的PutObjectTagging中。
https://stackoverflow.com/questions/68824370
复制相似问题