출처 : 앤서블로 시작하는 인프라 자동화
패스워드를 안전하게 보관할 수 있는 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 패스워드를 입력한 파일을 이용하면 별도의 패스워드 입력 없이 플레이북을 실행할 수 있다.
'Study > 앤서블(Ansible)' 카테고리의 다른 글
반복문과 조건문을 이용한 제어문 구현하기 - 반복문 (0) | 2024.03.20 |
---|---|
변수와 팩트 사용하기 - 자동 예약 변수 팩트 (0) | 2024.03.20 |
변수와 팩트 사용하기 - 변수의 종류와 사용법 (1) | 2024.03.12 |
앤서블 플레이북 작성 및 실습 (0) | 2024.03.10 |
앤서블 환경 설정 파일 이론 및 앤서블 접근을 위한 SSH 인증구성 (0) | 2024.03.09 |