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