首页 > 解决方案 > 自动将存储桶策略应用于所有新上传的文件

问题描述

所以我有一个存储桶,设置为私有,具有以下存储桶策略:

{
    "Version": "2012-10-17",
    "Id": "Policy1565384592372",
    "Statement": [
        {
            "Sid": "Stmt1565384582998",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::324546464564:user/myself",
                    "arn:aws:iam::435345345345:user/a_colleague"
                ]
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}

我正在使用 appleWatch 将文件上传到存储桶。该应用程序调用我的后端,我在其中生成一个“signedURL”(来自我的 secretKeys),并且该应用程序使用该 url 将新文件推送到存储桶。

我和我的同事都可以通过 AWS 控制台访问存储桶,能够查看文件列表,但是当我们中的任何人尝试下载任何文件时,我们都会收到拒绝访问:

<Error>
  <link type="text/css" id="dark-mode" rel="stylesheet" href=""/>
  <style type="text/css" id="dark-mode-custom-style"/>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
  <RequestId>8EA4D71C48FDD48B</RequestId>
  <HostId>
      xxxxxxxxxxxxxxxxxxxxxxxxxxx
  </HostId>
</Error>

那么我必须做什么才能使所有新上传的文件自动可供我在存储桶策略中指定的用户(主体)使用?

标签: amazon-web-servicesamazon-s3

解决方案


首先,值得注意的是,存储桶策略通常用于授予公共访问权限,或基于限制(例如 IP 地址)授予所有用户的访问权限。

如果您希望向特定用户授予存储桶访问权限,建议使用 IAM 策略而不是存储桶策略。您可以向您的两个 IAM 用户添加一个策略,让他们可以访问存储桶。

根据您的描述,情况似乎是:

  • 应用程序正在将文件上传到 Amazon S3 存储桶
  • 您可以在 Amazon S3 管理控制台中查看对象列表
  • 但是,您无法下载对象

这可能与您的政策有关。它专门授予访问权限:

"Resource": "arn:aws:s3:::bucket-name/*"

一些操作是在bucket的上进行的,所以你可以试试:

"Resource": ["arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*"]

如果您确实拥有正确的 Amazon S3 权限,则可能与文件的上传方式有关。您可以通过自己将文件上传到存储桶来进行测试,然后查看是否可以下载。如果您可以下载它,但不能下载应用程序上传的文件,那么您可以通过指定修改应用程序上传文件的方式:

"ACL": "bucket-owner-full-control"

我通常只在来自一个帐户的凭据将文件上传到另一个帐户拥有的存储桶的情况下才会看到这种情况。但是,这听起来不像你的情况。


推荐阅读