EC2实例元数据或用于API身份验证的AWS STS?安全最佳实践

问题描述

这是用例。 我有一个运行ServiceNow中间服务器代理的EC2实例。 EC2实例已附加名为“ TestIAMRole”的IAM_Role,并假定角色策略已附加到角色。我使用此EC2实例和ServiceNow中间服务器代理来使用AWS boto3端点调用VPC端点。 Python脚本将使用boto3 SDK生成身份验证令牌并调用端点。

Python示例:

process

然后使用Python请求,我们将其称为VPC端点,并且工作正常。

由于我们正在EC2实例上运行代理,因此想到了另一种使用curl使用本地https端点的EC2实例元数据的方法,它会返回access_key,secret_key和session_token

plot

因此,我们正在从以上两个选项中寻找最安全/建议的专家意见。

此外,还有一些关于优化的问题

  1. 如果我们使用假定角色STS方法检索凭证,则建议将这些凭证存储在缓存/应用程序中,直到到期日期为止,以便我们可以重用它们,或者在每次调用其他AWS时获得新的sts凭证服务?每次我们调用AWS服务时,都只是尝试保存其他STS调用。
  2. 如果可以选择将其存储在缓存或应用中,则可以将密钥安全地存储在ServiceNow(加密格式)中,并且可以在到期日期之前定期进行更新。

请告知这是否正确。

解决方法

实例元数据终结点用于IAM角色,首选方法是使用IAM角色将您的权限授予EC2实例。

在某些情况下,您需要担当角色,这些情况在下面进行了详细说明:

  • 访问其他AWS账户的API时(支持资源策略的服务允许引用您不需要STS的跨账户许可。)
  • 在假定您的应用程序通常不具有访问权限(限时任务)时。
  • 作为IAM用户,用户可以在帐户之间(例如在组织中)进行切换。

这些是概括性的,因此我确定在需要时还存在其他特殊情况,但是假设所有内容都在同一帐户中,我建议仅坚持使用实例角色。

,

它们几乎是同一件事。

当您致电boto3.client('sts')时,它将在多个位置查找凭据。实例元数据就是其中之一。

您可以检索实例元数据,从中提取凭证,然后使用这些凭证创建客户端。这不仅会为您带来更多工作,而且您检索到的凭据将是有时间限制的:它们有时会过期,因此您必须再次进行此过程。 Boto客户端足够聪明,可以为您做到这一点。

正如您在问题中所显示的那样,关于承担不同角色,实例元数据将无济于事。您只能检索附加到EC2实例的角色(实例配置文件)的凭据。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...