Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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

Resources