我想知道在EC2上应该使用什么实践来创build安全和弹性的Rails和MySQL服务器。 更具体地说,当我说“安全和弹性”时,我试图平衡一个事实,即我需要使用dm-crypt保护块级安全EBS存储上的数据(包括MySQL数据和Rails日志)。 为了确保安全,我不愿意以明文方式存储密码。 问题当然是,如果服务器重新启动,encryption的文件系统不能自动挂载,这意味着我也不能自动启动mysqld / nginx / passenger /等。
另一方面,我正在寻找一种灵活的解决scheme,即通过人工干预和自动化的组合,可以快速恢复故障(如暂时丢失存储或EC2实例故障)。
我唯一的select是创build一个手动调用的shell脚本来挂载encryption的EBS卷,然后启动相应的服务器进程? 还是有一些更复杂的密钥pipe理工具,可能能够以安全的方式自动化这个过程?
他们在生产服务器环境中为这种情况做了什么?
如果你所要做的只是保护静态数据的合规性要求,那么将encryption密钥存储在AMI中是没有问题的 – 它们与encryption卷是分开的(远远超过大多数系统,实际上,密钥位于保存encryption分区的相同磁盘的单独分区上)。 对于有人进入AMI(运行或其他)是不安全的,但是如果它正在运行,那么他们已经得到了磁盘数据,如果没有运行,那么AWS有问题要回答,至less数据和密钥是不可信的。彼此坐在一起。
如果您有真正的硬件平台,则可以使用安全密钥存储硬件模块来存储encryption密钥,但在这种情况下,您可能只能使用手动方法。 我可以设想一些Rube Goldberg的devise,包括引导实例与远程系统的连接,这些远程系统确实持有密钥,实际上是说“我准备好开始了,请装入我的卷”,但是脆弱和一般的丑陋解决scheme使我的皮肤爬行。