在本地服务器中安全地存储 AWS 访问凭证

在本地服务器中安全地存储 AWS 访问凭证

将 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

相关内容