目前通过 Ansible 管理超过 90 台服务器,由 3 名开发人员负责。一切运行良好,但是目前存在一个巨大的安全问题。每个开发人员都使用自己的本地 ssh 密钥直接访问服务器。每个开发人员都使用一台笔记本电脑,而每台笔记本电脑都可能受到攻击,从而使整个生产服务器网络面临攻击风险。
我正在寻找一种解决方案来集中管理访问,从而阻止任何给定密钥的访问。与将密钥添加到 bitbucket 或 github 的方式没有什么不同。
我首先想到的解决方案是,从一台机器(网关)到所需的生产服务器建立一条隧道……通过网关时,请求将获取一个新密钥并用于访问生产服务器。结果是,我们只需拒绝访问网关,就可以在几秒钟内快速有效地终止任何 devop 的访问。
这是好的逻辑吗?有没有人已经找到解决这个问题的方法?
答案1
这太复杂了(检查密钥是否有权访问特定的生产服务器)。使用网关服务器作为接受每个有效密钥的跳转主机(但可以轻松删除特定密钥的访问权限,从而依次删除对所有服务器的访问权限),然后仅将允许的密钥添加到每个相应的服务器。之后,确保您只能通过跳转主机访问每个服务器的 SSH 端口。
这是标准方法。
答案2
除非这是一个开发/测试环境,否则工程师不应该直接从笔记本电脑运行 ansible。
相反,使用一个从 git 中提取运行手册的中央服务器。这允许进行额外的控制(四只眼睛、代码审查)。
将其与堡垒或跳跃主机相结合以进一步限制访问。
答案3
Netflix 实施了您的设置并发布了一些免费软件来帮助解决这种情况。
观看此视频https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access或观看此演示文稿https://speakerdeck.com/rlewis/how-netflix-gives-all-its-engineers-ssh-access-to-instances-running-in-production核心观点:
我们将回顾我们的 SSH 堡垒架构,其核心是使用 SSO 对工程师进行身份验证,然后为每个用户颁发带有短期证书的凭证,以便对堡垒进行 SSH 身份验证。这些短期凭证降低了丢失的风险。我们将介绍这种方法如何让我们在事后进行审计和自动警报,而不是在授予访问权限之前减慢工程师的速度。
他们的软件可以在这里获得:https://github.com/Netflix/bless
即使你没有实施他们的整个解决方案,也可以获得一些有趣的收获:
- 他们使用 SSH 证书而不仅仅是密钥;你可以在证书中放入更多的元数据,从而根据要求实现很多约束,同时也允许更简单的审计
- 使用非常短的期限(如 5 分钟)证书有效期(即使证书过期,SSH 会话仍保持打开状态)
- 使用 2FA 也使脚本编写变得困难,并迫使开发人员寻找其他解决方案
- 特定子模块位于其基础设施之外,并通过其运行所在的云提供的安全机制得到妥善保护,可动态生成证书,以便每个开发人员都可以访问任何主机
答案4
OneIdentity(前 Balabit)SPS正是您在这种情况下所需要的。借助此设备,您可以管理几乎任何机器上的用户身份、跟踪用户行为、监控和警报,以及索引用户所做的一切以供日后审查。