
Ansible Vault – bezpieczne przechowywanie haseł i danych wrażliwych
Automatyzacja infrastruktury często wiąże się z przetwarzaniem wrażliwych informacji, takich jak hasła, klucze API czy certyfikaty. Przechowywanie ich w otwartych plikach YAML stanowi poważne ryzyko bezpieczeństwa. Aby temu zapobiec, Ansible udostępnia mechanizm Vault, który umożliwia szyfrowanie i bezpieczne zarządzanie poufnymi danymi bez utraty wygody pracy z playbookami.
1. Czym jest Ansible Vault
Ansible Vault to wbudowane narzędzie pozwalające szyfrować dane tekstowe, pliki zmiennych, role czy całe playbooki. Dzięki niemu można przechowywać poufne informacje w repozytoriach kodu (np. Git) bez ryzyka ich ujawnienia. Zaszyfrowane dane są dostępne tylko po podaniu odpowiedniego hasła lub klucza.
2. Tworzenie zaszyfrowanego pliku
Nowy plik z danymi szyfrowanymi można utworzyć poleceniem:
ansible-vault create secrets.yml
Po uruchomieniu zostanie otwarty edytor (domyślnie vi), w którym można wprowadzić dane:
db_user: admin
db_password: SuperSecret123
api_key: 12345abcde
Po zapisaniu plik zostaje zaszyfrowany i nieczytelny dla osób nieuprawnionych.
3. Szyfrowanie istniejącego pliku
Jeśli istniejący plik zawiera dane wrażliwe, można go zaszyfrować bez ponownego tworzenia:
ansible-vault encrypt vars.yml
Plik zostanie przekształcony w postać zaszyfrowaną, rozpoczynającą się od nagłówka:
$ANSIBLE_VAULT;1.1;AES256
4. Odszyfrowywanie i edycja danych
Do odczytu lub modyfikacji zaszyfrowanych danych służą polecenia:
ansible-vault view secrets.yml
ansible-vault edit secrets.yml
Oba polecenia wymagają podania hasła dostępu, które zostało użyte do zaszyfrowania pliku.
5. Użycie danych Vault w playbookach
Zaszyfrowane pliki można włączać do playbooków w taki sam sposób, jak zwykłe pliki ze zmiennymi. Ansible automatycznie poprosi o hasło przy uruchomieniu playbooka.
Przykład:
– name: Use secrets from Vault
hosts: dbservers
vars_files:
– secrets.yml
tasks:
– name: Display database credentials
ansible.builtin.debug:
msg: „Connecting as {{ db_user }}”
Playbook pobiera zmienne z pliku secrets.yml, który jest odszyfrowywany w locie.
6. Przechowywanie hasła w pliku
Aby uniknąć ręcznego podawania hasła przy każdym uruchomieniu, można przechować je w osobnym pliku i użyć opcji –vault-password-file:
ansible-playbook site.yml –vault-password-file .vault_pass.txt
Plik z hasłem powinien być chroniony uprawnieniami systemowymi i nigdy nie powinien trafić do repozytorium Git.
7. Zmiana lub usuwanie hasła Vault
Zmiana hasła szyfrującego:
ansible-vault rekey secrets.yml
Usunięcie szyfrowania (odszyfrowanie pliku):
ansible-vault decrypt secrets.yml
Po odszyfrowaniu plik powraca do zwykłej postaci tekstowej, dlatego należy zachować ostrożność i ponownie zaszyfrować go po edycji.
8. Szyfrowanie pojedynczych wartości
Ansible Vault pozwala także szyfrować pojedyncze zmienne w plikach YAML, np. tylko hasło, a nie cały plik. Służy do tego polecenie ansible-vault encrypt_string.
Przykład:
ansible-vault encrypt_string 'MySecretPassword’ –name 'db_password’
Wynik można bezpośrednio wkleić do pliku group_vars/all.yml:
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
64373833393764346231393734623331623235393261633636346236653161346338393165393061…
To rozwiązanie pozwala szyfrować tylko wybrane elementy konfiguracji.
9. Użycie Vault w projektach z wieloma środowiskami
Najlepszą praktyką jest stosowanie osobnych plików Vault dla różnych środowisk, np.:
group_vars/
dev/vault.yml
stage/vault.yml
prod/vault.yml
Każdy z nich może mieć inne hasło, co dodatkowo zwiększa bezpieczeństwo. Możliwe jest również użycie różnych plików kluczy dla poszczególnych środowisk w zależności od poziomu dostępu zespołu.
10. Dobre praktyki bezpieczeństwa Vault
- nigdy nie przechowywać haseł w czystym tekście,
- chronić plik .vault_pass.txt uprawnieniami systemowymi,
- nie commitować kluczy i haseł do repozytorium,
- stosować różne hasła dla środowisk (dev, stage, prod),
- regularnie zmieniać hasła Vault,
- łączyć Vault z narzędziami do zarządzania sekretami (np. HashiCorp Vault, AWS Secrets Manager).
Podsumowanie
Ansible Vault to potężne narzędzie zapewniające bezpieczeństwo danych wrażliwych w automatyzacji. Pozwala szyfrować hasła, klucze i konfiguracje, a jednocześnie zachować wygodę pracy z plikami YAML. Świadome korzystanie z Vault stanowi podstawę bezpiecznej infrastruktury jako kodu (IaC) i jest niezbędne w każdym profesjonalnym projekcie DevOps.