자격 증명 모음 암호를 넣을 위치


24

우리는 git에서 암호 또는 키가 누출되는 것을 방지하기 위해 프로젝트에서 ansible vault를 사용할 계획입니다.

중요한 모든 데이터를 일반 파일에 저장하고 암호를 사용하여 git로 푸시하기 전에 암호를 사용 하여이 파일을 암호화하는 것이 좋습니다.

파일의 암호를 해독하려면 볼트 암호를 알맞게 전달해야합니다. 3 가지 가능성이 있습니다.

  • 서버 환경 변수에 저장
  • ansible-playbook 명령에 옵션으로 전달
  • 버전이 지정되지 않은 파일로 저장하십시오.

안전한 볼트 암호를 저장하는 가장 안전하고 안전한 방법 인 다른 옵션이 있습니까? 가능한 모범 사례 문서는 이에 대해 아무 말도하지 않습니다.



여기에 좋은 답변이 있습니다 : devops.stackexchange.com/questions/3806/…
Vish

답변:


12

아이디어는 모든 민감한 데이터를 두는 것입니다 ...]

이 문장에서 "모두"의 의미는 계획 한 솔루션을 구현하기 전에 매우 신중하게 분석해야합니다.

Ansible Vault는 매우 유용한 도구이지만 다음과 같은 비밀을 저장하는 데만 사용해야합니다.

  1. 사용 가능한 배포에 특히 필요
  2. 자신을 알지 못하는 소유자에게는 쉽게 쓸모가 없었지만 불법적으로 "기억"할 수있는 소유자 (일반적으로 오프 보드 직원)

두 번째 요점이 중요합니다.

많은 사람들과 잠재적으로 전체 DevOps 팀이 보안 저장소 암호 및 모든 비밀에 액세스 할 수 있습니다.

따라서 볼트에 저장된 모든 비밀의 경우, 권한이없는 사람이나 기계 가 원하는 경우이를 사용할 수없는 조건이 유지 되어야합니다.

구체적으로, 데이터베이스와 해당 사용자를 배포하기 위해 ansible을 사용하는 경우 볼트에 암호를 저장할 수 있지만 인터넷에서 해당 서비스를 사용할 수있는 경우 매우 신중해야하며 다른 솔루션을 고려해야합니다. VPN 인증이 필요하지 않습니다!

비밀에 노출 된 사용자 (DevOps)는 하나의 보안 장벽이 적용되는 경우 (예 : VPN 액세스 취소) "기억 된"암호를 사용할 수 없어야합니다. 또한 비밀번호를 변경하기 전에 소스 코드 저장소 (볼트가 저장된 위치)에 대한 액세스 권한도 취소해야합니다.

이러한 조건에서 ansible vault는 매우 유용한 도구입니다.

볼트의 인터넷에있는 사람이나 시스템이 사용할 수있는 비밀을 저장하려고하면 실수가됩니다 (예 : 사용자의 VPN 자격 증명).

볼트 암호를 저장하는 가장 안전한 방법 인 다른 옵션이 있습니까?

이전 단락의 조건 하에서 나는 좋은 습관이 될 것이라고 생각합니다.

  1. 볼트 비밀번호를 외부 보안 볼트 ( HashiCorp의 Vault 또는 자격 증명 관리를위한 SaaS 등)에 저장합니다.
  2. 외부 저장소 항목에 DevOps (테스트 용 비밀번호 필요) 및 CI / CD 시스템 또는 사용 가능한 컨트롤러에 대한 액세스 허용
  3. 비밀을 사용 하는 협약을 지키십시오 ! 비밀 변경 사항을 검토 할 수 없으며 비밀 파일에서 변수를 잡을 수 없습니다! 처음부터 철저해야합니다. 좋은 규칙은 secret_접두사로 ansible vault에 저장된 모든 변수의 이름을 지정하는 것 입니다. 다음과 같은 것을 보게 될 때 :

    postgres.yml :

    postgres_password: "{{ secret_postgres_password }}"
    

    값이 Ansible Vault에 저장되어 있음을 알 수 있습니다.


Ansible Vault 암호를보다 안전한 곳에 저장하는 것이 좋습니다 (HashiCorp Vault 또는 SaaS 볼트 (예 : AWS Secrets Manager)). 그러나 누군가가 팀을 떠나더라도 잠깐이라도 액세스 할 수 있기 때문에 여전히 회전 (변경)해야합니다. 별도의 볼트 (dev, test, production), 즉 YAML의 비밀 파일을 사용하여이를 완화 할 수 있습니다. Ansible 2.4 이상에서는 'vault
ID'-

Ansible 2.3 에는 전체 파일이 아닌 YAML 파일 의 값만 암호화 하는 기능이 도입되었습니다 .이 답변의 끝 부분 3에서 언급 한 이전 규칙보다 유지 관리가 더 간단합니다.
RichVel

6

우리는 git에서 암호 또는 키가 누출되는 것을 방지하기 위해 프로젝트에서 ansible vault를 사용할 계획입니다.

아직 아무것도 구현하지 않았으므로 이것을 다시 고려할 수 있습니다. Ansible Vault와 같은 시스템을 사용하면 여러 가지 보안 단점이 있습니다.

  • 액세스 한 사람에 대한 감사 내역이 없습니다.
  • 직원이 떠날 때 비밀 상점을 가져 가기가 쉽습니다.
  • 직원이 퇴근 할 때 액세스 권한을 제거한다는 것은 암호를 변경하고 다른 사람에게 다시 배포하는 것을 의미합니다.
  • 손상된 Vault 암호는 버전 관리에 저장된 이전 버전의 볼트에서 영원히 사용할 수 있습니다.
  • 비밀은 정체되어야한다

이러한 단점이없는 훨씬 더 안전하지만 잠재적으로 훨씬 안전한 시스템은 Hashicorp Vault를 사용하여 비밀을 저장하는 것입니다. https://github.com/jhaals/ansible-vault 를 사용하면 Ansible Vault에서와 같이 쉽게 값을 가져올 수 있습니다 .

그런 다음 Hashicorp Vault에 대한 인증을 관리해야합니다 . 이것이 거북이 질문 입니다. 인간에게는 최선의 해결책은 암호를 주기적으로 프롬프트하고 짧은 시간 후에 토큰을 만료시키는 것입니다. 머신의 경우 AWS 인증 백엔드 또는 이와 유사한 것을 사용 합니다 . 어딘가에서 인증의 필요성을 완전히 제거 할 수는 없지만 공격자가이를 액세스하기 어렵게 만들 수 있습니다.

이제 비밀 서버를 설정하고 관리하는 것이 너무 많은 경우 Ansible Vault를 사용할 수 있습니다. 그래도 개별 머신에 암호를 저장해야하는 이유는 무엇입니까? 대화식으로 사용하기 위해 비밀번호를 묻는 메시지 만 표시하면 사용자가 선택한 비밀번호 관리자에 비밀번호를 저장할 수 있습니다. OS X의 iTerm에는 Keychain.app과 통합되는 암호 관리자가있어이를 쉽게 할 수 있습니다.


1
안전한 볼트를 사용하는 가장 좋은 방법은 사용하지 않는 것입니다 .. 지적 해 주셔서 감사합니다!
스톰

중소 규모 조직의 경우 AWS Secrets Manager와 같은 클라우드 기반 비밀 관리자를 살펴 보는 것이 좋습니다. 이는 HashiCorp Vault에 고 가용성 클러스터를 실행하는 것보다 훨씬 적은 작업이지만 Ansible을 통해 얻는 보안이 크게 향상되었습니다. 감사 및 세분화 된 액세스 제어를 포함한 Vault 물론 해당 서비스에 따라 끝나지 만 일부 앱 코딩 및 Ansible 작업으로 캡슐화 될 수 있습니다. 주요 이점은 DB 암호와 같이 일부 비밀은 전혀 Ansible에 의해 관리 될 필요가 없다는 것입니다. 앱이 비밀 관리자로부터 비밀을 얻도록하십시오.
RichVel

3

이것은 중요한 데이터를 다루는 데있어 어떤 내부 정책이 있는지에 관한 것입니다.

나는 이것에 대한 나의 접근 방식을 말하고 장단점으로 보는 것을 설명하고 싶습니다. 제어 시스템의 파일에 Ansible Vault 비밀번호를 유지하고이를 가리키는 환경 변수가 있습니다.

export ANSIBLE_VAULT_PASSWORD_FILE=/deep/dark/place

나는 내 워크 스테이션에서 (플레이 북을 테스트하고 개발해야하기 때문에) 일부 동료들도 가지고 있으며 물론 메인 Ansible 제어 시스템에도 있습니다.

장점 :

  • 공유 위치 / 리포지토리에 없습니다 (당신이 말한 것처럼 버전이 아닌 파일입니다)
  • 플레이를 실행하기 위해 Ansible Vault 비밀번호를 알 필요가 없습니다 (플레이 북을 쉽게 시작할 수있는 Jenkins와 같은 CI 도구가있는 상태)

단점 :

  • 암호를 쉽게 회전 할 수 없습니다
  • 플레이 북에서 작업하는 사람은 모두 자신의 워크 스테이션에 있어야합니다.

단점은 완화되지만, 일상적인 작업에서 채택한 정책과 규칙에 달려 있습니다.


1
Nice combinaison .. 관심이있을 수 있지만 다른 답변을 확인하십시오.
폭풍

0

이 프로젝트를 살펴보고 안전한 볼트 암호화 비밀번호를 관리하십시오 https://github.com/Smile-SA/ansible-vault-manager

플러그인을 사용하여 여러 키링 스토리지 플랫폼을 처리합니다 (현재 AWS SSM 만 구현 됨). 현재 Ansible 프로젝트와의 통합은 매우 쉽습니다 ...


일반적인 것을 추가하는 것보다 더 구체적으로 쉽게 만들면 도움이 될 것입니다. github 페이지의 README를 읽었지만 명확한 예를 포함하도록 답변을 변경할 수 있습니까? 시도하고 싶습니다.
030
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.