Magazyny sekretów
Odczytuj poświadczenia z menedżera sekretów zamiast przechowywać je w AnsibleForms
Dla administratorów: podłącz menedżer sekretów i pozwól poświadczeniom odczytywać z niego użytkownika i hasło.
Jak to działa
Magazyn sekretów to połączenie z menedżerem sekretów, dodawane w Połączenia > Magazyny sekretów. Poświadczenie może wtedy wskazać magazyn i miejsce w nim (odwołanie do sekretu). Gdy formularz, playbook lub wyrażenie używa tego poświadczenia:
- użytkownik i hasło są odczytywane z magazynu za każdym razem (w granicach czasu pamięci podręcznej magazynu);
- host, port i baza danych pozostają te z wiersza poświadczenia. Gdy wiersz zostawia któreś z nich puste, a sekret je zawiera, używana jest wartość z sekretu.
Formularze nadal odwołują się do poświadczenia po nazwie, więc przeniesienie hasła do magazynu niczego nie zmienia w Twoich formularzach.
| Typ magazynu | Status |
|---|---|
| HashiCorp Vault (KV v1 i v2, uwierzytelnianie tokenem) | dostępny |
Dynamiczne poświadczenia HashiCorp Vault (<mount>/creds/<role>) | eksperymentalny |
| CyberArk Central Credential Provider (CCP) | eksperymentalny |
Dodawanie magazynu
Od wersji 7.3.0 tylko admin może dodać, zmienić lub usunąć magazyn, bo jego token lub klucz jest wysyłany na jego adres. Każdy magazyn ma te pola:
| Pole | Znaczenie |
|---|---|
| Nazwa | Jak poświadczenia odwołują się do magazynu. |
| Typ | Menedżer sekretów. |
| Poświadczenie | Jak i gdzie loguje się magazyn: poświadczenie z Połączenia > Poświadczenia, w kroku Poświadczenia, typu HashiCorp Vault (jego token i adres) lub CyberArk. Zawiera bazowy URL, np. https://vault.example.com:8200, i ustawienia TLS: pominięcie weryfikacji certyfikatu albo pakiet CA w PEM dla prywatnego CA. Samo nie może odczytywać z magazynu sekretów. |
| Pamięć podręczna (sekundy) | Jak długo odczytany sekret jest ponownie używany. 0 odczytuje go przy każdym użyciu. Domyślnie 60. |
| Dodatkowe opcje (JSON) | Opcje specyficzne dla typu, jako obiekt JSON. |
Do wersji 7.2.0 adres, token i ustawienia TLS były polami magazynu. Aktualizacja do 7.3.0 przenosi je do jego poświadczenia o nazwie <store>-token (lub <store>-appid dla CyberArk), zobacz Adresy w poświadczeniach.
Testuj połączenie sprawdza dostęp bez odczytywania sekretu. Strona Stan sprawdza każdy magazyn i ostrzega 7 dni przed wygaśnięciem tokenu Vault.
Każdy menedżer sekretów ma własną stronę:
| Strona | Czego dotyczy |
|---|---|
| HashiCorp Vault | KV v1 i v2 z uwierzytelnianiem tokenem oraz dynamiczne poświadczenia bazy danych |
| CyberArk | Central Credential Provider (CCP) z Application Access Manager firmy CyberArk |
Używanie magazynu
W poświadczeniu
W Połączenia > Poświadczenia, w kroku Magazyn poświadczenia, wybierz Magazyn sekretów, a potem wskaż Magazyn sekretów i wypełnij Odwołanie. Użytkownik i hasło są wtedy odczytywane z magazynu, a nie wpisywane.
Bezpośrednio, bez wiersza poświadczenia
Wszędzie tam, gdzie przyjmowana jest nazwa poświadczenia, możesz zamiast tego odwołać się bezpośrednio do magazynu (fnCredentials, fnRestBasic, credentials: formularza, dbConfig zapytania).
fn.fnCredentials('secret:vault:secret/myapp/prod') // secret:<store>:<reference>
fn.fnCredentials('vault:secret/myapp/prod') // the store named `vault`
- name: servers
type: enum
query: SELECT name FROM servers
dbConfig: secret:vault:secret/cmdb/db
Od wersji 7.5.0 dbConfig wskazuje najpierw bazę danych; odwołanie takie jak to nie jest bazą danych, więc nadal jest odczytywane z magazynu. Baza danych może też odczytywać swój login z magazynu, przez poświadczenie typu baza danych, które go używa.
Bez wiersza poświadczenia sekret bazy danych potrzebuje co najmniej db_type i hosta, na przykład:
{ "username": "forms", "password": "...", "host": "cmdb.example.com", "port": 3306,
"db_type": "mysql", "database": "cmdb" }
Bez db_type sekret jest zwykłym poświadczeniem (użytkownik, hasło i dowolne inne klucze), a zapytanie na nim zakłada mysql.
Nazwy kluczy
Sekret jest mapowany na poświadczenie przez te aliasy. Pozostałe klucze są przekazywane dalej.
| Pole poświadczenia | Akceptowane klucze w sekrecie |
|---|---|
user | user, username, login |
password | password, token, api_key, apikey, secret |
host | host, address |
port | port |
db_name | db_name, database |
db_type, secure | ta sama nazwa (tylko sekrety bezpośrednie) |
Dla wiersza poświadczenia host, port i nazwa bazy danych z sekretu są używane tylko tam, gdzie wiersz zostawia je puste.
Sekret o innej strukturze można przekształcić wyrażeniem jq, przekazanym jako trzeci argument fnCredentials:
// secret: { "creds": { "u": "admin", "p": "Netapp12" } }
fn.fnCredentials('vault:secret/weird', '', '.creds | { user: .u, password: .p }')
W config seed
Magazyny można też deklarować w config seed, jak pozostałe obiekty administracyjne:
secret_stores:
items:
- name: vault
type: vault
credential: vault-login # its address and token
credentials:
items:
- name: vault-login
credential_type: vault
url: https://vault.example.com:8200
password: ${SEED_VAULT_TOKEN} # the Vault token
- name: production-db
secret_store: vault
secret_ref: secret/forms/production-db
host: db.example.com
port: 3306
db_type: mysql
is_database: true
Magazyn loguje się swoim poświadczeniem: poświadczenie vault zawiera adres Vault w url i token jako hasło, poświadczenie cyberark AppID i adres CCP. Bez poświadczenia używane są własne url i token magazynu. Szczegóły opisuje strona Config seed.
Aktualizacja ze zmiennych VAULT_*
Przed wersją 7 jedynym magazynem był HashiCorp Vault konfigurowany zmiennymi środowiskowymi VAULT_*, a poświadczenie wskazywało na niego przez Vault path.
- Zmienne są importowane jednorazowo jako magazyn o nazwie
vault; potem je usuń. - Poświadczenia z
vault_pathużywają teraz tego magazynu;vault_pathzniknie w wersji 8.