许多服务器的SSH访问网关


12

通过Ansible管理3台设备,目前管理着90多台服务器。一切工作正常,但是现在存在一个巨大的安全问题。每个开发人员都使用自己的本地ssh密钥来直接访问服务器。每个开发人员都使用一台笔记本电脑,并且每台笔记本电脑都可能受到威胁,从而使整个产品服务器网络容易受到攻击。

我正在寻找一种集中管理访问权限的解决方案,从而阻止任何给定密钥的访问。与将密钥添加到bitbucket或github的方式没什么不同。

我想尽办法,假设解决方案是从一台机器(网关)到所需产品服务器的隧道...在通过网关的同时,请求将获取一个新密钥并用于获取对产品的访问权限服务器。结果是,只要拒绝访问网关,我们就可以在几秒钟内快速有效地杀死任何开发人员。

在此处输入图片说明

这是好的逻辑吗?有没有人看到解决这个问题的解决方案?


1
现在该转移到AWX / Tower了。
迈克尔·汉普顿

最近,我一直在尝试使用Kryptonite进行SSH密钥管理和2FA,它对我来说一直很好。他们的专业版/企业包似乎给登录的更多控制权,并审核..
亚历克斯

2
答案是免费的IPA
Jacob Evans

Answers:


22

太复杂了(检查密钥是否可以访问特定的产品服务器)。将网关服务器用作接受每个有效密钥的跳转主机(但可以轻松删除对特定密钥的访问,从而依次删除对所有服务器的访问),然后仅将允许的密钥添加到每个相应的服务器。之后,请确保仅可以通过跳转主机访问每个服务器的SSH端口。

这是标准方法。


2
更好的是:执行@Sven所说的,但还要在跳转主机上添加2FA。因为仅在需要手动操作时才直接从笔记本电脑连接,对吗?跳转主机内部的服务器正在运行自动化的工具吗?
亚当

1
如果您具有本地证书颁发机构(从属证书或隔离证书),则可以将这些证书与SSH一起使用,从而使集中的可信证书无效。
兰德尔

11

除非这是一个开发/测试环境,否则工程师不应直接从他们的笔记本电脑运行ansible。

相反,要有一个从git中提取运行手册的中央服务器。这允许其他控件(四只眼睛,检查代码)。

将其与堡垒或跳跃主机结合使用,以进一步限制访问。


1
确实,这是AWX(或其商业版Tower)解决的问题。
迈克尔·汉普顿

1

Netflix实施了您的设置并发布了一些免费软件来帮助您解决这种情况。

观看此视频https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access或此演示文稿,网址https://speakerdeck.com/rlewis/how-netflix-gives-它的所有工程师ssh都可以在生产中运行实例的核心点:

我们将回顾我们的SSH堡垒架构,其核心使用SSO来对工程师进行身份验证,然后为每个用户颁发带有短期证书的证书,以对该实例进行SSH堡垒认证。这些短暂的凭据降低了与它们丢失有关的风险。我们将介绍这种方法如何使我们能够在事实发生后进行审核并自动发出警报,而不是在授予访问权限之前降低工程师的速度。

他们的软件在这里可用:https : //github.com/Netflix/bless

即使您未实现其整体解决方案,也有一些有趣的建议:

  • 他们使用SSH证书而不是密钥。您可以在证书中放入更多的元数据,从而使每个需求受到很多限制,并且审核也变得更加简单
  • 使用非常短的时间(例如5分钟)证书有效期(即使证书过期,SSH会话仍保持打开状态)
  • 使用2FA还会使脚本编写变得困难,并迫使开发人员寻找其他解决方案
  • 一个特定的子模块,位于其基础架构之外,并通过其运行的云所提供的安全机制进行了适当的保护,可以动态生成证书,以便每个开发人员都可以访问任何主机

1

在这种情况下,OneIdentity(前Balbit)SPS正是您所需要的。使用此设备,您可以基本上在任何计算机上管理用户身份,跟踪用户行为,监视和警报并为用户所做的任何事情编制索引以供以后查看。


0

我的建议是禁止来自用户计算机的SSH访问。

相反,你应该

  1. 在Git中托管剧本。
  2. 将“访问服务器”转换为Jenkins服务器。
  3. 只授予需要詹金斯访问devops用户的权限。
  4. Execute Ansible通过HTTP在Jenkins上进行构建工作。
  5. 作为一项额外的安全措施,请根据需要禁用Jenkins CLI。

示例执行模型

  1. Jenkins Ansible插件:https ://wiki.jenkins.io/display/JENKINS/Ansible+Plugin

要么

  1. 经典shell-执行作业类型。手动添加构建步骤,包括git checkout。

如果服务器资源有限,则同一台Jenkins服务器也可以托管Git(scm-manager),尽管如果其中一台开发人员计算机被感染,还会带来额外的安全风险。您可以通过断开Jenkins服务器与互联网的连接来缓解此问题,并在本地解决Ansible依赖关系。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.