W naszym projekcie planujemy użyć skarbca ansible, aby zapobiec wyciekowi haseł lub kluczy w git.
Chodzi o to, aby umieścić wszystkie nasze wrażliwe dane w zwykłym pliku, a następnie zaszyfrować ten plik za pomocą hasła, zanim przejdziesz do git.
Aby odszyfrować plik, musimy przekazać hasło do przechowalni, aby odpowiedzieć, myślę o 3 możliwościach:
- Przechowuj go w zmiennej środowiskowej serwera
- Przekaż to jako opcję polecenia ansible-playbook
- Zapisz go w pliku bez wersji.
Czy istnieją inne opcje, które są najlepszym (i bezpiecznym) sposobem przechowywania hasła w usłudze ansible-vault, dokumentacja najlepszych praktyk w usłudze Answer nie mówi o tym.
Odpowiedzi:
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ą:
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).
Zgodnie z warunkami z poprzedniego akapitu uważam, że dobrą praktyką byłoby:
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:
będziesz wiedział, że wartość jest przechowywana w skarbcu ansible.
źródło
Ponieważ jeszcze niczego nie zaimplementowałeś, możesz to przemyśleć. Korzystanie z systemu takiego jak Vault Ansible ma szereg wad bezpieczeństwa:
Potencjalnie znacznie bezpieczniejszy, aczkolwiek bardziej złożony system, który nie ma tych wad, to używanie Hashicorp Vault do przechowywania twoich tajemnic. Możesz nadal wyciągać z niego wartości prawie tak łatwo, jak z Vault Ansible, używając https://github.com/jhaals/ansible-vault .
Musisz jednak zarządzać uwierzytelnianiem w Hashicorp Vault, i to jest pytanie żółwia . Myślę, że dla ludzi najlepszym rozwiązaniem jest okresowe monitowanie o hasło i wygaśnięcie tokena po krótkim czasie; dla komputerów, aby użyć backendu uwierzytelniania AWS lub podobnego. Nigdy nie możesz całkowicie pozbyć się gdzieś potrzeby uwierzytelnienia, ale utrudnisz osobie atakującej uzyskanie do niej dostępu.
Teraz, jeśli konfigurowanie i zarządzanie serwerem sekretów jest dla Ciebie zbyt trudne, z pewnością możesz po prostu użyć usługi Ansible Vault. Po co jednak przechowywać hasło na poszczególnych komputerach? Do użytku interaktywnego wystarczy poprosić o hasło, a użytkownicy mogą zapisać je w dowolnym menedżerze haseł. iTerm na OS X ma menedżera haseł, który integruje się z Keychain.app, co sprawia, że jest to szczególnie łatwe.
źródło
To w dużej mierze dotyczy wewnętrznych zasad postępowania z poufnymi danymi.
Chciałbym opowiedzieć wam o moim podejściu do tego i wyjaśnić, co uważam za plusy i minusy. Trzymam hasło Ansible Vault w pliku na komputerze sterującym i mam do niego zmienną środowiskową:
Mam to na mojej stacji roboczej (ponieważ muszę testować i rozwijać podręczniki), niektórzy koledzy też to mają, i oczywiście mamy to na głównej maszynie sterującej Ansible.
Plusy:
Cons:
Wady mają ograniczenia, ale znowu to zależy od zasad i zasad, które przyjęliście w codziennych operacjach.
źródło
Obejrzyj ten projekt, aby zarządzać hasłami do szyfrowania ansible vault https://github.com/Smile-SA/ansible-vault-manager
Obsługuje wiele platform przechowywania kluczy z wtyczkami (na razie zaimplementowano tylko AWS SSM). Integracja Morehover z bieżącym projektem Ansible jest bardzo łatwa ...
źródło