问题描述
想要设置一个自动扩展的配置,但不知道如何在启动新实例时安全地从私有仓库获取代码。他不希望将密码放在启动脚本中,也不希望将私钥存储在可以无需密码下载的地方。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
一种方法是将私有仓库放在与实例相同的VPC中,并从那里拉取代码。只需确保仓库无法从VPC外部访问即可。
方案2
另一种方法是通过SSH登录到新实例,并使用SCP命令将二进制文件传输过去。
方案3
使用Docker部署一个私有容器注册表(例如Amazon ECR)。在本地机器/构建服务器上构建镜像,然后将其推送到注册表中,实例可以从注册表中拉取和执行镜像。
方案4
使用SaltStack的产品Salt。这个配置管理系统可以通过以下三种方式保护敏感数据:
1. Pillars:这些是在主要计算机上安全存储和加密的键值或键列表字典,您可以从中管理整个集群。这将允许您创建salt脚本,在运行时将数据插入到脚本中(因此不会存储在实际脚本中)。
2. GPG加密:这允许您将实际密码和密钥写入脚本中,并将其加密为哈希值,作为占位符存储在版本控制系统(如github/gitlab/bitbucket)中。用于加密/解密的GPG密钥存储在主要计算机(主节点)上,用于管理集群。
3. Salt-cloud:所有salt脚本都存储在主机的/srv/salt/
目录中,但用于在云中启动虚拟机的凭据/密钥存储在/etc/salt/
目录中。这样,您可以将与项目共享的工作存储在github中,但salt需要启动更多资源的敏感数据甚至不在同一个目录中以供记录。
方案5
如果仓库在AWS CodeCommit上,您可以通过为每种类型的实例设置的角色来访问它。请参阅IAM角色文档了解更多信息。