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

MrS*_*kel 7 amazon-s3 amazon-web-services aws-cli

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

我可以执行ls命令并查看存储桶中的文件,但是下载它们会失败:

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

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

作为参考,这是我的IAM政策:

{
    "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/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我也尝试添加一个存储桶策略,甚至将存储桶公开,但仍然没有...也是,从控制台,我试图对存储桶中的文件设置单独的权限,并得到一个错误,说我无法查看存储桶,这很奇怪,因为我在消息出现时从控制台查看它,并且可以ls在桶中进行任何操作.

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

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

谢谢!

小智 8

我认为您需要确保在使用"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


wat*_*nic 6

这里的问题源于你如何将文件放入存储桶中.具体而言,您拥有的凭据和/或您在上载时授予的权限.当我有多个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.有关命名配置文件的更多信息,请参见此处.

还有一些比较复杂的方法可以追溯(上传后),你可以在这里阅读.