안전한 암호 관리를 위한 Ansible Vault 사용
이전 단계에서는 Ansible 플레이북에 sudo 암호를 제공하는 다양한 방법을 살펴보았습니다. 그러나 일반 텍스트 파일에 암호를 저장하거나 명령줄에서 전달하는 것은 안전하지 않습니다. 이 단계에서는 sudo 암호와 같은 민감한 정보를 안전하게 관리하기 위해 Ansible Vault 를 사용하는 방법을 배우겠습니다.
Ansible Vault 란 무엇인가요?
Ansible Vault 는 암호, API 키 또는 인증서와 같은 민감한 데이터를 암호화할 수 있는 기능입니다. 암호화된 파일은 민감한 정보를 노출하지 않고 버전 관리 시스템에 안전하게 저장할 수 있습니다. Ansible 은 플레이북 실행 중에 이러한 파일을 자동으로 해독할 수 있습니다.
암호화된 Vault 파일 생성
sudo 암호를 저장하기 위해 암호화된 파일을 만들어 보겠습니다.
cd ~/project/ansible-sudo-lab
ansible-vault create vault.yml
새 Vault 암호를 만들라는 메시지가 표시됩니다. vaultpassword123을 입력하고 확인합니다.
Vault 암호를 설정한 후 편집기가 열립니다. 편집기에 다음 내용을 입력합니다.
---
vault_sudo_password: ansible123
파일을 저장하고 편집기를 종료합니다.
이제 Vault 파일의 내용을 보려고 하면 암호화되어 있음을 알 수 있습니다.
cat vault.yml
다음과 유사한 출력을 볼 수 있습니다.
$ANSIBLE_VAULT;1.1;AES256
32623438613466396238613731623338376461653866353031313632316237613561393639613131
3562626166616332386265373761653835356134613561380a363761333362323238663136633439
32343032333832313562353261333530666639643239303436643363393630643639316232303564
3962356162356361370a313038333432353162333462323035323262396233333039326535356662
31363539613432656362326565613232336535393232653939323466323131393362
플레이북에서 Vault 변수 사용
이제 암호화된 sudo 암호를 사용하는 플레이북을 만들어 보겠습니다. secure_sudo_playbook.yml이라는 새 파일을 만듭니다.
---
- name: Playbook with secure sudo password
hosts: localhost
become: true
become_password: "{{ vault_sudo_password }}"
vars_files:
- vault.yml
tasks:
- name: Get sudo user
command: whoami
register: sudo_user
- name: Print sudo user
debug:
msg: "Running as {{ sudo_user.stdout }}"
- name: Check sudo access
command: apt update
register: apt_result
failed_when: false
- name: Print result
debug:
msg: "Sudo access successful: {{ apt_result.rc == 0 }}"
이 파일을 ~/project/ansible-sudo-lab/secure_sudo_playbook.yml로 저장합니다.
Vault 를 사용하여 플레이북 실행
암호화된 Vault 파일을 포함하는 플레이북을 실행할 때는 Vault 암호를 제공해야 합니다. 이를 수행하는 방법에는 여러 가지가 있습니다.
--ask-vault-pass 옵션 사용:
ansible-playbook -i inventory secure_sudo_playbook.yml --ask-vault-pass
메시지가 표시되면 Vault 암호를 입력합니다: vaultpassword123
- Vault 암호 파일 사용:
먼저 Vault 암호를 포함하는 파일을 만듭니다.
echo "vaultpassword123" > vault_password_file
chmod 600 vault_password_file
그런 다음 암호 파일로 플레이북을 실행합니다.
ansible-playbook -i inventory secure_sudo_playbook.yml --vault-password-file vault_password_file
다음과 유사한 출력을 볼 수 있습니다.
PLAY [Playbook with secure sudo password] ***************************
TASK [Gathering Facts] **********************************************
ok: [localhost]
TASK [Get sudo user] ***********************************************
changed: [localhost]
TASK [Print sudo user] *********************************************
ok: [localhost] => {
"msg": "Running as root"
}
TASK [Check sudo access] *******************************************
changed: [localhost]
TASK [Print result] ************************************************
ok: [localhost] => {
"msg": "Sudo access successful: True"
}
PLAY RECAP *********************************************************
localhost : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Sudo 암호 관리를 위한 모범 사례
Ansible 에서 sudo 암호를 관리할 때 따라야 할 몇 가지 모범 사례는 다음과 같습니다.
- 항상 Ansible Vault 를 사용하여 민감한 정보를 암호화합니다.
- Vault 암호를 버전 관리에 절대 저장하지 마십시오.
- Vault 암호를 배포하는 안전한 방법 (예: 암호 관리자) 을 사용합니다.
- 서로 다른 환경 (개발, 스테이징, 프로덕션) 에 대해 Vault ID 를 사용하는 것을 고려합니다.
- Vault 암호를 정기적으로 순환합니다.
프로덕션 환경에서는 HashiCorp Vault 또는 AWS Secrets Manager 와 같은 도구를 사용하여 더욱 안전하게 비밀을 관리하는 것을 고려할 수도 있습니다.