通过 Ansible 管理多台服务器,目前超过 90 台,有 3 个 devops。一切都很好,但是现在存在一个巨大的安全问题。每个 devop 都使用自己的本地 ssh 密钥来直接访问服务器。每个 devop 都使用一台笔记本电脑,每台笔记本电脑都可能受到攻击,从而使整个 prod 服务器网络面临攻击。
我正在寻找一种解决方案来集中管理访问,从而阻止对任何给定密钥的访问。与将密钥添加到 bitbucket 或 github 的方式没有什么不同。
在我的脑海中,我会假设解决方案是从一台机器(网关)到所需的产品服务器的隧道......在传递网关时,请求将获取一个新密钥并用于访问产品服务器。结果是我们可以通过拒绝对网关的访问在几秒钟内快速有效地终止对任何 devop 的访问。
这是很好的逻辑吗?有没有人已经看到了解决这个问题的解决方案?
这太复杂了(检查密钥是否可以访问特定的产品服务器)。将网关服务器用作接受每个有效密钥的跳转主机(但可以轻松删除对特定密钥的访问,从而依次删除对所有服务器的访问),然后仅将允许的密钥添加到每个相应的服务器。之后,确保您只能通过跳转主机访问每个服务器的 SSH 端口。
这是标准方法。
工程师不应该直接从他们的笔记本电脑上运行 ansible,除非这是一个开发/测试环境。
相反,有一个从 git 中提取运行手册的中央服务器。这允许额外的控制(四只眼睛,代码审查)。
将此与堡垒或跳跃主机结合使用以进一步限制访问。
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的核心点:
他们的软件可在此处获得:https ://github.com/Netflix/bless
即使您没有实施他们的整个解决方案,也有一些有趣的收获:
查看开源 CLD 软件,它解决了这个问题:https ://github.com/classicdevops/cld
您的工程师将能够根据访问矩阵访问任何服务器,它还提供通过 IP 地址的 2FA 作为选项。
OneIdentity (ex-Balabit) SPS正是您在这种情况下需要的东西。使用此设备,您可以管理基本上任何机器上的用户身份、跟踪用户行为、监控和警报,并为用户所做的任何事情编制索引以供以后审查。
我的建议是禁止来自用户机器的 SSH 访问。
相反,你应该
示例执行模型,
或者
如果您的服务器资源有限,同样的 Jenkins 服务器也可以托管 Git(scm-manager),但如果其中一台开发人员机器被感染,则会存在额外的安全风险。您可以通过断开 Jenkins 服务器与 Internet 的连接来缓解这种情况,并在本地解决 Ansible 依赖项。