2017-05-01 75 views
5

我有一组视频文件从一个AWS Bucket从另一个帐户复制到我自己的存储桶中的帐户。Amazon S3文件权限,从其他帐户复制时访问被拒绝

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

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

当我看着这个特定文件时,这些文件的权限选项卡没有显示任何分配给任何人的权限。没有用户,组或系统权限已分配。

在权限选项卡的底部,我看到一个小框,上面写着“Error:Access Denied”。我无法改变有关文件的任何内容。我无法添加元数据。我无法将用户添加到该文件。我无法将文件公开。

有没有一种方法可以获得这些文件的控制权,以便我可以将它们公开?有超过15,000个文件/大约60GB的文件。我想避免下载并重新上传所有文件。

从这里的人们的一些帮助和建议我已经尝试了以下。我在我的存储桶中创建了一个名为“媒体”的新文件夹。

我试过这个命令:

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 

我调用HeadObject操作时收到一个致命错误403:禁止。

+0

使用AWS CLI做从命令行:http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html –

+0

我看到--grant选项,但是我不确定的是使用什么命令?我不想复制,删除或同步它。我只是想将权限应用到文件。我认为同步将是我想要做的,因为这听起来不像它会移动文件或删除它。 – Robbiegod

+0

@ShobhitPuri为什么你认为OP将有权限从CLI执行此操作?您需要使用AWS凭证配置CLI。如果您使用与用于登录AWS控制台的凭据相同的凭据,则很可能会遇到相同的权限问题。 – Viccari

回答

10

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

首先,回顾一下:

  • 铲斗甲在帐户A
  • 铲斗乙帐户B
  • 用户在帐户A拷贝对象到铲斗B(已授予适当的权限这样做)在桶乙
  • 对象仍属于A帐户,无法通过B帐户来访问

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

幸运的是,事情可以修复。 AWS Command-Line Interface (CLI)中的aws s3 cp命令可以在复制到相同名称时更新文件权限。然而,要触发这个,你还必须更新其他东西,否则你得到这个错误:

This copy request is illegal because it is trying to copy an object to itself without changing the object's metadata, storage class, website redirect location or encryption attributes.

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

aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --acl bucket-owner-full-control --metadata "One=Two" 
  • 必须由运行帐户具有对象访问权限的用户(例如,最初将对象复制到桶B的用户)
  • 元数据内容不重要,但需要强制更新
  • --acl bucket-owner-full-control将权限授予帐户B这样你就可以使用对象为正常

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

+0

如果在更改上传到桶B的文件权限时帐户A获得AccessDenied错误,该怎么办?这是帐户A或帐户B中的权限错误吗?或桶B? – Phlucious

+0

@Phlucious权限将在拥有资源的帐户(在这种情况下,桶B)。今后,请创建一个新的问题,而不是在评论中提出另一个问题。 –

+0

谢谢!这似乎是相关的,因为我能够调整这个答案,以便在_new_上传时完全控制账户B.谷歌搜索为我带来了这里。 – Phlucious

1

恐怕您无法按照您的意愿转让所有权。以下是您所做的:

旧帐户将对象复制到新帐户中。

做的“正确”的方法(假设你想承担的新帐户所有权)将是:

新的帐户将复制旧帐户对象。

看到小而重要的区别? S3 docs有种解释它。

我想你可能会摆脱它而无需通过复制同一个存储桶中的所有文件,然后删除旧文件来下载整个文件。确保您可以在复制后更改权限。这也应该为您节省一些钱,因为您不必为下载所有内容的数据传输成本付费。

+0

是的,我明白了。谢谢。我无法获得其他账户存储桶的“桶”访问权限,因此我们必须以这种方式进行尝试。我会尝试你的建议。 – Robbiegod

+0

我确实尝试使用Cloudberry下载图像,但即使这样也行不通。我得到一个403错误,拒绝访问。我在CLI中尝试了一个cp命令,但是我也一直在执行403错误。不确定我现在有什么选择。 :( – Robbiegod

+0

我在想你只能复制/粘贴你的文件到AWS控制台本身。如果你无法从这个文件夹下载文件,它看起来你甚至没有GetObject权限,只有ListBucket。这实际上是有道理的,因为GetObject是一个对象权限,而ListBucket是一个桶权限,你拥有这个桶,但不是这些文件。如果您可以确认,则需要请求其他AWS账户的所有者重新复制或授予您访问权限。 – Viccari

0
aws s3 cp s3://account1/ s3://accountb/ --recursive --acl bucket-owner-full-control 
相关问题