- Tác giả

- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
Ansible Vault: Hướng dẫn bảo mật Secrets và quản lý mật khẩu trong Automation - Part 2
6. Document Vault Password Location
# README.md
## Vault Passwords
- **Development**: Stored in 1Password vault "Ansible Dev"
- **Staging**: Stored in AWS Secrets Manager `ansible/staging`
- **Production**: Stored in HashiCorp Vault `secret/ansible/prod`
Contact: devops@example.com for access
7. Use Vault IDs Cho Nhiều Environments
# Development
ansible-playbook site.yml --vault-id dev@prompt
# Production
ansible-playbook site.yml --vault-id prod@~/.vault_passwords/prod.txt
Troubleshooting
Lỗi 1: Decryption Failed
ERROR! Decryption failed (no vault secrets were found that could decrypt)
Nguyên nhân: Sai vault password
Giải pháp:
# Verify password
ansible-vault view vars/secrets.yml
# Nếu quên password, không thể recover!
# Phải tạo file mới
Lỗi 2: File Không Được Mã Hóa
ERROR! vars/secrets.yml is not encrypted
Giải pháp:
ansible-vault encrypt vars/secrets.yml
Lỗi 3: Multiple Vault IDs Not Found
ERROR! Attempted to get a vault password by ID (prod) but no vault password was found for that ID
Giải pháp:
# Ensure vault ID exists
ansible-playbook site.yml \
--vault-id dev@~/.vault_passwords/dev.txt \
--vault-id prod@~/.vault_passwords/prod.txt
Integration Với CI/CD
GitLab CI
# .gitlab-ci.yml
deploy:
stage: deploy
script:
- echo "$VAULT_PASSWORD" > .vault_pass
- chmod 600 .vault_pass
- ansible-playbook deploy.yml --vault-password-file .vault_pass
after_script:
- rm -f .vault_pass # Cleanup
only:
- main
GitLab CI/CD Variables:
VAULT_PASSWORD= your vault password (masked)
GitHub Actions
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Ansible
run: pip install ansible
- name: Create vault password file
run: echo "${{ secrets.VAULT_PASSWORD }}" > .vault_pass
- name: Run playbook
run: ansible-playbook deploy.yml --vault-password-file .vault_pass
- name: Cleanup
if: always()
run: rm -f .vault_pass
GitHub Secrets:
VAULT_PASSWORD= your vault password
Jenkins
// Jenkinsfile
pipeline {
agent any
environment {
VAULT_PASS = credentials('ansible-vault-password')
}
stages {
stage('Deploy') {
steps {
sh '''
echo "$VAULT_PASS" > .vault_pass
chmod 600 .vault_pass
ansible-playbook deploy.yml --vault-password-file .vault_pass
rm -f .vault_pass
'''
}
}
}
}
Alternatives Và Khi Nào Dùng
Ansible Vault vs External Secret Managers
| Feature | Ansible Vault | HashiCorp Vault | AWS Secrets Manager |
|---|---|---|---|
| Cost | Free | Free/Paid | Paid ($0.40/secret) |
| Setup | Simple | Complex | Medium |
| Git-friendly | ✅ Yes | ❌ No | ❌ No |
| Dynamic secrets | ❌ No | ✅ Yes | ✅ Yes |
| Audit log | ❌ No | ✅ Yes | ✅ Yes |
| Auto rotation | ❌ No | ✅ Yes | ✅ Yes |
Khi Nào Dùng Ansible Vault?
✅ Phù hợp:
- Small to medium teams
- Secrets không thay đổi thường xuyên
- Muốn simple setup
- Secrets cần version control
❌ Không phù hợp:
- Enterprise scale (1000+ secrets)
- Cần dynamic secrets
- Cần audit trail chi tiết
- Multiple teams cần access khác nhau
Tổng Kết
Trong bài học này, bạn đã học:
- ✅ Cách encrypt/decrypt files và strings
- ✅ Multiple vault IDs cho nhiều environments
- ✅ Integration với CI/CD pipelines
- ✅ Best practices cho production
- ✅ Khi nào dùng Ansible Vault vs external secret managers
Bài Tập Thực Hành
- Bài 1: Tạo encrypted inventory cho 3 environments (dev/staging/prod)
- Bài 2: Setup GitLab CI pipeline với Ansible Vault
- Bài 3: Migrate plain text secrets sang Ansible Vault trong existing project
- Bài 4: Implement vault password rotation script
Security Checklist
- [ ] Không commit vault passwords vào Git
- [ ]
.vault_pass*trong .gitignore - [ ] Vault password files có permission 600
- [ ] Sử dụng vault IDs cho nhiều environments
- [ ] Document vault password locations
- [ ] Rotate vault passwords định kỳ
- [ ] Test decrypt trước khi deploy production
- [ ] Backup encrypted files trước khi rekey
