Ansible 실전 · 시크릿(ansible-vault) · 실습
시크릿을 암호화해 저장소에 넣기
목표
시크릿을 저장소 안에 두되 평문으로 두지 않고, 실행 시점에만 복호화해 쓰는 흐름을 손에 익힙니다.
왜 중요한가
시크릿 관리의 기준은 "암호화되는가"가 아니라 "노출 경로가 몇 개인가, 폐기와 교체가 몇 분 걸리는가" 입니다. 시크릿이 코드와 같은 저장소에 있으면 개수를 셀 수 있고 리뷰를 거치므로 그 두 질문에 답할 수 있게 됩니다. 반대로 .env 파일과 채팅과 위키에 흩어져 있으면 폐기 자체가 불가능해집니다. 실습에서 특히 신경 쓸 것은 두 가지입니다. 비밀번호 파일은 저장소 밖 또는 .gitignore 안에 두고 권한을 600 으로 하는 것, 그리고 시크릿을 다루는 태스크에 no_log 를 붙이는 것입니다. 애써 암호화하고 실행 로그에 평문으로 찍으면 아무 의미가 없습니다.
단계
1. /root/ans/vault/.vault_pass 를 8바이트 이상으로 만들고 권한을 600 으로 두세요. /root/ans/vault/.gitignore 에 .vault_pass 를 넣으세요.
2. /opt/lab/fixtures/ansible/vault-secrets.plain.yml 을 /root/ans/vault/vars/secrets.yml 로 복사해 암호화하세요. 첫 줄이 볼트 헤더여야 하고 평문 비밀번호가 보이면 안 됩니다.
3. /root/ans/vault/vars/inline.yml 을 만들어 registry_token 키의 값만 암호화해 넣으세요. 값은 ghp_ 로 시작하는 아무 문자열이면 됩니다. 파일 자체는 평문이어야 합니다.
4. /root/ans/vault/site.yml 에서 암호화 변수를 읽어 /root/ans/vault/artifacts/app.env 를 만드세요. 내용에 DB_PASSWORD=labhub-Pr0d-2026 이 있고 권한은 600 입니다.
5. 시크릿을 다루는 태스크에 no_log 를 붙이고, 실행 로그를 /root/ans/vault/out/run.txt 로 저장하세요. 로그에 비밀번호가 남으면 안 됩니다.
6. /root/ans/vault/.vault_pass_new 를 만들고 secrets.yml 을 rekey 하세요. 새 비밀번호로는 열리고 옛 비밀번호로는 열리지 않아야 합니다.
7. /root/ans/vault/.vault_pass_prod 를 만들고 /root/ans/vault/vars/prod.yml 을 prod 라벨의 vault-id 로 암호화하세요. 헤더가 $ANSIBLE_VAULT;1.2;AES256;prod 여야 합니다.
8. /root/ans/vault/out/audit.json 을 만드세요. encrypted_files(암호화된 파일 경로 3개 이상), plaintext_leaks(0개), verdict("clean") 세 키를 담습니다.
참고
- 실습 파드는 실습마다 새로 뜹니다.
/root/ans/inventory/hosts.ini가 없으면 첫 실습에서 만든 것과 같은 인벤토리(web1·web2·db1,ansible_host=127.0.0.1,ansible_port=2222,ansible_user=root,[prod:children]에 web·db)를 먼저 다시 만드세요. 구조는/opt/lab/fixtures/ansible/inventory.sample.ini를 참고하면 됩니다. - 실행할 때는
--vault-password-file /root/ans/vault/.vault_pass를 붙입니다. ansible-vault view 파일로 복호화 결과만 확인할 수 있습니다(파일은 그대로).- 흔한 실수 1: 비밀번호 파일 끝의 개행 때문에 열리지 않는 경우. 파일에는 비밀번호만 한 줄로 두세요.
- 흔한 실수 2:
no_log를 붙이지 않아debug출력이나 모듈 결과에 시크릿이 그대로 찍히는 것.
단계 8개
- 비밀번호 파일 만들고 잠그기
- 변수 파일 통째로 암호화하기
- 값 하나만 인라인으로 암호화하기
- 플레이북에서 복호화된 값 쓰기
- 로그에 시크릿이 남지 않게 하기
- 비밀번호 교체하기
- vault-id 라벨로 키 구분하기
- 저장소 시크릿 감사 보고서 만들기