amazon-web-services - 自动将存储桶策略应用于所有新上传的文件
问题描述
所以我有一个存储桶,设置为私有,具有以下存储桶策略:
{
"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>
那么我必须做什么才能使所有新上传的文件自动可供我在存储桶策略中指定的用户(主体)使用?
解决方案
首先,值得注意的是,存储桶策略通常用于授予公共访问权限,或基于限制(例如 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"
我通常只在来自一个帐户的凭据将文件上传到另一个帐户拥有的存储桶的情况下才会看到这种情况。但是,这听起来不像你的情况。
推荐阅读
- linux - Bash binary reports a different version at different times
- c# - 在 HTTP 请求中热使用证书票证
- ios - 在 swift 中添加一个 BlockOperation 对另一个 BlockOperation 的依赖不能正常工作
- c# - XAML 根据 Rectangle 的大小更改 TextBlock Margin 属性
- google-apps-script - 如何使用 Apps 脚本对齐 Google Docs 中的附加图像
- mysql - SELECT忽略分区?
- excel - 如何转置复制的数据?
- office-js - 如何在 Windows 10 1903 上的 Outlook 中清除缓存的加载项起始页?
- python - 从文本文件为确定性有限自动机创建 Python 字典
- python - 用 CSV 的内容填充 ipywidget 下拉列表?