아이디어는 모든 민감한 데이터를 두는 것입니다 ...]
이 문장에서 "모두"의 의미는 계획 한 솔루션을 구현하기 전에 매우 신중하게 분석해야합니다.
Ansible Vault는 매우 유용한 도구이지만 다음과 같은 비밀을 저장하는 데만 사용해야합니다.
- 사용 가능한 배포에 특히 필요
- 자신을 알지 못하는 소유자에게는 쉽게 쓸모가 없었지만 불법적으로 "기억"할 수있는 소유자 (일반적으로 오프 보드 직원)
두 번째 요점이 중요합니다.
많은 사람들과 잠재적으로 전체 DevOps 팀이 보안 저장소 암호 및 모든 비밀에 액세스 할 수 있습니다.
따라서 볼트에 저장된 모든 비밀의 경우, 권한이없는 사람이나 기계 가 원하는 경우이를 사용할 수없는 조건이 유지 되어야합니다.
구체적으로, 데이터베이스와 해당 사용자를 배포하기 위해 ansible을 사용하는 경우 볼트에 암호를 저장할 수 있지만 인터넷에서 해당 서비스를 사용할 수있는 경우 매우 신중해야하며 다른 솔루션을 고려해야합니다. VPN 인증이 필요하지 않습니다!
비밀에 노출 된 사용자 (DevOps)는 하나의 보안 장벽이 적용되는 경우 (예 : VPN 액세스 취소) "기억 된"암호를 사용할 수 없어야합니다. 또한 비밀번호를 변경하기 전에 소스 코드 저장소 (볼트가 저장된 위치)에 대한 액세스 권한도 취소해야합니다.
이러한 조건에서 ansible vault는 매우 유용한 도구입니다.
볼트의 인터넷에있는 사람이나 시스템이 사용할 수있는 비밀을 저장하려고하면 실수가됩니다 (예 : 사용자의 VPN 자격 증명).
볼트 암호를 저장하는 가장 안전한 방법 인 다른 옵션이 있습니까?
이전 단락의 조건 하에서 나는 좋은 습관이 될 것이라고 생각합니다.
- 볼트 비밀번호를 외부 보안 볼트 ( HashiCorp의 Vault 또는 자격 증명 관리를위한 SaaS 등)에 저장합니다.
- 외부 저장소 항목에 DevOps (테스트 용 비밀번호 필요) 및 CI / CD 시스템 또는 사용 가능한 컨트롤러에 대한 액세스 허용
비밀을 사용 하는 협약을 지키십시오 ! 비밀 변경 사항을 검토 할 수 없으며 비밀 파일에서 변수를 잡을 수 없습니다! 처음부터 철저해야합니다. 좋은 규칙은 secret_
접두사로 ansible vault에 저장된 모든 변수의 이름을 지정하는 것 입니다. 다음과 같은 것을 보게 될 때 :
postgres.yml :
postgres_password: "{{ secret_postgres_password }}"
값이 Ansible Vault에 저장되어 있음을 알 수 있습니다.