显示图像的 AWS S3 策略(只读)。请验证

Chr*_*fer 2 amazon-s3

我很惊讶为 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 上提出的问题的边界,但我认为这个问题很常见,因此对其他人和参考都很有趣。

Mic*_*bot 5

解释此政策:

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 的情况下,某些东西可以是存储桶级别的策略,对象级别。没有任何规则允许放置、删除、列表等,意味着这些东西被隐式拒绝。

评估策略时,单个匹配的“拒绝”规则(内置隐式拒绝除外)会覆盖任何“允许”规则。