我们正在尝试制作一个安全的AMI,以便分发给我们的客户之一(运行Linux / CoreOS)。 一旦我们的客户部署我们的AMI,重要的是他们无法获得shell访问(例如,不能SSH进来)。
从表面上看,这似乎是一个非常简单的问题要解决:只要确保只有我们的钥匙在authorized_keys文件。 但是,当我们的客户部署我们的AMI时,他们被迫提供他们自己的密钥对,然后将相关的公钥插入到方框中的authorized_keys文件中,使他们能够进入SSH框。
我知道亚马逊通过在169.254.169.254上的HTTP将公钥访问(和用户元数据)到主机操作系统(参见: http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key- pairs.html )。 一些在Internet和CoreOS文件系统上进行的调查表明,/ usr / bin / coreos-metadata实际上访问这个IP,可能是用于密钥对的,但是我无法弄清楚究竟是在启动那个可执行文件还是如何禁用它。 我甚至想过删除可执行权限或完全删除它,但文件系统的这一部分在CoreOS上是只读的(甚至是根目录)。
上述行为显然胜过了我们所采取的任何安全措施。 有什么我们可以做,以防止这种情况发生?
cloud-init正在这样做。 禁用运行(部分AMI版本)的sshd ,然后让脚本代码运行,将您的密钥置于login用户下(build议使用不同的密码),启动ssh 。 我还build议一个不同的端口号码作为一个简单的方法来确认你的东西正常工作。