본문으로 건너뛰기

[ansible] ansible-vault 를 이용하여 암호화 하기

ansible-vault로 group_vars/all에 담긴 SSH 접속 계정과 비밀번호를 암호화하고 --ask-vault-pass로 Playbook을 실행하는 방법을 설명합니다.

요약

  • ansible-vault create로 group_vars/all을 만들면 SSH 계정과 비밀번호 같은 접속 정보를 암호화해 보관할 수 있습니다.
  • 암호화된 변수 파일을 사용하는 Playbook은 ansible-playbook -i inventory --ask-vault-pass apache.yml로 Vault 비밀번호를 입력해 실행합니다.
  • 암호화된 파일은 ansible-vault view로 내용을 볼 수 있고, cat으로 열면 $ANSIBLE_VAULT;1.1;AES256 형식의 암호문만 보입니다.

[ansible] ansible-vault 를 이용하여 암호화 하기


아래는 Ansible 을 이용하여 특정 node 에 httpd 를 설치하는 간단한 ansible 구문 입니다.

---
- hosts: node
  tasks:
    - name: install httpd
      yum:
        name=httpd
        state=present
    - name: Start web server
      service:
        name=httpd
        state=started

ansible 을 이용하여, node host 에 접근해서 httpd 설치 명령을 실행하기 위해서는 ansible 에서 사용될 User 정보 및 Password 정보, ssh 접근에 대한 정보 등을 사전에 ansible 시스템에 추가하거나 vars 혹은 inventory 에 설정을 해야됩니다.
하지만 위와 같이 vars 혹은 inventory 에 등록하는 것은 보안에 취약하므로, ansible-vault 를 이용해서 중요 정보를 암호화 할 수 있습니다.

ansible-playboot 문서 구문


ansible-playbook 문서 구성은 아래와 같습니다.

# tree
.
├── apache.yml     // Playbook
├── group_vars     // Playbook 전역 변수 Directory
│   └── all
└── inventory      // Host Inventory
   
1 directory, 3 files   

~/group_vars/all 암화화


~/group_vars/all 을 암호화 합니다.

# mkdir ~/group_vars
# ansible-vault create ~/group_vars/all
>> ansible-vault passwd 입력
// Start of File
---
ansible_connection: ssh
ansible_ssh_user: root
ansible_port: 22
ansible_ssh_pass: rootpasswd
// End of File

Playbook 실행


ansible-vault 로 암호화된 파일을 로드하면서 Playbook 을 시작하기 위해서는 아래와 명령 수행을 합니다.

# ansible-playbook -i inventory --ask-vault-pass  apache.yml
Vault password: <Password 입력>

위와 같이 ~/group_vars/all 전역 변수에 선언된 내용들을 이용해서, 해당 명령을 수행 할 수 있습니다.

ansible-vault 로 암호화 된 파일을 읽기 위해서는 아래와 같이 명령으로 해야됩니다.

# ansible-vault view ~/group_vars/all
ansible_connection: ssh
ansible_ssh_user: root
ansible_port: 22
ansible_ssh_pass: rootpasswd

// ansible-vault 미 사용일 경우
# cat ~/group_vars/all
$ANSIBLE_VAULT;1.1;AES256
37306166613966396265353335663565383733323336616335323232336632346637326239306364
3964373733376262623639373936373636613964656130340a336537613134663837663136346165
39626166623738613938326665386336653231643538383932653333663832633032303539313866
3437363637613334360a633730336264353764323536353637663338656239386432386434373162
66306162353562633734393731386233333261376461353362656666633337393931646432636263
37663866346233383165386430663265363932336362326132356666376138643338313565333033
39306135306638653434636332663662653265393464336335646366633135636261636630313961
30366231396562336338376137623461353066323264643836393065363432343833653531633263
3261

자주 묻는 질문

Ansible inventory에 비밀번호를 평문으로 넣지 않으려면 어떻게 하나요?

접속 정보를 group_vars/all 파일에 넣고 ansible-vault create ~/group_vars/all로 암호화합니다. vars나 inventory에 평문으로 넣는 것은 보안에 취약하기 때문입니다.

ansible-vault로 암호화한 변수 파일로 Playbook을 실행하려면 어떻게 하나요?

--ask-vault-pass 옵션을 붙여 실행합니다. ansible-playbook -i inventory --ask-vault-pass apache.yml을 실행하면 Vault 비밀번호를 묻고, 입력하면 암호화된 변수를 읽어 작업을 수행합니다.

ansible-vault로 암호화된 파일 내용은 어떻게 확인하나요?

ansible-vault view ~/group_vars/all을 실행하고 Vault 비밀번호를 입력하면 평문 내용을 볼 수 있습니다.