LabHub
배우기 러닝패스 코스

Ansible実戦

シークレットを暗号化してリポジトリに入れる

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") 세 키를 담습니다.

참고

비밀번호 파일 만들고 잠그기

/root/ans/vault/.vault_pass 를 8바이트 이상으로 만들고 권한을 600 으로 두세요. /root/ans/vault/.gitignore.vault_pass 를 넣으세요.

8자 이상으로 만들고 권한을 600 으로 두세요. 그리고 이 파일은 절대 커밋되면 안 됩니다.

변수 파일 통째로 암호화하기

/opt/lab/fixtures/ansible/vault-secrets.plain.yml/root/ans/vault/vars/secrets.yml 로 복사해 암호화하세요. 첫 줄이 볼트 헤더여야 하고 평문 비밀번호가 보이면 안 됩니다.

픽스처의 평문 파일을 복사한 뒤 encrypt 합니다. 첫 줄이 볼트 헤더로 바뀌어야 합니다.

값 하나만 인라인으로 암호화하기

/root/ans/vault/vars/inline.yml 을 만들어 registry_token 키의 값만 암호화해 넣으세요. 값은 ghp_ 로 시작하는 아무 문자열이면 됩니다. 파일 자체는 평문이어야 합니다.

encrypt_string 의 출력을 YAML 파일에 붙여 넣습니다. 파일 자체는 평문이고 값만 암호문입니다.

플레이북에서 복호화된 값 쓰기

/root/ans/vault/site.yml 에서 암호화 변수를 읽어 /root/ans/vault/artifacts/app.env 를 만드세요. 내용에 DB_PASSWORD=labhub-Pr0d-2026 이 있고 권한은 600 입니다.

vars_files 로 암호화 파일을 읽고 --vault-password-file 로 실행합니다. 결과 파일 권한은 600 입니다.

로그에 시크릿이 남지 않게 하기

시크릿을 다루는 태스크에 no_log 를 붙이고, 실행 로그를 /root/ans/vault/out/run.txt 로 저장하세요. 로그에 비밀번호가 남으면 안 됩니다.

시크릿을 다루는 태스크에 no_log 를 붙이고, 실행 로그에 값이 없는지 직접 확인하세요.

비밀번호 교체하기

/root/ans/vault/.vault_pass_new 를 만들고 secrets.yml 을 rekey 하세요. 새 비밀번호로는 열리고 옛 비밀번호로는 열리지 않아야 합니다.

rekey 후에는 옛 비밀번호로 열리면 안 됩니다. 새 비밀번호 파일을 따로 만드세요.

vault-id 라벨로 키 구분하기

/root/ans/vault/.vault_pass_prod 를 만들고 /root/ans/vault/vars/prod.ymlprod 라벨의 vault-id 로 암호화하세요. 헤더가 $ANSIBLE_VAULT;1.2;AES256;prod 여야 합니다.

--vault-id 라벨@파일 형태입니다. 라벨을 쓰면 헤더의 버전이 1.2 가 되고 라벨이 박힙니다.

저장소 시크릿 감사 보고서 만들기

/root/ans/vault/out/audit.json 을 만드세요. encrypted_files(암호화된 파일 경로 3개 이상), plaintext_leaks(0개), verdict("clean") 세 키를 담습니다.

암호화된 파일 목록과 평문 유출 목록을 JSON 으로 정리합니다. 유출이 0 이어야 합니다.