Zarządzanie sekretami w Azure Container Apps

Azure Container Apps umożliwia aplikacji bezpieczne przechowywanie poufnych wartości konfiguracji. Po zdefiniowaniu tajnych danych na poziomie aplikacji, zabezpieczone wartości są dostępne dla wersji 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 Dapr, zobacz Integrację 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 jednego lub więcej sekretów.
  • Wiele poprawek może odwoływać się do tych samych tajemnic.

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:

  1. Wdrożenie nowej wersji.
  2. 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 wersje odwołujące się do tajemnicy.

Uprawnienia do zarządzania sekretami

Azure Container Apps udostępnia oddzielne listSecrets operacje dla aplikacji kontenerowych, zadań i składników Dapr. Te operacje zwracają wartości tajnych w formie tekstu jawnego. Przyznawaj te uprawnienia tylko tożsamościom, które muszą odczytywać wartości sekretów.

Kilka wbudowanych ról platformy Azure dla usługi Container Apps definiuje uprawnienia za pomocą wzorców z symbolami wieloznacznymi dla wygody. Poniższe przykłady umożliwiają odczyt tajnych wartości za pomocą symbolu wieloznacznego lub jawnego uprawnienia listSecrets, nawet gdy nazwa roli lub jej opis sugerują węższy zakres dostępu. Ta lista nie jest wyczerpująca; przed przypisaniem roli przejrzyj obecne wbudowane role Azure dla kontenerów.

Następujące role dają dostęp do wartości tajnych aplikacji kontenerowych lub zadań:

Rola wbudowana Odpowiednie uprawnienia w definicji roli Operacja dopasowywania kluczy tajnych
Współtwórca aplikacji kontenerowych Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Operator aplikacji kontenerowych Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Współautor zadań usługi Container Apps Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action
Operator zadań dla Container Apps Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action

Następujące role umożliwiają dostęp do wartości sekretów skonfigurowanych dla komponentów Dapr:

Rola wbudowana Odpowiednie uprawnienia w definicji roli Operacja dopasowywania tajnych danych
Współautor usługi Container Apps ManagedEnvironments Microsoft.App/managedEnvironments/*/action Microsoft.App/managedEnvironments/daprComponents/listSecrets/action
Współautor usługi Container Apps ConnectedEnvironments Microsoft.App/connectedEnvironments/*, Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action

Efektywny dostęp zależy od zakresu przydziału ról. Na przykład przypisanie na poziomie grupy zasobów przyznaje odpowiednie uprawnienie do każdego zasobu w tej grupie zasobów, którego to dotyczy.

Important

Opisy ról operatora usługi Container Apps i operatora zadań usługi Container Apps podkreślają zadania operacyjne. Jednak ich akcje wieloznaczne przyznają również uprawnienie do wyświetlania listy sekretów. Przejrzyj pełną listę uprawnień dla roli, zanim ją przydzielisz.

Stwórz niestandardową rolę z węższymi uprawnieniami

Wbudowane role to wygoda, a nie ograniczenie. Jeśli żadna wbudowana rola nie odpowiada poziomowi dostępu, który chcesz przyznać, zdefiniuj niestandardową rolę Azure, która wymienia tylko potrzebne operacje i pominie listSecrets tę akcję.

Na przykład poniższa rola niestandardowa umożliwia użytkownikowi wyświetlanie zadań i uruchomień oraz zatrzymywanie uruchomień będących w toku, bez przyznawania akcji listSecrets:

{
  "Name": "Container Apps Jobs Execution Stopper",
  "IsCustom": true,
  "Description": "View Container Apps jobs and stop running executions.",
  "Actions": [
    "Microsoft.App/jobs/read",
    "Microsoft.App/jobs/executions/read",
    "Microsoft.App/jobs/execution/read",
    "Microsoft.App/jobs/stop/action",
    "Microsoft.App/jobs/stop/execution/action",
    "Microsoft.App/managedEnvironments/read"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/<SUBSCRIPTION_ID>"
  ]
}

Unikaj używania znaków wieloznacznych, takich jak Microsoft.App/jobs/*/action, w niestandardowej definicji roli. Ten symbol wieloznaczny obejmuje wszystkie obecne i przyszłe operacje pasujące do wzorca, w tym listSecrets.

Warning

W przypadku zadań Container Apps pominięcie listSecrets tej akcji w roli niestandardowej nie wystarczy, by chronić wartości sekretów, jeśli rola również przyznaje Microsoft.App/jobs/start/action. Interfejs API REST Jobs - Start akceptuje opcjonalny szablon uruchomienia, który może zastąpić obrazy głównego kontenera i kontenera init, polecenia oraz zmienne środowiskowe. Użytkownik, który potrafi rozpocząć zadanie i zna nazwę sekretu, może odwołać się do tego sekretu z wybranego przez siebie kontenera i odczytać jego wartość wewnątrz kontenera. Kontener może również korzystać z dowolnej zarządzanej tożsamości skonfigurowanej tak, aby była dla niego dostępna. Należy traktować uprawnienie do uruchomienia zadania jako uprawnienie do korzystania z sekretów zadania i dostępnych zarządzanych tożsamości.

Aby uzyskać więcej informacji, zobacz Role niestandardowe platformy Azure.

Definiowanie sekretów

Tajemnice 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 Azure Key Vault.

Uwaga

Unikaj podawania wartości sekretu bezpośrednio w środowisku produkcji. Zamiast tego użyj odwołania do tajemnicy przechowywanej w Azure Key Vault, zgodnie z opisem w sekcji Przechowywanie wartości tajemnicy w sekcji Aplikacje kontenerowe.

Przechowaj tajną wartość w Container Apps

Używane jest poniższe, gdy definiujesz sekrety przez portal lub korzystając z różnych opcji wiersza polecenia.

  1. Przejdź do aplikacji kontenera w portalu Azure.

  2. W sekcji Zabezpieczenia wybierz pozycję Wpisy tajne.

  3. Wybierz Dodaj.

  4. W okienku Dodaj sekret wprowadź następujące informacje:

    • Nazwa: Nazwa sekretu.
    • Typ: wybierz Sekret aplikacji kontenera.
    • Wartość: wartość tajemnicy.
  5. Wybierz Dodaj.

Odwołanie do sekretu z Key Vault

Podczas definiowania wpisu tajnego należy utworzyć odwołanie do wpisu tajnego przechowywanego w Azure Key Vault. Usługa Container Apps automatycznie pobiera wartość sekretu z Key Vault i czyni ją dostępną jako sekret w aplikacji kontenera.

Aby uzyskać dostęp do tajemnicy z Key Vault, musisz najpierw skonfigurować tożsamość zarządzaną w aplikacji kontenerowej i przyznać tej tożsamości dostęp do tajemnic w Key Vault.

Aby włączyć tożsamość zarządzaną w aplikacji kontenera, zobacz Tożsamości zarządzane.

Aby udzielić dostępu do tajemnic Key Vault, przyznaj rolę Azure RBAC Key Vault Secrets User tożsamości zarządzanej.

  1. Przejdź do aplikacji kontenera w portalu Azure.

  2. W sekcji Zabezpieczenia wybierz pozycję Tożsamość.

  3. Na zakładce przypisanej przez system ustaw stan na włączone.

Uwaga

Można również użyć tożsamości zarządzanej przypisanej przez użytkownika, która może być ponownie używana w wielu zasobach i utrwalana niezależnie od cyklu życia aplikacji. Aby z niego skorzystać, wybierz zakładkę Przypisane przez użytkownika i wybierz istniejącą tożsamość.

  1. Wybierz pozycję Zapisz , aby włączyć tożsamość zarządzaną przypisaną przez system.

  2. Zostanie wyświetlone okno podręczne z potwierdzeniem, że chcesz włączyć tożsamość zarządzaną przypisaną przez system i zarejestrować aplikację kontenera przy użyciu Microsoft Entra ID. Wybierz opcję Tak.

  3. W sekcji Zabezpieczenia wybierz pozycję Wpisy tajne.

  4. Wybierz Dodaj.

  5. W okienku Dodaj sekret wprowadź następujące informacje:

    • Nazwa: Nazwa sekretu.
    • Type: Wybierz odwołanie do Key Vault.
    • Key Vault tajny adres URL: identyfikator URI wpisu tajnego w Key Vault. Ten identyfikator URI ma następującą postać: https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
    • Tożsamość: wybierz opcję Przypisane przez system.
  6. Wybierz Dodaj.

Uwaga

Jeśli używasz UDR z Azure Firewall, należy dodać tag usługi AzureKeyVault oraz FQDN login.microsoft.com do listy dozwolonych w zaporze. Zapoznaj się z konfigurowaniem UDR przy użyciu Azure Firewall, aby zdecydować, które dodatkowe tagi usługi są potrzebne.

Key Vault tajny identyfikator URI i rotacja wpisów tajnych

Identyfikator URI tajemnicy 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 sekretu.
  • https://myvault.vault.azure.net/secrets/mysecret: odwołać się do najnowszej wersji sekretu.

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 bieżące poprawki odwołujące się do tajemnicy w zmiennej środowiskowej są automatycznie ponownie uruchamiane, aby pobrać nową wartość.

Aby uzyskać ścisłą kontrolę nad wersją tajemnicy, określ wersję w identyfikatorze URI.

Odwoływanie się do tajnych danych w zmiennych środowiskowych

Po zadeklarowaniu tajnych danych na poziomie aplikacji zgodnie z opisem w sekcji definiowania tajnych danych, można odwoływać się do nich w zmiennych środowiskowych podczas tworzenia nowej wersji w aplikacji kontenerowej. 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 sekretu w aplikacji kontenera można odwoływać się do niego w zmiennej środowiskowej podczas tworzenia nowej poprawki.

  1. Przejdź do aplikacji kontenera w portalu Azure.

  2. W sekcji Aplikacja wybierz pozycję Poprawki i repliki.

  3. Na stronie Poprawki i repliki wybierz pozycję Utwórz nową poprawkę.

  4. Na stronie Tworzenie i wdrażanie nowej poprawki na karcie Kontener w sekcji Obraz kontenera wybierz kontener.

  5. Zaznacz Edytuj.

  6. W okienku Edytowanie kontekstu kontenera wybierz kartę Zmienne środowiskowe .

  7. Wybierz Dodaj.

  8. Wprowadź następujące informacje:

    • Nazwa: nazwa zmiennej środowiskowej.
    • Źródło: Wybierz Odwołaj się do sekretu.
    • Wartość: wybierz zdefiniowany wcześniej sekret.
  9. Wybierz pozycję Zapisz.

  10. Na stronie Tworzenie i wdrażanie nowej poprawki wybierz pozycję Utwórz, aby utworzyć nową poprawkę.

Instalowanie sekretów w woluminie

Po zadeklarowaniu wpisów tajnych na poziomie aplikacji zgodnie z opisem w sekcji Definiowanie wpisów tajnych można odwoływać się do nich w punktach montażu woluminów podczas tworzenia nowej poprawki w aplikacji kontenera. Podczas umieszczania sekretów w woluminie każdy sekret jest umieszczany jako plik w woluminie. Nazwa pliku jest nazwą wpisu tajnego, a zawartość pliku jest wartością wpisu tajnego. Możesz załadować wszystkie tajne dane w punkcie montowania woluminu lub załadować określone tajne dane.

Przykład

Po zdefiniowaniu tajemnicy w aplikacji kontenera, można się do niej odwoływać podczas montażu woluminu, kiedy tworzysz nową rewizję.

  1. Przejdź do aplikacji kontenera w portalu Azure.

  2. W sekcji Aplikacja wybierz pozycję Poprawki i repliki.

  3. Na stronie Poprawki i repliki wybierz pozycję Utwórz nową poprawkę.

  4. Na stronie Tworzenie i wdrażanie nowej poprawki na karcie Kontener w sekcji Obraz kontenera wybierz kontener.

  5. Zaznacz Edytuj.

  6. W okienku Edytowanie kontenera wybierz kartę Montowanie woluminów .

  7. Wybierz pozycję Utwórz nowy wolumin.

  8. W okienku kontekstowym Dodaj wolumin wprowadź następujące informacje:

    • Typ woluminu: wybierz pozycję Secret.
    • Nazwa: mysecrets
    • Zamontuj wszystkie sekrety: włączone

    Uwaga

    Jeśli chcesz załadować określone tajemnice, wyłącz opcję Zamontuj wszystkie tajemnice i wybierz tajemnice, które chcesz załadować.

  9. Wybierz Dodaj.

  10. W okienku Edytowanie kontekstu kontenera w obszarze Nazwa woluminu wybierz pozycję mysecrets.

  11. W obszarze Ścieżka montowania wprowadź /mnt/secrets.

  12. Wybierz pozycję Zapisz.

  13. Na stronie Tworzenie i wdrażanie nowej rewizji wybierz pozycję Utwórz, aby utworzyć nową rewizję z montowaniem woluminu.

Rozwiązywanie problemów z referencjami do Key Vault

Jeśli odwołujesz się do wpisów tajnych z Azure Key Vault, mogą wystąpić problemy podczas pobierania lub synchronizacji wpisów tajnych. Poniżej przedstawiono typowe błędy i rozwiązania:

Błąd Przyczyna Resolution
Tożsamość zarządzana nie jest włączona Aplikacja kontenera nie ma przypisanej tożsamości zarządzanej. Włącz zarządzaną tożsamość przypisaną przez system lub użytkownika w swojej aplikacji kontenerowej. Zobacz Tożsamości zarządzane.
Nie znaleziono tożsamości Określona tożsamość zarządzana nie istnieje lub nie jest przypisana do aplikacji kontenera. Sprawdź, czy tożsamość została utworzona i przypisana do aplikacji kontenera w sekcji Tożsamość .
Sekret wyłączony w Key Vault Tajemnica jest wyłączona w zasobie Key Vault. Przejdź do Key Vault w portalu Azure i włącz sekret.
Uwierzytelnianie nie powiodło się Tożsamość zarządzana nie ma wymaganych uprawnień do odczytania sekretu. Nadaj tożsamości zarządzanej rolę Użytkownika Sekretów Key Vault na Key Vault. Zobacz Key Vault Secrets User.
Odmowa uprawnień RBAC Tożsamość zarządzana ma niewystarczające uprawnienia dostępu do Key Vault. Sprawdź przypisanie roli RBAC na Key Vault i upewnij się, że zawiera uprawnienia do odczytu dla wpisów tajnych.

Następne kroki