Gdzie umieścić hasło repozytorium


26

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.



Istnieje kilka dobrych odpowiedzi tutaj: devops.stackexchange.com/questions/3806/…
Vish,

Odpowiedzi:


13

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ą:

  1. Szczególnie potrzebne do ansible wdrożeń
  2. 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:

  1. 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)
  2. 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
  3. 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.


1
Dobrze jest przechowywać hasło Ansible Vault w bezpieczniejszym miejscu (HashiCorp Vault lub SaaS Vault, np. AWS Secrets Manager). Jednak nadal trzeba go obrócić (zmienić), jeśli ktoś opuści zespół, ponieważ miał do niego dostęp, nawet jeśli na krótko. Można to złagodzić, stosując oddzielne skarbce (programistyczne, testowe, produkcyjne), tj. Tajne pliki w YAML. Ansible 2.4+ umożliwia także określenie różnych haseł do takich plików za pomocą „identyfikatora skarbca” - strona z dokumentami
RichVel

1
W Ansible 2.3 wprowadzono funkcję, która szyfruje tylko wartości w plikach YAML, a nie cały plik - jest to łatwiejsze w utrzymaniu niż starsza konwencja wspomniana w punkcie 3 na końcu tej odpowiedzi.
RichVel

7

W naszym projekcie planujemy użyć skarbca ansible, aby zapobiec wyciekowi haseł lub kluczy w git.

Ponieważ jeszcze niczego nie zaimplementowałeś, możesz to przemyśleć. Korzystanie z systemu takiego jak Vault Ansible ma szereg wad bezpieczeństwa:

  • nie ma śladu audytu, kto miał do niego dostęp
  • kiedy pracownik odchodzi, łatwo jest zabrać ze sobą tajny sklep
  • kiedy pracownik odchodzi, usunięcie jego dostępu oznacza zmianę hasła i redystrybucję go wśród wszystkich innych
  • skompromitowane hasło do przechowalni Ansible może być zawsze używane w starej wersji przechowalni, tak jak jest przechowywane w kontroli wersji
  • sekrety muszą być statyczne

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.


2
Najlepszym sposobem na użycie skarbca ansible jest nie używanie go. Dziękujemy za zwrócenie na to uwagi!
burza

1
W przypadku małych i średnich organizacji polecam przyjrzeć się menedżerowi tajemnic w chmurze, np. AWS Secrets Manager - jest to o wiele mniej pracy niż prowadzenie wysoce dostępnego klastra dla HashiCorp Vault, ale duża poprawa bezpieczeństwa uzyskanego dzięki Ansible Vault, w tym audyt i szczegółowa kontrola dostępu. Oczywiście kończy się to w zależności od tej usługi, ale można ją zamknąć za pomocą kodowania aplikacji i pracy Ansible. Główną zaletą jest to, że niektóre sekrety wcale nie muszą być zarządzane przez Ansible, np. Hasła DB - po prostu pozwól aplikacji uzyskać sekret od menedżera sekretów.
RichVel

3

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ą:

export ANSIBLE_VAULT_PASSWORD_FILE=/deep/dark/place

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:

  • nie we współdzielonej lokalizacji / repozytorium (jest to plik nie wersjonowany, jak mówisz)
  • nie trzeba znać hasła do Ansible Vault, aby uruchomić grę (pod warunkiem, że masz narzędzie CI, np. Jenkins, w którym możesz łatwo uruchamiać podręczniki)

Cons:

  • niełatwe jest obracanie hasła
  • każdy, kto pracuje na twoich podręcznikach, musi mieć go na swojej stacji roboczej

Wady mają ograniczenia, ale znowu to zależy od zasad i zasad, które przyjęliście w codziennych operacjach.


1
Niezłe połączenie .. sprawdź drugą odpowiedź, chociaż może Cię to zainteresować.
burza

0

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 ...


Pomogłoby to uczynić łatwiejszym bardziej konkretnym niż dodawanie czegoś ogólnego. Przeczytałem README strony github, ale czy możesz zmienić odpowiedź, aby zawierała wyraźny przykład? Chciałbym tego spróbować.
030
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.