많은 서버를위한 SSH 액세스 게이트웨이


12

현재 Ansible을 통해 3 개의 devops를 사용하여 90 개가 넘는 여러 서버를 관리합니다. 모두 잘 작동하지만 지금은 큰 보안 문제가 있습니다. 각 devop은 자체 로컬 ssh 키를 사용하여 서버에 직접 액세스합니다. 각 devop은 랩톱을 사용하며 각 랩톱은 잠재적으로 손상 될 수 있으므로 제품 서버의 전체 네트워크를 공격 할 수 있습니다.

액세스를 중앙에서 관리하여 주어진 키에 대한 액세스를 차단하는 솔루션을 찾고 있습니다. 비트 버킷 또는 github에 키를 추가하는 방법과 다르지 않습니다.

내 머리 꼭대기에서 나는 해결책이 하나의 기계, 게이트웨이에서 원하는 prod 서버로의 터널이라고 가정합니다 ... 게이트웨이를 통과하는 동안 요청은 새로운 키를 가져 와서 prod에 액세스하는 데 사용됩니다 섬기는 사람. 결과적으로 게이트웨이에 대한 액세스를 거부함으로써 몇 초 이내에 모든 devop에 대한 액세스를 빠르고 효율적으로 종료 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이것이 좋은 논리입니까? 아무도이 문제를 막기 위해 이미 해결책을 보았습니까?


1
이제 AWX / 타워로 이동할 차례입니다.
Michael Hampton

최근 SSH 키 관리 및 2FA를 위해 Kryptonite를 시험해 보았으며 꽤 잘 작동했습니다. 그들의 프로 / 엔터프라이즈 패키지는 더 많은 제어와 로그인 감사를 제공하는 것 같습니다.
Alex

2
대답은 freeIPA입니다.
Jacob Evans

답변:


22

너무 복잡합니다 (키가 특정 prod 서버에 액세스 할 수 있는지 확인). 게이트웨이 서버를 유효한 모든 키를 허용하는 점프 호스트로 사용하고 (모든 서버에 대한 액세스를 차례로 제거하는 특정 키에 대한 액세스를 쉽게 제거 할 수 있음) 각 서버에 허용 된 키만 추가하십시오. 그런 다음 점프 호스트를 통해서만 모든 서버의 SSH 포트에 도달 할 수 있는지 확인하십시오.

이것이 표준 접근법입니다.


2
더 나은 : @Sven의 말을 따르고 점프 호스트에서 2FA를 추가하십시오. 수동으로해야 할 때 랩톱에서 직접 연결하기 만하므로 그렇지 않습니까? 점프 호스트 내부의 서버에서 자동화 된 것이 있습니까?
Adam

1
로컬 인증 기관 (하위 또는 격리)이있는 경우 SSH와 함께 해당 인증서를 사용하여 신뢰할 수있는 손상된 인증서를 중앙에서 무효화 할 수 있습니다.
랜달

11

개발자 / 테스트 환경이 아닌 이상 엔지니어는 랩톱에서 직접 실행 가능하지 않아야합니다.

대신, git에서 runbook을 가져 오는 중앙 서버가 있어야합니다. 이를 통해 추가 제어 (네 눈, 코드 검토)가 가능합니다.

이것을 요새 또는 점프 호스트와 결합하여 액세스를 더 제한하십시오.


1
실제로 이것은 AWX (또는 상용 버전 Tower)가 해결하는 문제입니다.
Michael Hampton

1

Netflix는 설정을 구현하고 해당 상황에 도움이되는 일부 무료 소프트웨어를 출시했습니다.

이 비디오 https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access 또는 https://speakerdeck.com/rlewis/how-netflix-gives- 핵심 요점을 갖춘 모든 엔지니어 -ssh-access-to-instances 실행 중 :

SSO를 사용하여 엔지니어를 인증하는 SSH 배스 천 아키텍처를 검토 한 다음 인스턴스에 대한 배스 천의 SSH 인증을위한 짧은 수명의 인증서로 사용자 자격 증명을 발급합니다. 수명이 짧으면 자격 증명이 손실 될 위험이 줄어 듭니다. 이 접근 방식을 통해 엔지니어가 액세스 권한을 부여하기 전에 속도를 늦추지 않고 사실을 감사하고 자동으로 경고하는 방법을 설명합니다.

그들의 소프트웨어는 여기에 있습니다 : https://github.com/Netflix/bless

전체 솔루션을 구현하지 않더라도 흥미로운 점이 있습니다.

  • 키 대신 SSH 인증서를 사용합니다. 인증서에 훨씬 더 많은 메타 데이터를 넣을 수 있으므로 요구 사항마다 많은 제약 조건을 적용하고 더 간단한 감사를 수행 할 수 있습니다.
  • 매우 짧은 기간 (예 : 5 분)의 인증서 유효성 사용 (인증서가 만료 된 후에도 SSH 세션이 열려 있음)
  • 2FA를 사용하여 스크립팅을 어렵게 만들고 개발자가 다른 솔루션을 찾도록 강요
  • 인프라 외부에 있고 클라우드가 실행되는 클라우드에서 제공하는 보안 메커니즘을 통해 올바르게 보호되는 특정 하위 모듈은 각 개발자가 모든 호스트에 액세스 할 수 있도록 인증서 생성을 동적으로 처리합니다.

1

이 시나리오에서는 OneIdentity (ex-Balabit) SPS 가 필요합니다. 이 어플라이언스를 사용하면 기본적으로 모든 컴퓨터에서 사용자 ID를 관리하고, 사용자 동작을 추적하고, 사용자가 나중에 검토하기 위해 수행하는 모든 작업을 모니터링하고 경고 할 수 있습니다.


0

내 제안은 사용자 컴퓨터에서 SSH 액세스를 허용하지 않는 것입니다.

대신에

  1. Git의 호스트 플레이 북.
  2. "액세스 서버"를 Jenkins 서버로 바꾸십시오.
  3. 개발자에게 필요한 Jenkins 액세스 권한 만 부여하십시오.
  4. Execute Ansible은 HTTP를 통해 빌드 작업을 통해 Jenkins에서 재생합니다.
  5. 추가 보안 조치로 필요한 경우 Jenkins CLI를 비활성화하십시오.

샘플 실행 모델

  1. Jenkins Ansible 플러그인 : https://wiki.jenkins.io/display/JENKINS/Ansible+Plugin

또는

  1. 클래식 쉘-작업 유형. git checkout을 포함하여 빌드 단계를 수동으로 추가하십시오.

서버 리소스가 제한되어 있으면 동일한 Jenkins 서버가 Git (scm-manager)도 호스팅 할 수 있지만 개발자 시스템 중 하나가 감염되면 추가적인 보안 위험이 있습니다. 인터넷에서 Jenkins 서버의 연결을 끊어이를 완화하고 Ansible 종속성을 로컬로 해결할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.