2

我已经阅读了许多文档并观看了许多视频,但我仍然对 IAM 角色和存储桶策略感到非常困惑。这让我感到困惑:

1)我创建一个桶。那时我可以将其公开或保密。如果我将其公开,那么任何人或任何Application都可以“看到”存储桶中的对象。我认为可以将权限设置为添加/删除/获取/列出存储桶中的对象。如果是这种情况,那么为什么我需要为 S3 存储桶添加任何 IAM 角色,或者添加任何存储桶策略 (???)

2) 在我创建存储桶时,我可以只向某些用户/应用程序/EC2 实例等授予对全部或部分存储桶的非常特定的权限吗?例如,EC2-X 上的 App1 可以访问存储桶 B1 中的子文件夹 A。

3) 来到 IAM 角色,一个提供完全 S3 访问权限的 EC2 角色——这是什么意思?完全访问任何存储桶?如何将在 EC2 上运行的应用程序限制为仅具有某些受限权限(参见上面的 #2)的特定存储桶?EC2 上的所有应用程序是否都具有对所有存储桶的完全访问权限?在创建存储桶时,是否可以将权限设置为可以推翻 IAM 角色?

4) 最后,Bucket Policies 除了上述的 IAM Roles 还做了什么?例如,“AllowS3FullAccess”是“桶策略”还是“IAM 策略”?为什么要区分策略类型-策略只是-它们在某些对象/资源上定义了一些权限/规则,正如我所见。

感谢您的任何澄清。- AWS 新手

4

1 回答 1

7

我认为您将资源权限与 IAM 实体混淆了。

i) AWS 账户拥有资源(S3 存储桶、EC2 实例等),IAM 用户、IAM 角色或其他 AWS 服务(可以来自相同或不同账户)可以访问这些资源

ii) 我们通过政策管理谁可以访问及其权限级别

iii) 策略可以基于身份(附加到 IAM 用户/组/角色)或基于资源(附加到 S3 存储桶、SNS 主题)

iv) 基于资源的策略将具有 Principal 元素,但基于身份的策略将没有该元素(因为附加的 IAM 实体是 Principal)

v)权限从默认拒绝开始,允许覆盖默认拒绝,显式拒绝覆盖任何允许

vi) 最终访问将由所有策略组合决定

要回答您的问题:

1> 我们无法使用 S3 存储桶添加(或附加)IAM 角色。如果您希望您的存储桶应该是公开的(不建议这样做,但如果它用于静态网站,则需要在一定程度上这样做),那么您可以将其公开

2> 创建存储桶时是不可能的。您必须在通过 IAM 和/或 S3 存储桶策略创建存储桶后执行此操作

3> 如果 IAM 角色具有 AmazonS3FullAccess,则该角色可以 (Effect:Allow)为您账户中的任何 S3 资源 (Resource: ) 调用任何 S3 API (s3: )(前提是他们没有跨账户访问权限)。如果多个应用程序在附加了 IAM 角色的实例上运行并使用该角色提供的凭证,则它们的权限将相同。

4> 我不知道您从哪里获得了 AllowS3FullAccess 参考,但除非我们知道确切的 JSON,否则我们无法确认。如果它附加到存储桶或具有 Principal 元素,则它是存储桶策略。您可以根据需要使用 IAM 和 Bucket 策略。通常存储桶策略用于跨账户访问,或者如果您想在一个地方管理 S3 权限策略。

于 2017-12-27T22:13:57.497 回答