LabHub

Ansible 실전 · 시크릿(ansible-vault) · 실습

시크릿을 암호화해 저장소에 넣기

LabHub 에서 이어서 보기

목표

시크릿을 저장소 안에 두되 평문으로 두지 않고, 실행 시점에만 복호화해 쓰는 흐름을 손에 익힙니다.

왜 중요한가

시크릿 관리의 기준은 "암호화되는가"가 아니라 "노출 경로가 몇 개인가, 폐기와 교체가 몇 분 걸리는가" 입니다. 시크릿이 코드와 같은 저장소에 있으면 개수를 셀 수 있고 리뷰를 거치므로 그 두 질문에 답할 수 있게 됩니다. 반대로 .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.ymlprod 라벨의 vault-id 로 암호화하세요. 헤더가 $ANSIBLE_VAULT;1.2;AES256;prod 여야 합니다.
8. /root/ans/vault/out/audit.json 을 만드세요. encrypted_files(암호화된 파일 경로 3개 이상), plaintext_leaks(0개), verdict("clean") 세 키를 담습니다.

참고

단계 8개

  1. 비밀번호 파일 만들고 잠그기
  2. 변수 파일 통째로 암호화하기
  3. 값 하나만 인라인으로 암호화하기
  4. 플레이북에서 복호화된 값 쓰기
  5. 로그에 시크릿이 남지 않게 하기
  6. 비밀번호 교체하기
  7. vault-id 라벨로 키 구분하기
  8. 저장소 시크릿 감사 보고서 만들기