【问题标题】:Getting 403 forbidden from s3 when attempting to download a file尝试下载文件时从 s3 获取 403 禁止
【发布时间】:2016-09-08 14:13:56
【问题描述】:

我在 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/*"
            ]
        }
    ]
}

我还尝试添加存储桶策略,甚至将存储桶公开,但仍然不行...另外,从控制台,我尝试对存储桶中的文件设置单独的权限,并收到错误消息说我不能查看桶,这很奇怪,因为我在消息出现时从控制台查看它,并且可以ls桶中的任何东西。

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我认为它做到了!
    【解决方案2】:

    这里的问题源于您如何将文件放入存储桶中。特别是您在上传时拥有的凭据和/或您授予的权限。当我有多个 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 的信息。

    【讨论】:

      【解决方案3】:

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

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

      您的存储桶策略更加开放,所以这不是阻止您的原因。

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

      import boto3
      
      client = boto3.client('s3')
      local_file_path = '/home/me/data.csv'
      bucket_name = 'my-bucket'
      bucket_file_path = 'exports/data.csv'
      client.upload_file(
          local_file_path,
          bucket_name, 
          bucket_file_path, 
          ExtraArgs={'ACL':'bucket-owner-full-control'}
      )
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 2019-07-04
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 2022-11-08
        • 1970-01-01
        相关资源
        最近更新 更多