我正在设置一个标准的 AWS VPC 结构:一个公共子网、一些私有子网、每个子网上的主机、ELB 等。操作网络访问将通过 ssh 堡垒主机或 openvpn 实例进行。
一旦进入网络(堡垒或 openvpn),管理员就可以使用 ssh 访问各个实例。
据我所知,所有文档似乎都依赖于具有 sudo 权限和单个公共 ssh 密钥的单个用户。但这真的是最佳做法吗?让每个用户以自己的名称访问每个主机不是更好吗?
因此我可以向每个服务器部署账户和 ssh 公钥,但这很快就变得难以管理。
人们建议如何管理用户帐户?我查看过:
- IAM:IAM 似乎没有自动将账户和 ssh 密钥分发给 VPC 实例的方法。
- 通过 LDAP 进行 IAM:IAM 没有 LDAP API
- LDAP:设置我自己的 LDAP 服务器(当然是冗余的)。管理起来有点麻烦,但还是比在每个主机上都管理要好,尤其是当我们发展壮大的时候。
- 共享 ssh 密钥:依靠 VPN/堡垒来跟踪用户活动。我不喜欢它,但是...
人们推荐什么?
注意:我将此帖从 StackOverflow 中意外发布的内容中移出。
答案1
IAM 仅用于访问创建/修改/销毁 AWS 资源。它与授予对服务器的 SSH 访问权限无关。如果您的用户做需要访问 AWS API,那么是的,绝对要给他们 IAM 用户。
关于创建用户、部署密钥等,只需使用配置管理系统即可。我为此使用 Ansible,这很容易。我可以将我的用户、他们的密钥及其 sudo 权限部署到单个服务器,就像部署到 1000 台服务器一样容易。
无论您做什么,在任何情况下都不要允许使用共享帐户、共享密钥等。
答案2
Userify.com管理用户账户、SSH 密钥和 sudo 角色。
使用 AWS 的用户数据(在实例启动的高级选项卡下)进行部署非常容易,或者将其粘贴在自动扩展组的用户数据脚本中,或者在您手动启动实例时使用,这非常棒,因为它在您登录之前就可以工作。(或者您可以将单行代码粘贴到您的服务器控制台中,但这并不那么有趣......)
它还支持 Chef 和类似的东西,每个用户(开发人员/管理员/等)都有自己的 Web 登录名来更新密钥。这非常轻松。