변수와 팩트 사용하기 - 패스워드 보관 Ansible Vault

728x90
반응형

출처 : 앤서블로 시작하는 인프라 자동화

 

 

패스워드를 안전하게 보관할 수 있는 Ansible Vault

  • 앤서블을 사용할 때 패스워드나 API 키 등 중요한 데이터에 대한 액세스 권한이 필요할 수 있다.
  • 이런 정보들은 인벤토리 변수나 일반 앤서블 플레이북에 텍스트로 저장된다.
  • 앤서블 파일에 접근 권한이 있는 사용자는 파일 내용을 볼 수 있게된다. 그래서 외부로 유출될 수 있다.
  • 앤서블은 사용되는 모든 데이터 파일을 암호화하고 복호화할 수 있는 Ansible Vault 기능을 제공한다.
  • Vault는 시스템의 패스워드와 같이 민감한 정보를 플레이북 내에 함께 사용할 경우 해당 정보를 보호하기 위해 사용할 수 있다.

 

암호화된 파일 만들기

  • Vault는 ansible-vault 명령어를 사용해 파일을 생성하고 암호화하여 사용할 수 있고, 암호화된 파일을 복호화하고 확인할 수 있다.

 

ssh root@192.168.56.1 -p 1022

cd my-ansible
ansible-vault create mysecret.yml
패스워드 2번 입력

 

SSH을 통해 ansible-server에 접근한 다음 프로젝트 디렉토리로 이동한다.

ansible-vault create 명령어를 통해 플레이북을 생성하고 해당 플레이북 파일에서 사용할 패스워드와 확인용 패스워드를 입력한다.

 

user: ansible
password: Password!

 

ansible-vault create 명령어를 통해 파일을 생성하면 vi 에디터로 생성한 플레이북 파일을 편집할 수 있도록 전환된다.

위 내용을 입력하고 저장한다.

 

ll mysecret.yml

 

생성된 파일의 접근 권한을 살펴보면 생성자만 읽고 쓸 수 있음을 확인할 수 있다.

 

cat mysecret.yml

 

cat 명령어로 파일 내용을 출력해보면 암호화되어 어떤 내용인지 알 수 없다.

 

ansible-vault view mysecret.yml
패스워드 입력

 

ansible-vault view 명령어를 사용하고 파일을 생성할 때 사용했던 패스워드를 입력하면 위 그림과 같이 원래 파일 내용을 확인할 수 있다.

 

 

파일을 이용한 암호화 파일 만들기

  • 암호화된 파일을 만들 때는 ansible-vault create 명령어와 함께 패스워드를 입력해야 한다.
  • vault 용으로 입력한 패스워드를 별도의 파일에 저장하면 해당 파일을 이용하여 패스워드 입력 없이 암호화 파일을 만들 수 있다.
  • 운영 환경에서 암호화 파일을 서버에 두는 것은 권장하지 않는다.

 

 

 

vi vault-pass

Password!

 

vi 에디터를 통해 vault-pass 라는 파일을 생성한다. 그리고 해당 파일에서 사용할 패스워드를 입력한다.

 

ansible-vault create --vault-pass-file ./vault-pass mysecret1.yml

user: ansible
password: Password!

 

ansible-vault create 명령어와 --vault-pass-file 옵션을 사용해 앞에서 생성한 파일의 경로를 입력하고, 생성하고자 하는 파일명을 입력한다.

mysecret1.yml 파일에는 위 내용을 입력한다.

 

ll mysecret1.yml

 

파일의 접근 권한을 확인해보면 파일 소유자만 읽기, 쓰기가 가능한 것을 확인할 수 있다.

 

cat mysecret1.yml

ansible-vault view --vault-pass-file ./vault-pass mysecret1.yml

 

cat 명령어를 통해 출력하면 암호화된 내용이 출력된다.

하지만 ansible-vault view 명령어를 사용하면 원래 파일 내용이 출력된다.

 

 

기존 파일 암호화

  • ansible-vault encrypt 명령어를 통해 기존에 만들어놓은 파일을 암호화하고 복호화할 수 있다.

 

ansible-vault encrypt create-user.yml
패스워드 2번 입력

 

ansible-vault encrypt 명령어로 기존에 생성했던 create-user.yml 파일을 암호화한다.

 

ll create-user.yml

 

파일 권한을 확인하면 소유자만 읽기, 쓰기가 가능하다.

 

ansible-vault decrypt create-user.yml --output=create-user-decypted.yml
패스워드 입력
ll create-user*

 

ansible-vault decrypt 명령어를 이용하면 암호화된 파일을 복호화할 수 있다.

--output 옵션과 함께 복호화할 파일명을 입력하면 암호화된 create-user.yml이 create-user-decrypted.yml 파일로 복호화된다.

 

암호화, 복호화된 파일은 파일 소유자만 읽고 쓸 수 있다.

 

cat create-user.yml
cat create-user-decypted.yml

 

기존의 암호화된 create-user.yml 파일을 cat 명령어로 출력하면 암호화된 채로 출력되지만, create-user-decypted.yml 파일은 정상적으로 출력된다.

만약 복호화할 때 --output 옵션 없이 그냥 복호화하면 create-user.yml 파일을 cat 명령어로 정상적으로 출력할 수 있다.

 

 

암호화된 파일의 패스워드 변경

  • ansible-vault로 암호화된 파일의 패스워드를 변경할 수 있다.

 

ansible-vault rekey mysecret.yml
기존 패스워드 입력
새로운 패스워드 입력 2번

 

ansible-vault rekey 명령어로 패스워드를 변경할 수 있다.

 

vi vault-pass
ansible-vault rekey --new-vault-password-file=./vault-pass mysecret.yml

 

패스워드를 입력해놓은 파일을 이용해 패스워드를 변경할 수 있다. 변경할 패스워드를 입력한 파일을 생성 후 ansible-vault rekey 명령어와 --new-vault-password-file 옵션을 사용하여 사전에 생성한 패스워드 파일 경로를 입력하고 vault 패스워드를 변경하고자 하는 파일명을 입력한다. 그리고 기존에 vault 패스워드만 입력하면 vault-pass 에 입력한 패스워드로 변경된다.

 

 

암호화된 플레이북 실행

  • 암호화된 플레이북을 실행하는 방법을 알아본다.

 

mv ./mysecret.yml vars/
ansible-vault view vars/mysecret.yml
패스워드 입력

 

먼저 암호화된 파일을 살펴본다. mysecret.yml 파일을 vars 디렉토리로 옮긴다. 그리고 ansible-vault view 명령어로 파일 내용을 확인한다. 파일에는 user와 password에 대한 변수와 값이 설정되어 있다.

 

vi create-user.yml

---


- hosts: db
  vars_files:
    - vars/mysecret.yml

  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present

 

vi 에디터로 create-user.yml 파일을 열고 다음과 같이 hosts에 vars_files 내용을 추가한다.

 

ansible-playbook create-user.yml

 

ansible-playbook 명령어를 사용하면 mysecret.yml 파일은 암호화되어 있기 때문에 에러 메시지만 출력되고 실행이 되지 않는다.

 

ansible-playbook --vault-id @prompt create-user.yml

 

암호화된 파일이 포함된 플레이북을 실행할 때는 ansible-playbook 명령어에 --vault-id @prompt 옵션을 함께 사용해야 한다. 패스워드를 입력하면 플레이북이 실행된다.

 

ansible-playbook --vault-password-file=./vault-pass create-user.yml

 

플레이북을 실행할 때마다 vault 패스워드를 입력하려면 번거롭다.

--vault-password-file 옵션과 함께 vault 패스워드를 입력한 파일을 이용하면 별도의 패스워드 입력 없이 플레이북을 실행할 수 있다.

 

 

 

728x90
반응형