尝试下载文件时从s3获取403禁止

时间:2016-05-12 16:01:42

标签: amazon-web-services amazon-s3 aws-cli

我在s3上有一个存储桶,并且用户可以完全访问该存储桶。

我可以执行post命令并查看存储桶中的文件,但下载失败时会显示:

ls

我还尝试通过IAM控制台授予完全S3权限的用户。同样的问题。

供参考,以下是我的IAM政策:

A client error (403) occurred when calling the HeadObject operation: Forbidden

我还尝试添加一个存储桶策略,甚至将存储桶公开,但仍然没有...也是,从控制台,我试图对存储桶中的文件设置单独的权限,并得到一个错误说我不能查看存储桶,这很奇怪,因为我在消息出现时从控制台查看它,并且可以{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*" ] } ] } 桶中的任何内容。

编辑我的存储桶中的文件是使用我帐户中的凭据从另一个属于其他帐户的存储桶中复制的。可能或可能不相关...

第二次编辑只是尝试从其他存储桶上传,下载和复制我自己的文件到这个存储桶,并且工作正常。问题特别在于从另一个帐户的桶中放置的文件。

谢谢!

3 个答案:

答案 0 :(得分:7)

我认为你需要确保在使用" bucket-owner-full-control"在桶之间移动/复制它们时将权限应用于对象。 ACL。

以下是有关在移动或复制文件时如何执行此操作以及追溯的详细信息: https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-owner-access/

此外,您可以在此处阅读各种预定义授权: http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl

答案 1 :(得分:5)

这里的问题源于你如何将文件放入存储桶中。具体而言,您拥有的凭据和/或您在上载时授予的权限。当我有多个AWS账户时,我遇到了类似的权限问题,即使我的存储桶策略是非常开放的(因为你的在这里)。在上传到其他帐户(A2)拥有的存储桶时,我不小心使用了来自一个帐户的凭据(称为A1)。因为这个A1保留了对象的权限,并且存储桶拥有者没有获得它们。在上传时,至少有3种方法可以解决此问题:

  • 切换帐户。运行$export AWS_DEFAULT_PROFILE=A2或者,为了进行更永久的更改,请修改~/.aws/credentials~/.aws/config以在[default]下移动正确的凭据和配置。然后重新上传。
  • 在上传时指定其他个人资料:aws s3 cp foo s3://mybucket --profile A2
  • 打开存储桶拥有者的权限(不需要更改配置文件):aws s3 cp foo s3://mybucket --acl bucket-owner-full-control

请注意,前两种方法涉及具有单独的AWS配置文件。如果您希望保留两组帐户凭据,则可以使用此方法。您可以通过aws configure --profile Foo设置包含密钥,区域等的配置文件。有关命名配置文件的详细信息,请参阅here

还有一些更具参与性的方法可以追溯(上传后),您可以阅读here

答案 2 :(得分:0)

要为新添加的文件正确设置适当的权限,请添加以下存储桶策略:

$ docker --version
Docker version 18.09.1, build 4c52b90
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

您的存储桶策略更加开放,所以这不是您的障碍。

但是,上传者需要为新创建的文件设置ACL。 Python示例:

[...]
{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789012::user/their-user"
    },
    "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
    ],
    "Resource": "arn:aws:s3:::my-bucket/*"
}

来源:https://medium.com/artificial-industry/how-to-download-files-that-others-put-in-your-aws-s3-bucket-2269e20ed041(免责声明:由我撰写)