【问题标题】:How do I find out which AWS ACCESS KEY ID was used to launch an instance?如何找出用于启动实例的 AWS ACCESS KEY ID?
【发布时间】:2016-06-08 06:32:10
【问题描述】:

我想创建一个工具来监控 AWS 是否有未使用的实例,然后向启动该实例的用户发送一封电子邮件,要求他们在不使用它时将其关闭。

假设我有一个数据库,其中包含访问密钥 ID 和我们公司启动 EC2 实例的用户的电子邮件地址之间的映射,我如何找到正在运行的 EC2 实例的访问密钥 ID?

是否有任何现有的软件或服务已经这样做了?

【问题讨论】:

标签: amazon-web-services


【解决方案1】:

您不能这样做 - 用户和正在运行的实例之间并不总是存在关系。

考虑一下自动扩缩:实例可以在线响应事件,运行几个小时,然后消失。无需人工干预。

您可以通过打开 CloudTrail 来提取有关创建它的用户的一些信息,但它无法识别使用了哪个密钥。请记住,用户可以拥有多个密钥。

如果您真的想确保可以跟踪谁在启动实例,请制定一个政策,要求带有电子邮件地址的特定标签(例如“所有者”),并终止任何没有该标签的实例放。 (您应该可以使用 AWS Config 规则执行此操作)

【讨论】:

  • CloudTrail 实际上记录了每个请求使用的访问密钥。请参阅:docs.aws.amazon.com/awscloudtrail/latest/userguide/…。但是,无论如何,我同意你的观点,这不是跟踪谁做了什么的理想方式——正如你所提到的,用户可以有多个密钥,并且可以轮换;除此之外,还有各种临时密钥,因此不是真正实用的方法来跟踪谁做了什么。
  • @BrunoReis CloudTrail 记录足以跟踪操作的 iam 用户。
  • @helloV,是的——上面链接的同一个文档页面详细解释了这一点。我只是在评论 chris 的消息,上面写着“它不会识别使用了哪个密钥”——确实如此。
  • @BrunoReis - 我在考虑链接到 IAM 帐户的密钥 - 在临时凭证或自动事件的情况下,CloudTrail 事件的 userIdentity 部分甚至可能没有 API 密钥
  • 再次感谢@chris 的现场回答!对于标签策略实施,我目前正在使用 github.com/capitalone/cloud-custodian,因为它功能非常丰富,并且能够向人们发送消息并让他们有机会在关闭之前追溯标签。 (不确定 AWS Config 是否这样做,但很好奇)
【解决方案2】:

所有实例都有一个与之关联的 IAM 用户。您可以从 CloudTrail 获取此信息,但它会显示过去 2 周的轨迹,因此您需要定期收集数据并存储它。

我的做法是:我使用 CloudTrail + Lambda 的组合,并在实例启动时标记实例。标签可以是姓名或电子邮件。当我看到未使用的实例时,我会查询标签并发送标签标识的电子邮件。它完美无缺。我把它作为一个问题发布:Mandatory tagging when launching EC2 instance

检查我发布的已接受答案。学习 AWS Lambda 很有趣。 Lambda 使用量低于免费套餐限制,我无需为使用 AWS Lambda 支付任何费用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2018-08-30
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2023-04-05
    相关资源
    最近更新 更多