自动将存储桶策略应用于所有新上传的文件

时间:2019-08-13 23:48:22

标签: amazon-web-services amazon-s3

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

{
    "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将文件上传到存储桶。该应用程序调用我的后端,在那里我从我的secretKeys生成一个“ signedURL”,然后该应用程序使用该URL将新文件推送到存储桶。

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

<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>

那么我要怎么做才能使所有新上传的文件自动对我在存储桶策略中指定的用户(本人)可用?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

某些操作是在存储桶的上执行的,因此您可以尝试:

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

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

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

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