tło
- Korzystamy z Ansible w celu udostępniania infrastruktury Azure i zarządzania nią. W tej chwili uruchamiamy Ansible „ręcznie”, tj. Ręcznie wykonujemy podręczniki dla różnych zautomatyzowanych zadań. Brak infrastruktury CI.
- Prawdopodobnie nie dotyczy, ale zarządzamy naszymi zasobami za pomocą dynamicznego skryptu
azure_rm.py
. - Zachęcamy do jak największego bezpieczeństwa, tj
- Nie przechowuj haseł Vault
~/.vault_pass
w żadnym pliku lokalnym - Nie przechowuj tajemnic platformy Azure
~/.azure/credentials
- Nie przechowuj niczego w bezpieczny sposób
.bashrc
.
- Nie przechowuj haseł Vault
W takim scenariuszu mam problem z opracowaniem spójnej strategii zapewniającej dostęp do moich tajemnic platformy Azure zgodnie z powyższymi wytycznymi.
Pytanie
Jak mogę uniknąć przechowywania poświadczeń Vault i Azure na plikach, zapewniając jednocześnie dostęp do nich przez moje podręczniki?
Co próbowałem
Do tej pory wymyśliłem taki skrypt
- pyta użytkownika o hasło do Vault
- Wykorzystuje to do odszyfrowania skryptu Vaulted Shell
- Ocenia skrypt, który ładuje zmienne środowiskowe platformy Azure do środowiska;
- Uruchamia playbook na ustawionym w ten sposób środowisku.
Jakieś lepsze (bardziej eleganckie, mniej skomplikowane, bardziej „Ansible”) rozwiązania?
ansible
ansible-vault
Vish
źródło
źródło
Odpowiedzi:
Hasło do skarbca
Przede wszystkim powinieneś zapoznać się z faktem, że plik hasła do skarbca może być skryptem wykonywalnym. W tym przypadku Ansible wykonuje go i oczekuje, że otrzyma hasło jako wynik.
Na przykład możesz użyć
gpg-agent
lubkeychain
przechowywać swoje aktualne hasło i odblokować je w razie potrzeby. Przeczytaj więcej w tym poście na blogu: https://benincosa.com/?p=3235Jeśli jesteś nieco paranoikiem, możesz dodać powiadomienie po wywołaniu skryptu hasła, w ten sposób:
Ten skrypt hasła skarbca używa
key.gpg
jako rzeczywistego klucza skarbca, a także wyświetla powiadomienie wyskakujące (w systemie MacOS) z nazwą procesu nadrzędnego, gdy używany jest skrypt. Pamięci podręczne agentów Gpg odblokowują hasło przez pewien czas, więc nie trzeba wprowadzać hasła przy każdym uruchomieniu poradnika.Po prostu ustaw
vault_password_file = ./vault_pass.sh
w swoimansible.cfg
.Środowisko
Powiedziałeś, że używasz
azure_rm.py
jako dynamicznego skryptu spisu. Oznacza to, że musisz ustawić dane uwierzytelniające w zmiennych środowiskowych, zanim zaczniesz grać w ansible-playbook, aby mógł z nich korzystać.Możesz utworzyć dwa pliki:
secure_env
(zaszyfrowane za pomocą skarbca):set_env
(zwykły tekst):Po otwarciu nowego terminala w celu wykonania zadań automatyzacji należy uruchomić:
W tej chwili bash ocenia
set_env
isecure_env
(odszyfrowuje przez Vault). Po tym poleceniu masz zdefiniowane poświadczenia platformy Azure dla bieżącej powłoki, dzięki czemu możesz wykonywać playbooki jak zwykle:Więc używając tych dwóch podejść, można przechowywać
key.gpg
isecure_env
w repozytorium; następnie w nowym terminalu zadzwońsource set_env
raz, wpisz hasło gpg jeden raz (aby odblokować użycie key.gpg w przyszłości); a następnie dzwonićansible-playbook
tyle razy, ile chcesz, bez żadnych haseł.źródło
source
podejściu ustawiasz środowisko raz na sesję terminalową i możesz korzystać z całego zakresu narzędzi osobno: podręczników ansible, skryptów inwentaryzacyjnych, lazurowego cli, bez żadnych opakowań.Przeczytaj https://docs.ansible.com/ansible/2.4/vault.html Od Ansible 2.4 można użyć
--vault-id @prompt
.Zaszyfruj plik za pomocą ansible-vault:
Uruchom poradnik, a spowoduje to:
Istnieje wiele opcji deszyfrowania plików, w tym
@prompt
:wyświetli monit:
Po wprowadzeniu hasła do skarbca poradnik powinien się powieść.
źródło
--ask-vault-pass
opcji. I nie rozumiem, jak zastąpienie go--vault-id
odpowiedzią na większe pytanie o lepszy przepływ pracy.ansible-playbook --vault-id my-vault-password.py
. Pomyślałem, że może masz rozwiązanie wokół skryptu w języku Python :) Zastanawiam się również nad tym.