题 许多服务器的SSH访问网关


通过Ansible管理多个服务器,目前超过90个,具有3个devop。一切都很好,但现在有一个巨大的安全问题。每个devop都使用自己的本地ssh密钥直接访问服务器。每个devop使用一台笔记本电脑,每台笔记本电脑都可能受到攻击,因此打开整个prod服务器网络直至受到攻击。

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

我不认为解决方案将是从一台机器,网关到所需的prod服务器的隧道......当通过网关时,请求将获取一个新密钥并用于访问产品服务器。结果是我们可以通过拒绝访问网关,在几秒钟内快速有效地终止任何devop的访问。

enter image description here

这是好逻辑吗?有没有人看过那里的解决方案已经阻止了这个问题?


11
2018-03-18 11:29




是时候搬到AWX / Tower了。 - Michael Hampton♦
我最近一直在试用Kryptonite用于SSH密钥管理和2FA,它对我来说一直很好用。他们的专业/企业包似乎提供了更多的控制和审核登录.. - Alex
答案是freeIPA - Jacob Evans


答案:


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

这是标准方法。


21
2018-03-18 11:36



更好的是:做@Sven说的话,但也要在跳跃主机上添加2FA。因为您只需要手动直接从笔记本电脑连接,对吧?自动化的任何东西都是从跳转主机内的服务器运行的? - Adam
如果您具有本地证书颁发机构(从属或隔离),则可以将这些证书与SSH一起使用,从而允许您集中使证实的受损证书无效。 - Randall


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

相反,有一个中央服务器从git中提取Runbook。这允许额外的控制(四只眼睛,代码审查)。

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


11
2018-03-18 14:37



实际上,这是AWX(或其商业版Tower)解决的问题。 - Michael Hampton♦


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也会使脚本变得困难并迫使开发人员找到其他解决方案
  • 一个特定的子模块,在其基础结构之外,并通过其运行的云提供的安全机制进行适当保护,处理动态生成证书,以便每个开发人员可以访问任何主机

0
2018-04-07 02:01





我的建议完全不允许用户机器进行ssh访问, 代替,

  1. 在Git主持剧本。
  2. 将“访问服务器”转到Jenkins服务器。
  3. Grant只需要Jenkins访问devops-users。
  4. 通过HTTP执行ansible在jenkins上构建作业。
  5. 作为额外的安全措施,如果需要,请禁用jenkins cli。

样本执行模型,

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

要么

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

如果您受限于服务器资源,同样的jenkins服务器也可以托管git(scm-manager)。 (额外的安全威胁,如果其中一个开发者机器被感染,可能可以通过从互联网上切断jenkins服务器来缓解,并在本地重新安装ansible依赖项)


0
2018-04-13 12:37