我正在尝试使用 EC2 来提供一种易于使用的方式来引导难以构建的 Web 应用程序。问题是,文件系统上有一些敏感配置,例如密码盐。
我编写了一个用户数据脚本,在首次启动时用随机值替换这些盐,然后将其放在构建 AMI 的实例的用户数据属性中。
但现在在我看来,用户数据脚本特定于实例,而不是 AMI - 也就是说,它仅在执行克隆的用户指定时运行,而不是 AMI 的创建者(我)。
嗯...呃,我想“用户数据”这个名字是有意义的。
这有错吗?有什么办法我提供一个可在我的 AMI 的新克隆上自动运行的脚本?
答案1
如果您正在构建 AMI,那么您可以将任何内容放在文件系统上。
对于您关于在启动时运行代码的高级问题,您可以将代码作为标准系统启动脚本添加到 AMI 文件系统中。具体方法取决于特定 Linux 发行版和版本使用的初始化软件。
但是!您举的具体例子是覆盖文件系统上的敏感数据,这在 AMI 中是不安全的。敏感、私人或秘密信息永远不应放在 AMI 中。事实上,它永远不应触及用于构建公共 AMI 的 EBS 卷,因为用户有办法恢复已删除的数据。
我写过几篇关于这些安全风险的文章:
为 EC2 安全地创建公用 AMI
http://alestic.com/2011/06/ec2-ami-security在 EC2 上创建公共 EBS 快照的隐患
http://alestic.com/2009/09/ec2-public-ebs-danger