Chodzi o to, aby umieścić wszystkie nasze wrażliwe dane [...]
Znaczenie słowa „wszystko” w tym zdaniu należy bardzo dokładnie przeanalizować przed wdrożeniem zaplanowanego rozwiązania.
Ansible Vault to bardzo przydatne narzędzie, ale powinno być używane tylko do przechowywania sekretów, które są:
- Szczególnie potrzebne do ansible wdrożeń
- Z łatwością stają się bezużyteczne dla właścicieli, którzy powinni się o nich nie wiedzieć, ale mogą oni nielegalnie „zapamiętać” ich (zwykle pracowników zwolnionych z pracy)
Drugi punkt jest krytyczny.
Wiele osób, a potencjalnie cały zespół DevOps, będzie miało dostęp do hasła do skarbca ansible, a zatem do wszystkich tajemnic.
Dlatego w przypadku wszystkich tajemnic przechowywanych w skarbcu powinien obowiązywać warunek, w którym osoba lub maszyna z nieuprawnionym dostępem do nich powinna być niezdolna do korzystania z nich, jeśli jest to pożądane.
Konkretnie mówiąc, jeśli używasz ansible do wdrożenia bazy danych i jej użytkowników, możesz przechowywać hasła w przechowalni, ale musisz być bardzo ostrożny (i najprawdopodobniej rozważyć inne rozwiązanie), jeśli ta usługa będzie dostępna z Internetu i bez potrzeby uwierzytelniania VPN!
Użytkownicy (DevOps) narażeni na tajemnicę powinni być niezdolni do korzystania z „zapamiętanych” haseł, jeśli zostanie na nich nałożona jedna bariera bezpieczeństwa (np. Odwołany dostęp VPN). Oprócz tego dostęp do repozytorium kodu źródłowego (w którym przechowywany jest skarbiec) powinien zostać odwołany również przed zmianą haseł.
W tych warunkach skarbiec ansible jest bardzo przydatnym narzędziem.
Próba zapisania w skarbcu sekretu, który może zostać wykorzystany przez dowolną osobę lub maszynę w Internecie, byłaby błędem (np. Poświadczenia użytkowników VPN).
Czy istnieją inne opcje, które są najlepszym (i bezpiecznym) sposobem przechowywania hasła w usłudze ansible-vault
Zgodnie z warunkami z poprzedniego akapitu uważam, że dobrą praktyką byłoby:
- Przechowuj hasło do skarbca w zewnętrznym bezpiecznym skarbcu (coś takiego jak Vault od HashiCorp lub dowolnego SaaS do zarządzania danymi uwierzytelniającymi)
- Zezwól na dostęp do zewnętrznego elementu skarbca DevOps (będą potrzebować hasła do testowania) oraz systemu CI / CD lub kontrolera ansible
Zachowaj konwencję, aby używać tajemnic ! Nie będziesz w stanie przeglądać zmian w tajemnicach i nie będziesz mógł grepować dla zmiennych odpowiadających w plikach sekretów! Bądź więc dokładny od samego początku. Dobrą konwencją jest nazywanie wszystkich zmiennych przechowywanych w skarbcu ansibla secret_
prefiksem. Kiedy zobaczysz coś takiego:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
będziesz wiedział, że wartość jest przechowywana w skarbcu ansible.