我很惊讶为 AWS S3 存储桶授予只读权限是多么复杂。也许只是我,但我想有几个人使用 S3 来存储网站的图像,从而使它们可用,但只读应该是“单击并选择”选项。
相反,据我所知,您为此使用存储桶策略,使用他们的存储桶策略生成器。
我创建了这个政策,据我所知应该做我想做的:
{
"Version": "2012-10-17",
"Id": "Policy1441664301333",
"Statement": [
{
"Sid": "Stmt1441664293105",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
其中my-bucket-name当然被替换。这在使我的图像(整个存储桶只是图像)公开可用方面起作用。由于我根本不了解此政策中的代码,而且我似乎无法找到有关它的阅读位置,因此我想验证一下:
我相信这是可以在 StackOverflow 上提出的问题的边界,但我认为这个问题很常见,因此对其他人和参考都很有趣。
解释此政策:
Version": "2012-10-17",
Run Code Online (Sandbox Code Playgroud)
这是策略语言的版本。 2012-10-17是最新的。
"Id": "Policy1441664301333",
Run Code Online (Sandbox Code Playgroud)
这是一个不透明的标识符,一个标签,对系统没有意义。
"Statement": [
{
Run Code Online (Sandbox Code Playgroud)
开始政策声明。
"Sid": "Stmt1441664293105",
Run Code Online (Sandbox Code Playgroud)
另一个不透明的标识符。
"Effect": "Allow",
Run Code Online (Sandbox Code Playgroud)
如果匹配,此策略允许指定的操作。反之就是否定。
"Principal": "*",
Run Code Online (Sandbox Code Playgroud)
此政策适用于哪些用户?*= 任何人和每个人
"Action": "s3:GetObject",
Run Code Online (Sandbox Code Playgroud)
匹配此规则时允许执行哪些操作?从 S3 存储桶中获取对象。
"Resource": "arn:aws:s3:::my-bucket-name/*"
Run Code Online (Sandbox Code Playgroud)
哪个存储桶和存储桶中的哪些文件?
}
Run Code Online (Sandbox Code Playgroud)
政策声明结束。
该政策符合您的意图。
当然,还有一种更简单的方法可以实现这一点。通过控制台上传到 S3 时,您可以选择“公开所有内容”,或者通过 API 上传时,您可以使用名为public-read. 这样做授予相同的权限,但在对象级别而不是桶级别,但效果是相同的。
在 S3 中,实际上在所有受 IAM 策略约束的 AWS 中,默认操作是拒绝。 有些东西必须允许访问,对于你想要公开的东西......并且在 S3 的情况下,某些东西可以是存储桶级别的策略,对象级别。没有任何规则允许放置、删除、列表等,意味着这些东西被隐式拒绝。
评估策略时,单个匹配的“拒绝”规则(内置隐式拒绝除外)会覆盖任何“允许”规则。
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |