Amazon S3文件权限,从其他帐户复制时拒绝访问

Rob*_*god 16 file-permissions amazon-s3 amazon-web-services

我有一组视频文件从一个AWS Bucket从另一个帐户复制到我自己的存储桶中的帐户.

我现在遇到的问题是,当我尝试将所有文​​件公开时,我收到了拒绝访问错误的所有文件.

具体来说,我登录到我的AWS账户,进入S3,深入查看文件夹结构,找到其中一个视频文件.

当我查看此特定文件时,文件上的权限选项卡不会显示分配给任何人的任何权限.未分配任何用户,组或系统权限.

在权限选项卡的底部,我看到一个小框,显示"错误:访问被拒绝".我无法改变文件的任何内容.我无法添加元数据.我无法将用户添加到该文件中.我无法将文件设为Public.

有没有办法让我可以控制这些文件,以便我可以公开它们?有超过15,000个文件/大约60GB的文件.我想避免下载和重新上传所有文件.

在这里的一些帮助和建议下,我尝试了以下内容.我在我的桶中创建了一个名为"media"的新文件夹.

我试过这个命令:

aws s3 cp s3://mybucket/2014/09/17/thumb.jpg s3://mybucket/media --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=my_aws_account_email_address
Run Code Online (Sandbox Code Playgroud)

调用HeadObject操作时收到致命错误403:禁止.

Joh*_*ein 26

一个非常有趣的难题!幸运的是,有一个解决方案.

首先,回顾一下:

  • 账户A中的A桶
  • 账户B中的B桶
  • 帐户A中的用户将对象复制到Bucket B(已被授予相应的权限)
  • 存储桶B中的对象仍属于帐户A,帐户B无法访问

我设法重现了这一点,并确认帐户B中的用户无法访问该文件 - 甚至不是帐户B中的root用户!

幸运的是,事情可以修复.将aws s3 cp在命令AWS命令行界面(CLI)当复制到相同的名称可以更新文件的权限.但是,要触发此操作,您还必须更新其他内容,否则会出现此错误:

此复制请求是非法的,因为它试图将对象复制到自身而不更改对象的元数据,存储类,网站重定向位置或加密属性.

因此,可以使用以下命令更新权限:

aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --acl bucket-owner-full-control --metadata "One=Two"
Run Code Online (Sandbox Code Playgroud)
  • 必须由帐户运行具有对象访问权限的用户(例如,最初将对象复制到Bucket B的用户)
  • 元数据内容并不重要,但需要强制更新
  • --acl bucket-owner-full-control 将授予帐户B的权限,以便您能够正常使用这些对象

最终结果:你可以使用一个水桶!

  • 如果要更改已存在对象的权限,则必须使用--metadata部分,否则cp命令将失败,因为未进行任何更改。如果要复制新对象(或从其他位置复制),则不需要--metadata。 (2认同)