Ansible Vault – bezpieczne przechowywanie haseł i danych wrażliwych

Grafika do artykułu o Ansible Vault

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.

Przewijanie do góry