我正在尝试使用EC2来提供一种易于使用的方式来引导难以构build的Web应用程序。 麻烦的是,文件系统上有一些敏感的configuration,例如密码盐。
我已经编写了一个用户数据脚本,它在首次启动时用随机值replace这些盐,并将其放入我构buildAMI的实例的user-data属性中。
但现在看起来像用户数据脚本特定于实例,而不是AMI – 也就是说,它只在用户进行克隆时指定运行,而不是AMI(我)的创build者。
那么…呃,我想这是有道理的名称“用户数据”。
这是错的吗? 有没有什么办法可以提供一个在我的AMI的新克隆上自动运行的脚本?
如果您正在构buildAMI,那么您可以在文件系统上放置任何您想要的东西。
对于启动时运行代码的高级问题,可以将代码添加为AMI文件系统上的标准系统启动脚本。 具体的做法取决于你特定的Linux发行版和发行版使用的初始化软件。
然而! 覆盖文件系统上的敏感数据的具体示例在AMI中不是安全的。 敏感的,私人的或秘密的信息绝对不能放置在AMI中。 实际上,它不应该触及用于构build公共AMI的EBS卷,因为用户可以通过这些方式恢复已删除的数据。
我已经写了一些关于这些安全风险的文章:
为EC2安全创build公共AMI
http://alestic.com/2011/06/ec2-ami-security在EC2上创build公共EBS快照隐藏的危险
http://alestic.com/2009/09/ec2-public-ebs-danger