Zarządzanie wpisami tajnymi w usłudze Azure Container Apps
Artykuł
Usługa Azure Container Apps umożliwia aplikacji bezpieczne przechowywanie poufnych wartości konfiguracji. Po zdefiniowaniu wpisów tajnych na poziomie aplikacji zabezpieczone wartości są dostępne dla poprawek w aplikacjach kontenerów. Ponadto można odwoływać się do zabezpieczonych wartości wewnątrz reguł skalowania. Aby uzyskać informacje na temat używania wpisów tajnych z językiem Dapr, zapoznaj się z integracją języka Dapr.
Wpisy tajne są ograniczone do określonej aplikacji, niezależnie od konkretnych wersji aplikacji.
Nowe poprawki nie są generowane przez dodawanie, usuwanie ani zmienianie wpisów tajnych.
Każda wersja aplikacji może odwoływać się do co najmniej jednego wpisu tajnego.
Wiele wersji może odwoływać się do tych samych wpisów tajnych.
Zaktualizowany lub usunięty wpis tajny nie ma automatycznie wpływu na istniejące poprawki w aplikacji. Po zaktualizowaniu lub usunięciu wpisu tajnego można zareagować na tę zmianę na jeden z dwóch sposobów:
Wdrożenie nowej wersji.
Ponowne uruchomienie istniejącej wersji.
Przed usunięciem wpisu tajnego wdróż nową wersję, która nie odwołuje się już do starego wpisu tajnego. Następnie zdezaktywuj wszystkie poprawki odwołujące się do wpisu tajnego.
Definiowanie wpisów tajnych
Wpisy tajne są definiowane jako zestaw par nazwa/wartość. Wartość każdego wpisu tajnego jest określana bezpośrednio lub jako odwołanie do wpisu tajnego przechowywanego w usłudze Azure Key Vault.
Uwaga
Unikaj określania wartości wpisu tajnego bezpośrednio w środowisku produkcyjnym. Zamiast tego użyj odwołania do wpisu tajnego przechowywanego w usłudze Azure Key Vault, zgodnie z opisem w sekcji Przechowywanie wartości wpisu tajnego w usłudze Container Apps.
Przechowywanie wartości wpisu tajnego w usłudze Container Apps
Podczas definiowania wpisów tajnych za pośrednictwem portalu lub za pośrednictwem różnych opcji wiersza polecenia.
W tym miejscu parametry połączenia do konta magazynu kolejek jest zadeklarowany w tablicysecrets. W tym przykładzie zastąpisz <MY-CONNECTION-STRING-VALUE> wartość parametry połączenia.
Podczas tworzenia aplikacji kontenera wpisy tajne są definiowane przy użyciu parametru --secrets .
Parametr akceptuje rozdzielany spacjami zestaw par nazwa/wartość.
W tym miejscu parametry połączenia do konta magazynu kolejek jest zadeklarowany w parametrze --secrets . Zastąp <CONNECTION_STRING> ciąg wartością parametry połączenia.
Podczas tworzenia aplikacji kontenera wpisy tajne są definiowane jako co najmniej jeden obiekt tajny przekazywany przez ConfigurationSecrets parametr .
W tym miejscu zadeklarowana jest parametry połączenia do konta magazynu kolejek. Wartość parametru queue-connection-string pochodzi ze zmiennej środowiskowej o nazwie $QueueConnectionString.
Odwołanie do wpisu tajnego z usługi Key Vault
Podczas definiowania wpisu tajnego tworzysz odwołanie do wpisu tajnego przechowywanego w usłudze Azure Key Vault. Usługa Container Apps automatycznie pobiera wartość wpisu tajnego z usługi Key Vault i udostępnia ją jako wpis tajny w aplikacji kontenera.
Aby odwołać się do wpisu tajnego z usługi Key Vault, musisz najpierw włączyć tożsamość zarządzaną w aplikacji kontenera i udzielić tożsamości dostępu do wpisów tajnych usługi Key Vault.
Aby włączyć tożsamość zarządzaną w aplikacji kontenera, zobacz Tożsamości zarządzane.
Aby udzielić dostępu do wpisów tajnych usługi Key Vault, utwórz zasady dostępu w usłudze Key Vault dla utworzonej tożsamości zarządzanej. Włącz uprawnienie "Pobierz" wpis tajny dla tych zasad.
W tym miejscu parametry połączenia do konta magazynu kolejek jest zadeklarowany w tablicysecrets. Jego wartość jest automatycznie pobierana z usługi Key Vault przy użyciu określonej tożsamości. Aby użyć tożsamości zarządzanej przez użytkownika, zastąp element system identyfikatorem zasobu tożsamości.
Zastąp <KEY-VAULT-SECRET-URI> ciąg identyfikatorem URI wpisu tajnego w usłudze Key Vault.
Podczas tworzenia aplikacji kontenera wpisy tajne są definiowane przy użyciu parametru --secrets .
Parametr akceptuje rozdzielany spacjami zestaw par nazwa/wartość.
Znak równości (=) rozdziela każdą parę.
Aby określić odwołanie do usługi Key Vault, użyj formatu <SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Na przykład queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
W tym miejscu parametry połączenia do konta magazynu kolejek jest zadeklarowany w parametrze --secrets . Zastąp <KEY_VAULT_SECRET_URI> ciąg identyfikatorem URI wpisu tajnego w usłudze Key Vault. Zastąp <USER_ASSIGNED_IDENTITY_ID> element identyfikatorem zasobu tożsamości przypisanej przez użytkownika.
Uwaga
Tożsamość przypisana przez użytkownika musi mieć dostęp do odczytu wpisu tajnego w usłudze Key Vault. Tożsamość przypisana przez system nie może być używana z poleceniem create, ponieważ nie jest dostępna do momentu utworzenia aplikacji kontenera.
Odwołania do usługi Key Vault wpisów tajnych nie są obsługiwane w programie PowerShell.
Identyfikator URI wpisu tajnego usługi Key Vault i rotacja wpisów tajnych
Identyfikator URI wpisu tajnego usługi Key Vault musi mieć jeden z następujących formatów:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: odwołuje się do określonej wersji wpisu tajnego.
https://myvault.vault.azure.net/secrets/mysecret: odwołuje się do najnowszej wersji wpisu tajnego.
Jeśli wersja nie jest określona w identyfikatorze URI, aplikacja używa najnowszej wersji, która istnieje w magazynie kluczy. Gdy nowsze wersje staną się dostępne, aplikacja automatycznie pobiera najnowszą wersję w ciągu 30 minut. Wszystkie aktywne poprawki odwołujące się do wpisu tajnego w zmiennej środowiskowej są automatycznie uruchamiane ponownie w celu pobrania nowej wartości.
Aby uzyskać pełną kontrolę nad wersją wpisu tajnego, określ wersję w identyfikatorze URI.
Odwoływanie się do wpisów tajnych w zmiennych środowiskowych
Po zadeklarowaniu wpisów tajnych na poziomie aplikacji zgodnie z opisem w sekcji Definiujące wpisy tajne można odwoływać się do nich w zmiennych środowiskowych podczas tworzenia nowej poprawki w aplikacji kontenera. Gdy zmienna środowiskowa odwołuje się do wpisu tajnego, jego wartość jest wypełniana wartością zdefiniowaną w kluczu tajnym.
Przykład
W poniższym przykładzie pokazano aplikację, która deklaruje parametry połączenia na poziomie aplikacji. To połączenie jest przywołyne w zmiennej środowiskowej kontenera i w regule skalowania.
Po zdefiniowaniu wpisu tajnego w aplikacji kontenera można odwoływać się do niej w zmiennej środowiskowej podczas tworzenia nowej poprawki.
Przejdź do aplikacji kontenera w witrynie Azure Portal.
Otwórz stronę Zarządzanie poprawkami.
Wybierz pozycję Utwórz nową poprawkę.
Na stronie Tworzenie i wdrażanie nowej poprawki wybierz kontener.
W sekcji Zmienne środowiskowe wybierz pozycję Dodaj.
Wprowadź następujące informacje:
Nazwa: nazwa zmiennej środowiskowej.
Źródło: wybierz pozycję Odwołuj się do wpisu tajnego.
Wartość: wybierz wpis tajny, do którego chcesz się odwołać.
Wybierz pozycję Zapisz.
Wybierz pozycję Utwórz , aby utworzyć nową poprawkę.
W tym przykładzie aplikacja parametry połączenia jest zadeklarowana jako queue-connection-string i staje się dostępna w innych miejscach w sekcjach konfiguracji.
W tym miejscu zmienna środowiskowa o nazwie connection-string pobiera swoją wartość z wpisu tajnego na poziomie queue-connection-string aplikacji. Ponadto konfiguracja uwierzytelniania reguły skalowania usługi Azure Queue Storage używa wpisu tajnego queue-connection-string do zdefiniowania jego połączenia.
Aby uniknąć zatwierdzania wartości wpisów tajnych do kontroli źródła przy użyciu szablonu usługi ARM, przekaż wartości wpisów tajnych jako parametry szablonu usługi ARM.
W tym przykładzie utworzysz aplikację kontenera przy użyciu interfejsu wiersza polecenia platformy Azure z wpisem tajnym, do którego odwołuje się zmienna środowiskowa. Aby odwołać się do wpisu tajnego w zmiennej środowiskowej w interfejsie wiersza polecenia platformy Azure, ustaw jej wartość na secretref:, a następnie nazwę wpisu tajnego.
W tym miejscu zmienna środowiskowa o nazwie connection-string pobiera swoją wartość z wpisu tajnego na poziomie queue-connection-string aplikacji.
Odwołania do usługi Key Vault wpisów tajnych nie są obsługiwane w programie PowerShell.
W tym przykładzie utworzysz kontener przy użyciu programu Azure PowerShell z wpisem tajnym, do którego odwołuje się zmienna środowiskowa. Aby odwołać się do wpisu tajnego w zmiennej środowiskowej w programie PowerShell, ustaw jej wartość na secretref:, a następnie nazwę wpisu tajnego.
W tym miejscu zmienna środowiskowa o nazwie ConnectionString pobiera swoją wartość z wpisu tajnego na poziomie $QueueConnectionString aplikacji.
Instalowanie wpisów tajnych w woluminie
Po zadeklarowaniu wpisów tajnych na poziomie aplikacji zgodnie z opisem w sekcji Definiujące wpisy tajne można odwoływać się do nich w instalacjach woluminów podczas tworzenia nowej poprawki w aplikacji kontenera. Podczas instalowania wpisów tajnych w woluminie każdy wpis tajny jest instalowany jako plik w woluminie. Nazwa pliku jest nazwą wpisu tajnego, a zawartość pliku jest wartością wpisu tajnego. Możesz załadować wszystkie wpisy tajne w instalacji woluminu lub załadować określone wpisy tajne.
Po zdefiniowaniu wpisu tajnego w aplikacji kontenera można odwoływać się do niego w instalacji woluminu podczas tworzenia nowej poprawki.
Przejdź do aplikacji kontenera w witrynie Azure Portal.
Otwórz stronę Zarządzanie poprawkami.
Wybierz pozycję Utwórz nową poprawkę.
Na stronie Tworzenie i wdrażanie nowej poprawki.
Wybierz kontener i wybierz pozycję Edytuj.
W sekcji Instalowanie woluminów rozwiń sekcję Wpisy tajne.
Wybierz pozycję Utwórz nowy wolumin.
Wprowadź następujące informacje:
Nazwa: mysecrets
Zainstaluj wszystkie wpisy tajne: włączone
Uwaga
Jeśli chcesz załadować określone wpisy tajne, wyłącz opcję Zainstaluj wszystkie wpisy tajne i wybierz wpisy tajne, które chcesz załadować.
Wybierz Dodaj.
W obszarze Nazwa woluminu wybierz pozycję mysecrets.
W obszarze Ścieżka instalacji wprowadź / mnt/secrets.
Wybierz pozycję Zapisz.
Wybierz pozycję Utwórz , aby utworzyć nową poprawkę z instalacją woluminu.
W tym przykładzie dwa wpisy tajne są deklarowane na poziomie aplikacji. Te wpisy tajne są instalowane w woluminie o nazwie mysecrets typu Secret. Wolumin jest instalowany w ścieżce /mnt/secrets. Następnie aplikacja może odwoływać się do wpisów tajnych w instalacji woluminu.
Aby załadować określone wpisy tajne i określić ich ścieżki w zainstalowanym woluminie, należy zdefiniować wpisy tajne w secrets tablicy obiektu woluminu. W poniższym przykładzie pokazano, jak załadować tylko queue-connection-string wpis tajny w instalacji woluminu mysecrets o nazwie connection-string.txtpliku .
W aplikacji możesz odczytać wpis tajny z pliku znajdującego się w /mnt/secrets/connection-string.txtlokalizacji .
W tym przykładzie dwa wpisy tajne są deklarowane na poziomie aplikacji. Te wpisy tajne są instalowane w woluminie o nazwie mysecrets typu Secret. Wolumin jest instalowany w ścieżce /mnt/secrets. Aplikacja może następnie odczytywać wpisy tajne jako pliki w instalacji woluminu.