将 AWS IAM 访问凭证存储在物理/虚拟服务器中以便其中运行的服务可以访问它的最佳方法是什么?
这个问题很久以前就通过以下方式针对 EC2 实例进行了修复实例配置文件但我不知道非 EC2 服务器(即数据中心内的租用箱、放在家里的 RaspberryPi 等)的最佳实践是什么。
笔记:我这里说的不是个人台式机或笔记本电脑中的开发环境。多种解决方案针对这种情况。
如果可能的话,我希望避免将长期存在的访问密钥 ID 和秘密访问密钥对以明文形式存放在硬盘上。许多需要访问 AWS 服务的工具和系统都依赖于在配置文件中包含访问密钥和密钥 ID 对,或者使用标准环境变量。
我正在考虑的一种方法是使用AWS System Manager 的代理(已安装在盒子中)定期从 AWS 机密管理器或参数存储中提取密钥。代理本身在主机上运行命令和调用自动化工作流时使用自定义 IAM 角色,因此我应该能够根据需要添加额外的 IAM 策略来访问参数存储或其他 AWS 服务。
想知道是否有任何好的做法来实现这一点。如果这是一个已解决的问题,我不想重新发明轮子,或者想出一个过度复杂的自定义解决方案。
答案1
不管怎样你都必须一些凭证在将用于检索 AWS 密钥的服务器上。至少尝试通过 IP 对其进行限制。以下是其中一种方法:
- 创建专用IAM 用户对于每个服务器和一个IAM 角色。
- 这IAM 角色拥有完成任务所需的所有权限,而IAM 用户
sts:AssumeRole
除此之外还有特权IAM 角色。 - 技巧如下:在 IAM 用户的
sts:AssumeRole
策略中使用Condition: { IPAddress: ... }
,将其使用限制在您服务器的 IP 上。请参阅此处了解更多详细信息。
你可能会问为什么我建议使用 IAM 用户和单独的 IAM 角色 - 这是因为IPAddress 条件必须为策略中的每个权限指定。如果您将其应用于,那么sts:AssumeRole
您就有一个可以控制它的地方。如果您将所有权限/策略直接附加到 IAM 用户,则必须为每个权限反复指定相同的条件。
希望有帮助:)
答案2
最佳方法:使用 SSM 代理自动为其赋予“角色”。其工作方式与实例配置文件相同。
免费奖励:如果您关心的话,您可以验证服务器的安全状况并进行补丁管理。 https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html