【问题标题】:Aws IAM Roles vs Bucket PoliciesAws IAM 角色与存储桶策略
【发布时间】:2018-06-08 11:47:00
【问题描述】:

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

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

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

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

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

感谢您的澄清。 - AWS 新手

【问题讨论】:

  • 希望对您有所帮助:aws.amazon.com/blogs/security/…
  • 谢谢,为了获得动手体验,我创建了一个管理员用户,并以该用户身份登录。接下来我创建了一个桶。在权限下,我看到了 ACL、存储桶策略和 CORS 的按钮。我在这里看到的 UI 与我在各种 youtube 视频中看到的完全不同。当我选择 ACL 选项时,我被要求“:为您的 AWS 账户添加访问权限”或“添加对另一个 AWS 账户的访问权限”。我很抱歉根本没有得到这个!添加对“另一个”AWS 账户的访问权限是什么意思?我自己的 AWS 账户中的用户呢? (我创建了两个具有管理员权限的用户)。令人沮丧!
  • 进一步阅读 UI 帮助,“ACL”按钮现在似乎是“为其他 AWS 账户提供基本读/写权限的旧策略选项”。我想现在除了使用存储桶策略之外,没有办法向同一帐户中的各个用户授予权限。
  • 是的,您可以向单个用户授予 S3 权限,但您不需要使用存储桶策略来执行此操作。只需创建一个允许对特定存储桶执行相关操作的 IAM 策略,然后将该策略附加到 IAM 用户(或用户所在的组)。示例:aws.amazon.com/blogs/security/…

标签: amazon-web-services roles policies


【解决方案1】:

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

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

ii) 我们管理谁可以访问以及他们的permission level with policies

iii) 策略可以是identity based (attached to IAM user/group/role) or resource based (attached to S3 bucket, SNS topic)

iv) 基于资源的策略将具有 Principal 元素,但基于身份的策略将没有 (because the attached IAM entity is the Principal)

v) Permissions start from default deny, allow overrides the default deny and an explicit deny overrides any allow

vi) 最终访问权限将由所有策略组合确定

回答您的问题:

1> 我们无法使用 S3 存储桶添加(或附加)IAM 角色。如果您希望您的存储桶应该是公开的(不推荐但需要这样做till some extent if it's in use for static website),那么您可以保持公开

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

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

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

【讨论】:

  • 我担心我的问题太多,我会得到让我更加困惑的回答!因此,为了简单起见(对我而言),我想从这 1 个用例开始:1)创建一个存储桶并将其公开。为什么我需要一个角色/策略/任何东西来作为真实用户或作为在 EC2 上运行的应用程序访问它?
  • 在重新阅读了您上面的 cmets 之后,我想详细说明一下我的 usecase1 - 如果我的理解不正确,请纠正我:
  • 在重新阅读了您上面的 cmets 之后,我想详细说明一下我的 usecase1 - 如果我的理解不正确,请纠正我: 1. 我创建了一个存储桶。默认情况下,它具有拒绝权限,因此我的 AWS 帐户中的任何用户或 EC2 都无法查看/访问此存储桶 2。然后我将其设为“公共”。这是否意味着我创建了一个基于资源的“桶策略”,相当于 (Principal=*, Action=s3:GetObject, Effect=Allow, Arn:....:/*)??
猜你喜欢
  • 2016-12-23
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2019-04-07
  • 1970-01-01
  • 2020-09-07
  • 2019-02-26
相关资源
最近更新 更多