Ansible 인벤토리와 host_vars 비밀 값 관리하기

목차

Ansible 관리 대상과 접속 정보를 인벤토리·host_vars로 나누는 방법입니다. 원노트의 호스트별 암호화 예제를 정리했습니다. Ansible과 대상 Python의 지원 버전은 설치 환경에 맞게 준비되어 있다고 가정합니다.

인벤토리의 호스트 이름

작업 디렉터리의 inventory.ini에 그룹과 호스트를 등록합니다. 별칭을 쓴 경우 host_vars 파일 이름도 그 별칭과 일치해야 합니다. 원본의 IP와 파일명 불일치를 수정했습니다.

TERMINAL / CONFIG
[linux]
server01 ansible_host=192.0.2.10
server02 ansible_host=192.0.2.20

호스트별 변수

같은 디렉터리 아래 host_vars/server01.yml을 작성합니다. SSH 키 인증이 가능하면 암호 변수를 불필요하게 추가하지 않습니다. 아래는 암호 인증이 필요한 경우의 구조만 보여줍니다.

TERMINAL / CONFIG
ansible_user: lieper
ansible_port: 21887
ansible_password: CHANGE_ME_PASSWORD
ansible_become_password: CHANGE_ME_SUDO_PASSWORD

평문 파일을 그대로 공유하거나 버전 관리하지 않습니다. 실제 새 값을 입력한 후 Ansible Vault로 암호화하고 파일 권한도 제한합니다. Vault 암호 자체를 같은 저장소에 보관하지 않습니다.

TERMINAL / CONFIG
ansible-vault encrypt host_vars/server01.yml
ansible-vault edit host_vars/server01.yml
ansible-vault view host_vars/server01.yml

대상과 통신 확인

실행 전 --list-hosts로 그룹 범위를 확인하고 첫 연결에서는 확인된 호스트 키 지문을 사용합니다. ping 모듈은 ICMP ping이 아니라 SSH 연결과 대상 Python 모듈 실행을 확인하는 검사입니다.

TERMINAL / CONFIG
ansible linux -i inventory.ini --list-hosts
ansible server01 -i inventory.ini -m ansible.builtin.ping --ask-vault-pass

Vault는 저장된 변수 파일을 암호화하는 기능입니다. 복호화한 변수나 debug 출력·작업 로그까지 자동으로 숨기는 것은 아니므로 민감한 task에는 no_log 등 출력 보호도 검토합니다. 실행 계정과 become 계정의 권한을 구분해 관리합니다.

소프트웨어 › 기타
기타 목록