AWS STS 使用案例和优势

AWS STS use cases and advantages

我对 STS 的用例和优势感到困惑。根据文档,它是临时获得一个角色来执行 AWS 中 IAM 用户或服务无法使用的任务。请注意,我说的是编程访问(不是控制台访问)

例如,IAM 用户可能没有 S3 权限。据我了解:

  1. 他可以通过联系 AWS STS 获得临时访问 key/token 并获得 S3 的访问密钥和秘密。

  2. 使用这些临时凭据,他可以访问 S3。

我的问题是:

  1. 要从 AWS STS 获取临时凭证,他仍然需要他现有的访问令牌(永久)和秘密,对吗?

  2. 如果他现有的access token和secret泄露了,攻击者仍然可以利用它先从STS获取临时凭证,然后访问S3,对吧?我知道攻击者将无法使用他的永久访问令牌和秘密直接访问 S3。

我正在努力思考它的正确用例。我知道我很困惑,但也许我在循环思考。

提前致谢。

他们不太“联系 AWS STS 并获取 S3 的访问密钥和秘密”。相反,他们在有权访问 Amazon S3 的 IAM 角色上调用 AssumeRole()。然后,使用返回的临时凭据,他们可以访问 S3。

您的困惑似乎主要围绕 IAM 角色的用例。我喜欢用故事的方式来解释...

我是办公室的消防员。如果火警启动,我会去橱柜,戴上红色头盔,然后在办公室里走来走去,引导人们到楼梯间。由于警报响起并且我戴着红色帽子,人们(大多数)按照我告诉他们的去做。但是,如果是正常的一天,没有闹钟响,我也没有戴红帽子,我让他们从楼梯间离开办公室,他们可能会用奇怪的眼神看我,而不会理会我的请求。不同之处在于,我担任了 Fire Warden 的角色,这给了我额外的权限。

所以,作为一个普通人,我不能命令人们离开办公室。但是,一旦我承担了这个角色,我就有了额外的权限。

这对于 IT 系统也是一个很好的做法。您公司的系统管理员可能在您的 AWS 账户中拥有执行 任何事情 的权限。但是,他们日常使用具有此类权限的帐户是一种不好的做法。相反,他们的 IAM 用户帐户应该只有普通权限,但是,如果他们想做管理员类型的事情,他们有能力承担管理员角色,然后做强大的事情。当他们完成后,他们应该退出角色并继续成为普通用户。这很多 'safer',因为当他们是 'normal user'.

时,他们不会意外地做一些强大的事情

Amazon 安全令牌服务 (STS) 还用于提供对 Amazon EC2 实例 上的软件运行 的权限。在这种情况下,IAM 角色被分配给 EC2 实例,EC2 服务 'assumes' 代表该实例的角色。然后它通过 EC2 实例元数据服务提供临时凭证。在此示例中,没有承担该角色的 IAM 用户。相反,EC2 服务代表实例承担了它。

STS 还可以提供跨账户权限。例如,账户 A 中的 IAM 用户可以对账户 B 中的 IAM 角色调用 AssumeRole()。如果他们有权执行此操作,则他们将获得与账户 B 关联的临时凭证。这是必需的,因为来自一个帐户的凭据永远不能用于管理另一个帐户中的资源。

使用临时凭证还有其他原因,例如使用 MFA 令牌、没有 IAM 用户的联合登录以及减少您自己的权限集。

我将尝试扩展和概括第一个答案。 Fire Warden 的例子很容易理解,但我觉得它需要一些扩展。

通常 AWS STS 能够 return 基于其他身份或角色凭证(aws 或其他身份提供商)的角色凭证。

原始凭证可以是来自同一账户、另一个账户、联合令牌(例如支持的社交网络)甚至自定义身份代理的 AWS 凭证。

https://docs.aws.amazon.com/cli/latest/reference/sts/index.html

常见用例:

  • 特权提升 - 这已经提到,AssumeRole 允许 成为 相同或不同 aws 帐户中的另一个角色

  • 以其他方式(AD、SAML、OIDC 等)对 aws 资源进行身份验证的授权,请参阅服务 AssumeRoleWithSAML 或 AssumeRoleWithWebIdentity。

  • 使用自定义授权对 aws 资源的授权,请参阅 GetFederationToken。

To get temporary credentials from AWS STS, he still need his existing access token (permanent) and secret, right?

默认情况下AssumeRole,用户需要经过身份验证并有权承担该角色。

If his existing access token and secret are leaked, an attacker can still use it to first get temporary credentials from STS and then access S3, right?

I understand that the attacker won't be able to directly access S3 using his permanent access token and secret

如果您以这种方式配置 S3 或 IAM 权限