[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 비밀번호를 입력하면 평문 내용을 볼 수 있습니다.