연재 시리즈

Ansible vault

악분 2024. 1. 14. 03:50
반응형

https://youtu.be/N2wzqgkUYD0

 

1. Ansible vault란?

ansible vault ansible실행에 필요한 민감정보를 암호화/복호화합니다. github같은 공개된 코드저장소에 ansible 민감정보를 관리할때 사용해야 합니다.

 

ansible vault 사용하면 아래그림 오른쪽처럼 민감정보가 암호화됩니다

 

그리고 ansible 실행할  암호화된 값을 복호화합니다. 복호화키는 암호화에 사용한 비밀번호와 동일합니다. 복호화 키는 --ask-vault-pass인자로 전달합니다.

ansible-playbook -i inventory playbook.yaml --ask-vault-pass {복호화 키}

 

2. 사용방법

처음 민감정보 파일을 생성하는 경우 ansible-vault create명령어를 사용합니다. 암호화에 사용한 키는 복호화할때 사용됩니다.

ansible-vault create {파일경로}

 

기존에 있는 파일 내용을 암호화하려면 ansible-vault encrypt명령어를 사용합니다. 암호화에 사용한 키는 복호화할때 사용됩니다.

ansible-vault encrypt {파일경로}

 

암호화된 값을 복호화해서 보려면 ansible-vault view명령어를 사용합니다. 암호화 할때 사용한 비밀번호를 알아야합니다. ansible-vault decrypt명령어로도 복호화할 수 있지만 권장하지 않습니다. 실수로 복호화된 값을 코드 저장소에 업로드할 수 있기 때문입니다.

ansible-vault view {파일경로}

 

암호화된 값을 수정하려면 ansible-vault edit명령어를 사용합니다. 암호화 할때 사용한 비밀번호를 알아야합니다.

ansible-vault edit {파일경로}

 

3. 예제

github링크: https://github.com/choisungwook/ansible_practice/tree/main/examples/playbook_ansible_vault

 

아래 playbook예제는 /tmp/password.txt파일 생성을 생성할 , password.txt파일 내용을 복호화한 값을 파일 내용으로 사용합니다.

- name: Create users
  hosts: localhost
  vars_files:
    - password.txt

  tasks:
    - name: Create password file
      ansible.builtin.lineinfile:
        path: /tmp/password.txt
        line: "password={{ password }}"
        create: true
        mode: '0600'

 

password.txt파일을 ansible-vault create파일로 생성합니다. 암호화/복호화 키는 1234 설정합니다. 그리고 파일 내용도 1234 설정합니다.

$ ansible-vault create password.txt

# 파일 내용
password: 1234

 

이제 playbook 실행해봅시다. playbook 실행할 --ask-vault-pass인자를 사용합니다. --ask-vault-pass 암호화를 풀기 위한 복호화키를 입력하게 합니다. 복호화키는 암호화할 사용한 1234입니다.

ansible-playbook  playbook.yaml --ask-vault-pass

 

playbook 실행한 /tmp/password.txt내용을 확인해보세요. ansible-vault 복호화한 값이 파일 내용에 있습니다

cat /tmp/password.txt

 

4. (중요) 쉘 스크립트에서 ansible-vault 사용 방법

쉘 스크립트에서 ansible-vault를 사용하려면 --ask-vault-pass는 적절하지 않습니다. --ask-vault-pass는 사용자가 복호화키를 입력하는 과정이 있기 때문입니다.

 

따라서, 스크립트에서 ansible-vault를 사용하려면 복호화키를 파일에 저장합니다.

 

하지만, 파일에 복호화키가 노출되므로 보안위험이 발생합니다. 따라서 복호화키 파일을 안전한 외부 저장소에 저장해야 합니다. 외부 저장소는 AWS Secret Manager, Hashicorp Vault 등이 있습니다. 그리고 ansible-vault 실행할 --vault-password-file인자에 외부 저장소의 복호화 키를 조회하는 스크립트 파일을 설정합니다.

 

5. AWS SecretManager와 Ansible vault연동 예제

github링크: https://github.com/choisungwook/ansible_practice/tree/main/examples/playbook_ansible_vault

 

AWS SecretManager 외부 저장소를 사용하는 예제를 실습해보겠습니다

 

AWS CLI SecretManager 생성하고 복호화키를 저장합니다.

aws secretsmanager create-secret --name ansible/password \
  --description "Secrets for ansible-vault descryption" \
  --secret-string file://vault-password.json

 

복호화 키는 vault-password.json파일에 있습니다.

{
  "ansible_vault_password": "1234"
}

 

AWS console에서 SecretManager값을 확인해보면 복호화키 1234 생성되었습니다.

 

AWS SecretManager 있는 복호화키 값을 가져오는 쉘스크립트파일을 생성합니다.

$ vi get-vault-password.sh

#!/bin/sh
aws secretsmanager get-secret-value --secret-id ansible/password | jq -r .SecretString | jq -r .ansible_vault_password

 

이전 예제에서 사용한 playbook 그대로 사용하겠습니다. playbook 실행할 생성한 쉘스크립트파일 경로를 설정합니다.

ansible-playbook  playbook.yaml --vault-password-file ./get-vault-password.sh
반응형

'연재 시리즈' 카테고리의 다른 글

Ansible playbook 변수  (0) 2024.01.20
Ansible playbook 실패 제어  (0) 2024.01.19
Ansible playbook  (0) 2024.01.14
Ansible 사용방법  (0) 2024.01.12
Ansible 소개  (1) 2024.01.09