Ansible Vault – Bài 11

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

Điều kiện và vòng lặp trong Ansible – Bài 6

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em