将s3图像从一个存储桶复制到同一帐户的另一个存储桶后未加载

时间:2020-02-18 09:35:47

标签: amazon-web-services amazon-s3 bucket

我已将图像从一个存储桶复制到另一个存储桶,现在我无法访问图像。错误显示 AccessDenied条消息。

我已确认文件在存储桶中存在,但无法访问。如果我删除了同一张图片,然后再次上传,则它可以正常工作。

如果我在将存储桶数据从一个复制到另一个的过程中遗漏了任何东西,请提出任何原因。

正在使用旧存储桶的链接,现在无法使用新存储桶访问

https://abc.s3.amazonaws.com/uploads/profile/image/16923/client_thumb_CINDERELLA_12

2 个答案:

答案 0 :(得分:1)

默认情况下,S3中的复制(或任何放置操作)是私有的,因为这是默认的ACL行为,请参见here。这就是为什么即使源文件启用了公共访问也拒绝访问的原因。因此,在您的情况下(cli示例),您需要在复制期间将ACL指定为public-read

aws s3 cp s3://mySourceBucket/test.txt s3://myDestinationBucket/test.txt --acl public-read

请注意,根据AWS,如果您使用--acl,则您的IAM策略必须包含S3:PutObjectAcl操作。

-acl(字符串)设置执行命令时对象的ACL。如果使用此参数,则必须具有IAM策略操作列表中包含的“ s3:PutObjectAcl”权限。仅接受私有,公共读取,公共读取写入,认证读取,aws-exec读取,存储桶所有者读取,存储桶所有者完全控制和日志传递写入的值。有关详细信息,请参见罐头ACL

答案 1 :(得分:0)

您正在尝试访问S3对象的公共URL,仅当您公开打开存储桶时,该URL才有效。您必须将新存储桶设置为可公开访问,并且 ALSO 设置存储桶策略,例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

其中examplebucket是存储桶的名称。