EC2 实例如何担任 IAM 角色?

0

【以下的问题经过翻译处理】 我正在完成安全学习计划,最近正在观看有关 AWS Secrets Manager 的一段视频。

我特别关心的问题是为什么使用 AWS Secrets Manager 会比将加密凭证存储在配置文件中更好。我知道 Secrets Manager 在几个方面显然比配置文件更有优势(凭证轮换、凭证维护的中心点),但这些并没有回答我的问题。

为了澄清,让我举例说明,假设我有一个运行 Tomcat 的 EC2 实例,而 Tomcat 需要凭据才能连接到数据库。我将凭证存储在 Secrets Manager 中,并使用 Java API 让 Tomcat 去获取凭证。我想(我还没有尝试过)我需要通过为它分配一个具有适当权限的 IAM 角色来授予 EC2 实例所需的权限(也许这个假设是不正确的,如果是这样,我该怎么做呢?)。接下来是我的问题:

  1. Secrets Manager 如何知道凭据的请求是合法的?
  2. Tomcat 如何发送针对 Secrets Manager 身份验证的 HTTP 查询?
  3. Secrets Manager 会看到 Java 进程的查询过程吗?还是只会看到来自实例 i-something 的请求?
  4. 如果 3 的答案是“Secrets Manager 只看到正在查询的实例”,那么如何防止同一个盒子上的另一个进程查询 DB 的凭证?如果我选择带有配置文件的解决方案,主要的安全缺陷之一是盒子上的任何入侵者都可以读取文件、获取代码和解密凭证。我想知道 Secrets Manager 是否为这个基本问题提供了一个好的解决方案。

我没有找到任何帖子能提供详细信息讨论此问题(例如 https://repost.aws/questions/QUAsOpdhR-QAKVZEL0nRGTkw/aws-secrets-manager-with-boto-3-in-python)。

我希望我已经足够好地解释了这个问题。感谢您的每一个回答。

profile picture
专家
已提问 3 个月前7 查看次数
1 回答
0

【以下的回答经过翻译处理】 这里很好地解释了 EC2 实例如何使用实例配置文件承担角色:[使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限](https://docs.aws.amazon.com/IAM/latest/用户指南/id_roles_use_switch-role-ec2.html)。

您还可以阅读 使用 IAM 角色的优势 而不是手动分发凭证.

现在回到你的问题。

您是对的:您需要通过为其分配具有适当权限的 IAM 角色(用于访问 Secrets Manager 服务和获取存储的秘密)来授予 EC2 实例所需的权限。

  1. 检查请求是否合法不是 Secrets Manager 服务专门做的事情。这是 AWS 的核心功能——每个 API 调用都将被检查有效性。每个 API 请求都必须使用凭证进行签名才能访问 AWS 服务。 AWS 将检查凭据是否有效以及它们是否授予调用该特定 API 的权限。
  2. 当您使用 Java SDK 并从分配了角色的实例调用 Secrets Manager 时,SDK 将首先调用 [AWS Security Token Service](https://docs.aws.amazon.com/STS /latest/APIReference/welcome.html) 并为您获取凭据。如果您将角色附加到您的 EC2 实例,此调用将在后台发生。 AWS STS 将颁发临时凭证,这些凭证将在一段时间后过期。这些凭据将签署发送到 Secrets Manager 的后续请求,因此这就是对调用进行身份验证的方式。有关更多信息,您可以阅读这篇博文 解释了在担任角色。
  3. Secrets Manager 服务将观察来自 EC2 服务的 API 调用。无法限制对单个进程的访问。在具有附加角色的 EC2 实例上运行的所有进程都将拥有该角色授予的所有权限。
  4. 通过使用基于资源的权限策略,您可以控制哪些 IAM 角色和服务可以访问您的秘密 在 Secrets Manager 中。但是,如果分配了角色的实例将受到威胁,这不会阻止入侵者访问机密。在这种情况下,请遵循安全事件响应最佳实践 并隔离实例。由于您没有在该实例上存储任何长期凭证,因此被泄露的临时凭证很快就会过期,因此入侵者将无法再访问这些服务。您还可以在 Secrets Manager 中配置自动 secrets rotation,这样您的数据库密码也会自动更改(不需要将它们分发到您的所有实例)。
profile picture
专家
已回答 3 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则