Trong bài này, chúng ta sẽ cùng tìm hiểu Ansible Vault – một tính năng cực kỳ quan trọng giúp bảo vệ thông tin nhạy cảm trong dự án Ansible của bạn như mật khẩu, API key, token, v.v.
Xem thêm:
Ansible Role – Bài 10
Ansible Templates – Bài 9
1. Ansible Vault là gì?
Hiểu đơn giản, Vault là công cụ mã hóa (encrypt) và giải mã (decrypt) file YAML chứa thông tin nhạy cảm, giúp bạn:
- Tránh lưu mật khẩu ở dạng plain text
- Dễ dàng chia sẻ file cấu hình an toàn với đồng đội
- Tích hợp mượt mà với Playbook
Vault dùng chuẩn mã hóa AES, cực kỳ an toàn.
2. Khi nào nên dùng Vault?
| Tình huống | Giải pháp |
|---|---|
| Bạn cần lưu mật khẩu database | Dùng Vault để mã hóa file chứa db_password |
| Bạn chia sẻ repo Ansible lên GitHub | Dùng Vault để mã hóa file secrets.yml |
| Bạn muốn auto chạy playbook mà không để lộ password | Dùng file chứa mật khẩu thay vì nhập tay |
3. Các lệnh cơ bản với Vault
| Hành động | Lệnh |
|---|---|
| Tạo file mới được mã hóa | ansible-vault create secrets.yml |
| Mở file để sửa | ansible-vault edit secrets.yml |
| Xem nội dung | ansible-vault view secrets.yml |
| Mã hóa file có sẵn | ansible-vault encrypt config.yml |
| Giải mã file | ansible-vault decrypt secrets.yml |
| Đổi mật khẩu | ansible-vault rekey secrets.yml |
4. Tạo file chứa mật khẩu database
ansible-vault create secrets.yml
Sau đó, nhập mật khẩu → file sẽ mở trong editor:
db_password: "super_secure_password"
Lưu lại, nội dung file sẽ được mã hóa hoàn toàn.
5. Dùng Vault trong Playbook
Bước 1: Gọi biến từ file Vault như bình thường
- name: Hiển thị mật khẩu DB
hosts: localhost
vars_files:
- secrets.yml
tasks:
- debug:
msg: "Password là {{ db_password }}"
Bước 2: Chạy playbook kèm theo mật khẩu Vault
ansible-playbook vault.yml --ask-vault-pass
Hoặc bạn có thể dùng 1 file chứa sẵn mật khẩu:
ansible-playbook vault.yml --vault-password-file password.txt
Trong password.txt chỉ chứa 1 dòng là mật khẩu Vault.
6. Xem và sửa nội dung file đã mã hóa
Xem nhanh
ansible-vault view secrets.yml
Sửa nội dung
ansible-vault edit secrets.yml
File sẽ mở trong editor và bạn có thể chỉnh sửa như bình thường.
7. Ví dụ
7.1. Tạo file secrets và mã hóa
Tạo file secrets.yml:
ansible-vault create secrets.yml
Sau khi nhập mật khẩu vault, Ansible sẽ mở editor (vim/nano) để bạn điền nội dung. Ví dụ:
---
db_username: 'admin'
db_password: 'supersecretpassword'
Lưu và thoát.
7.2. Mã hóa file đã có sẵn
Nếu bạn đã có file secrets.yml rồi thì dùng:
ansible-vault encrypt secrets.yml
File sẽ được mã hóa, không thể đọc trực tiếp bằng cat.
7.3. Mã hóa một biến trực tiếp
Thay vì mã hóa cả file, bạn có thể chỉ mã hóa một biến bằng lệnh:
ansible-vault encrypt_string 'mysecretpassword' --name 'super_secret_password'
Kết quả trả về sẽ là một chuỗi đã mã hóa. Bạn có thể copy dán vào playbook hoặc file vars.
7.4. Sử dụng secrets trong playbook
Tạo file use_secrets.yml:
---
- name: Example playbook using Ansible vault
hosts: app
vars_files:
- secrets.yml
vars:
app_name: "MyApp"
app_version: "1.0.0"
tasks:
- name: Print the application name and version
debug:
msg: "Application Name: {{ app_name }}, Version: {{ app_version }}"
- name: Print the database username and password
debug:
msg: "Database Username: {{ db_username }}, Password: {{ db_password }}"
no_log: false
7.5. Chạy playbook với Vault
Vì secrets.yml đã được mã hóa, bạn cần cung cấp mật khẩu Vault khi chạy playbook:
Cách 1: Hỏi mật khẩu mỗi lần chạy
ansible-playbook use_secrets.yml --ask-vault-pass
Cách 2: Dùng file chứa mật khẩu
Tạo file /home/ansible/vault_pass chứa mật khẩu vault. Sau đó chạy:
ansible-playbook use_secrets.yml --vault-password-file /home/ansible/vault_pass
7.6. Quản lý file Vault
Một số lệnh hữu ích khác:
- Mở file để chỉnh sửa:
ansible-vault edit secrets.yml - Giải mã file:
ansible-vault decrypt secrets.yml - Đổi mật khẩu Vault:
ansible-vault rekey secrets.yml
Ansible Vault là một công cụ đơn giản nhưng rất hiệu quả để bảo vệ thông tin nhạy cảm trong dự án. Qua bài này, bạn đã biết cách mã hóa, giải mã và tích hợp Vault vào playbook một cách linh hoạt và an toàn.
Bài viết cùng chủ đề:
Ansible Handler – Bài 8
Ansible Modules – Bài 7