Udostępnij przez


Tożsamości zarządzane w usłudze Azure Container Apps

Tożsamość zarządzana z identyfikatora Entra firmy Microsoft umożliwia aplikacji kontenera dostęp do innych chronionych zasobów firmy Microsoft. Aby uzyskać więcej informacji na temat tożsamości zarządzanych w usłudze Microsoft Entra ID, zobacz Tożsamości zarządzane dla zasobów platformy Azure.

Można przyznać aplikacji kontenera dwa typy tożsamości.

  • Tożsamość przypisana przez system jest powiązana z aplikacją kontenera i jest usuwana po usunięciu aplikacji kontenera. Aplikacja może mieć tylko jedną tożsamość przypisaną przez system.
  • Tożsamość przypisana przez użytkownika to autonomiczny zasób platformy Azure, który można przypisać do aplikacji kontenera i innych zasobów. Aplikacja kontenera może mieć wiele tożsamości przypisanych przez użytkownika. Tożsamości przypisane przez użytkownika istnieją do momentu ich usunięcia.

Dlaczego warto używać tożsamości zarządzanej?

Możesz użyć tożsamości zarządzanej w uruchomionej aplikacji kontenera do uwierzytelniania w dowolnej usłudze obsługującej uwierzytelnianie Microsoft Entra.

Za pomocą tożsamości zarządzanych:

  • Aplikacja łączy się z zasobami przy użyciu tożsamości zarządzanej. Nie musisz zarządzać poświadczeniami w aplikacji kontenera.
  • Możesz użyć kontroli dostępu opartej na rolach, aby udzielić określonych uprawnień tożsamości zarządzanej.
  • Tożsamości przypisane przez system są tworzone automatycznie i zarządzane. Są one usuwane po usunięciu aplikacji kontenera.
  • Możesz dodawać i usuwać tożsamości przypisane przez użytkownika i przypisywać je do wielu zasobów. Są one niezależne od cyklu życia aplikacji kontenera.
  • Możesz użyć tożsamości zarządzanej, aby uwierzytelniać się z prywatnym rejestrem Azure Container Registry bez nazwy użytkownika i hasła, aby pobrać kontenery dla swojej aplikacji kontenerowej.
  • Tożsamość zarządzana umożliwia tworzenie połączeń dla aplikacji z obsługą języka Dapr za pośrednictwem składników języka Dapr

Typowe przypadki użycia

Tożsamości przypisane przez system są najlepsze dla obciążeń, które:

  • znajdują się w jednym zasobie
  • potrzebują niezależnych tożsamości

Tożsamości przypisane przez użytkownika doskonale nadają się do obciążeń, które:

  • działanie na wielu zasobach i może dzielić jedną tożsamość
  • potrzebna wstępna autoryzacja do bezpiecznego zasobu

Ograniczenia

Kontenery inicjujące nie mogą uzyskiwać dostępu do tożsamości zarządzanych w środowiskach konsumpcyjnych i środowiskach z dedykowanym profilem obciążenia

Konfigurowanie tożsamości zarządzanych

Tożsamości zarządzane można skonfigurować za pomocą:

  • Azure Portal
  • Azure CLI
  • Twój szablon usługi Azure Resource Manager (ARM)

Gdy tożsamość zarządzana zostanie dodana, usunięta lub zmodyfikowana w uruchomionej aplikacji kontenera, aplikacja nie zostanie automatycznie uruchomiona ponownie i nie zostanie utworzona nowa poprawka.

Uwaga

Podczas dodawania tożsamości zarządzanej do aplikacji kontenera wdrożonej przed 11 kwietnia 2022 r. należy utworzyć nową poprawkę.

Dodawanie tożsamości przypisanej przez system

  1. Przejdź do aplikacji kontenera w witrynie Azure Portal.

  2. W grupie Ustawienia wybierz pozycję Tożsamość.

  3. Na karcie Przypisane przez system przełącz Stan na Włączone.

  4. Wybierz pozycję Zapisz.

Zrzut ekranu przedstawiający tożsamości przypisane przez system.

Dodawanie tożsamości przypisanej przez użytkownika

Skonfigurowanie aplikacji kontenera przy użyciu tożsamości przypisanej przez użytkownika wymaga, aby najpierw utworzyć tożsamość, a następnie dodać jej identyfikator zasobu do konfiguracji aplikacji kontenera. Tożsamości przypisane przez użytkownika można tworzyć za pośrednictwem witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Aby uzyskać informacje na temat tworzenia tożsamości przypisanych przez użytkownika i zarządzania nimi, zobacz Zarządzanie tożsamościami zarządzanymi przypisanymi przez użytkownika.

Najpierw należy utworzyć zasób tożsamości przypisanej przez użytkownika.

  1. Utwórz zasób tożsamości zarządzanej przypisanej przez użytkownika zgodnie z instrukcjami opisanymi w temacie Zarządzanie tożsamościami zarządzanymi przypisanymi przez użytkownika.

  2. Przejdź do aplikacji kontenera w witrynie Azure Portal.

  3. W grupie Ustawienia wybierz pozycję Tożsamość.

  4. Na karcie Przypisane użytkownikowi wybierz pozycję Dodaj.

  5. Wyszukaj i wybierz utworzoną wcześniej tożsamość.

  6. Wybierz Dodaj.

Zrzut ekranu przedstawiający tożsamości przypisane przez użytkownika.

Konfigurowanie zasobu docelowego

W przypadku niektórych zasobów należy skonfigurować przypisania ról dla tożsamości zarządzanej aplikacji w celu udzielenia dostępu. W przeciwnym razie wywołania z aplikacji do usług, takich jak Azure Key Vault i Azure SQL Database, są odrzucane nawet wtedy, gdy używasz prawidłowego tokenu dla tej tożsamości. Aby dowiedzieć się więcej na temat kontroli dostępu opartej na rolach (RBAC) platformy Azure, zobacz Co to jest kontrola dostępu oparta na rolach?. Aby dowiedzieć się więcej o zasobach obsługujących tokeny firmy Microsoft Entra, zobacz Usługi platformy Azure, które obsługują uwierzytelnianie Firmy Microsoft Entra.

Ważne

Usługi zaplecza dla tożsamości zarządzanych utrzymują pamięć podręczną na identyfikator URI zasobu przez około 24 godziny. Jeśli zaktualizujesz zasady dostępu określonego zasobu docelowego i natychmiast pobierzesz token dla tego zasobu, możesz nadal uzyskać buforowany token z nieaktualnymi uprawnieniami do momentu wygaśnięcia tego tokenu. Wymuszanie odświeżania tokenu nie jest obsługiwane.

Nawiązywanie połączenia z usługami platformy Azure w kodzie aplikacji

Dzięki tożsamościom zarządzanym aplikacja może uzyskiwać tokeny umożliwiające dostęp do zasobów platformy Azure korzystających z identyfikatora Entra firmy Microsoft, takich jak Azure SQL Database, Azure Key Vault i Azure Storage. Te tokeny reprezentują aplikację, która uzyskuje dostęp do zasobu, a nie żadnego konkretnego użytkownika aplikacji.

Usługa Container Apps udostępnia wewnętrznie dostępny punkt końcowy REST do pobierania tokenów. Punkt końcowy REST jest dostępny z poziomu aplikacji ze standardowym żądaniem HTTP, które można wysłać za pomocą ogólnego klienta HTTP GET w preferowanym języku. W przypadku platform .NET, JavaScript, Java i Python biblioteka klienta tożsamości platformy Azure zapewnia abstrakcję dla tego punktu końcowego REST. Możesz nawiązać połączenie z innymi usługami platformy Azure, dodając obiekt poświadczeń do klienta specyficznego dla usługi.

Uwaga

W przypadku korzystania z biblioteki klienta tożsamości platformy Azure należy jawnie określić identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.

Uwaga

Podczas nawiązywania połączenia ze źródłami danych usługi Azure SQL przy użyciu programu Entity Framework Core rozważ użycie elementu Microsoft.Data.SqlClient, który zapewnia specjalne parametry połączenia na potrzeby łączności tożsamości zarządzanej.

W przypadku aplikacji platformy .NET najprostszym sposobem pracy z tożsamością zarządzaną jest użycie biblioteki klienta tożsamości platformy Azure dla platformy .NET. Aby uzyskać więcej informacji, zapoznaj się z następującymi zasobami:

W powiązanych przykładach użyto DefaultAzureCredential. Ten obiekt jest skuteczny w większości scenariuszy, ponieważ ten sam wzorzec działa na platformie Azure (z tożsamościami zarządzanymi) i na komputerze lokalnym (bez tożsamości zarządzanych).

Używanie tożsamości zarządzanej dla reguł skalowania

Możesz używać tożsamości zarządzanych w regułach skalowania do uwierzytelniania w usługach platformy Azure obsługujących tożsamości zarządzane. Aby użyć tożsamości zarządzanej w regule skalowania, skorzystaj z identity zamiast auth w tej regule. Dopuszczalne wartości dla właściwości identity to identyfikator zasobu Azure tożsamości przypisanej przez użytkownika albo system oznaczające użycie tożsamości przypisanej przez system.

W poniższym przykładzie szablonu usługi ARM pokazano, jak używać tożsamości zarządzanej z regułą skalowania usługi Azure Queue Storage:

Konto magazynu kolejek używa właściwości accountName do identyfikacji konta magazynu, podczas gdy właściwość identity określa, która tożsamość zarządzana powinna być użyta. Nie trzeba używać auth właściwości .

"scale": {
    "minReplicas": 1,
    "maxReplicas": 10,
    "rules": [{
        "name": "myQueueRule",
        "azureQueue": {
            "accountName": "mystorageaccount",
            "queueName": "myqueue",
            "queueLength": 2,
            "identity": "<IDENTITY1_RESOURCE_ID>"
        }
    }]
}

Aby dowiedzieć się więcej na temat używania tożsamości zarządzanej z regułami skalowania, zobacz Ustawianie reguł skalowania w usłudze Azure Container Apps.

Kontrolowanie dostępności tożsamości zarządzanej

Aplikacja Container Apps umożliwia określenie kontenerów inicjujących i kontenerów głównych. Domyślnie zarówno kontenery główne, jak i kontenery inicjalizacyjne w środowisku obciążeń opartych na konsumpcji mogą używać tożsamości zarządzanej do uzyskiwania dostępu do innych usług platformy Azure. W środowiskach tylko do użycia i dedykowanych środowiskach profilu obciążenia tylko główne kontenery mogą używać tożsamości zarządzanej. Tokeny dostępu tożsamości zarządzanej są dostępne dla każdej tożsamości zarządzanej skonfigurowanej w aplikacji kontenera. Jednak w niektórych sytuacjach tylko kontener init lub główny kontener wymagają tokenów dostępu dla tożsamości zarządzanej. Innym razem możesz użyć tożsamości zarządzanej tylko w celu uzyskania dostępu do usługi Azure Container Registry w celu ściągnięcia obrazu kontenera, a sama aplikacja nie musi mieć dostępu do usługi Azure Container Registry.

Począwszy od wersji 2024-02-02-preview interfejsu API, możesz kontrolować, które tożsamości zarządzane są dostępne dla aplikacji kontenera podczas faz inicjowania i działania, aby postępować zgodnie z zasadą minimalnych uprawnień. Dostępne są następujące opcje:

  • Init: dostępne tylko dla kontenerów inicjujących. Użyj tej funkcji, jeśli chcesz wykonać pewne zadania inicjowania, które wymagają tożsamości zarządzanej, ale nie potrzebujesz już tożsamości zarządzanej w głównym kontenerze. Ta opcja jest obecnie obsługiwana tylko w środowiskach użycia profilu obciążenia
  • Main: dostępne tylko dla głównych kontenerów. Użyj tej opcji, jeśli kontener init nie potrzebuje tożsamości zarządzanej.
  • All: dostępny dla wszystkich kontenerów. Ta wartość jest ustawieniem domyślnym.
  • None: niedostępne dla żadnych kontenerów. Użyj tej opcji, jeśli masz tożsamość zarządzaną, która jest używana tylko w przypadku ściągania obrazów usługi ACR, reguł skalowania lub wpisów tajnych usługi Key Vault i nie musi być dostępna dla kodu uruchomionego w kontenerach.

W poniższym przykładzie szablonu ARM pokazano, jak skonfigurować aplikację kontenerową w środowisku konsumpcji profilu obciążenia, które:

  • Ogranicza dostęp do tożsamości przypisanej przez system kontenerowej aplikacji tylko do głównych kontenerów.
  • Ogranicza tożsamość przypisaną przez użytkownika wyłącznie do kontenerów inicjujących.
  • Używa określonej tożsamości przypisanej przez użytkownika do ściągania obrazu usługi Azure Container Registry bez zezwalania kodowi w kontenerach na używanie tej tożsamości zarządzanej w celu uzyskania dostępu do rejestru. W tym przykładzie same kontenery nie muszą uzyskiwać dostępu do rejestru.

Takie podejście ogranicza zasoby, do których można uzyskać dostęp, jeśli złośliwy aktor miał uzyskać nieautoryzowany dostęp do kontenerów.

{
    "location": "eastus2",
    "identity":{
    "type": "SystemAssigned, UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>":{},
            "<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
         }
     },
    "properties": {
        "workloadProfileName":"Consumption",
        "environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
        "configuration": {
            "registries": [
            {
                "server": "myregistry.azurecr.io",
                "identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
            }],
            "identitySettings":[
            {
                "identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
                "lifecycle": "None"
            },
            {
                "identity": "<IDENTITY1_RESOURCE_ID>",
                "lifecycle": "Init"
            },
            {
                "identity": "system",
                "lifecycle": "Main"
            }]
        },
        "template": {
            "containers":[
                {
                    "image":"myregistry.azurecr.io/main:1.0",
                    "name":"app-main"
                }
            ],
            "initContainers":[
                {
                    "image":"myregistry.azurecr.io/init:1.0",
                    "name":"app-init",
                }
            ]
        }
    }
}

Wyświetlanie tożsamości zarządzanych

Możesz wyświetlić tożsamości zarządzane przypisane przez system i użytkownika za pomocą następującego polecenia Azure CLI. Dane wyjściowe przedstawiają typ zarządzanej tożsamości, identyfikatory dzierżawy i główne identyfikatory wszystkich zarządzanych tożsamości przypisanych do twojej aplikacji kontenerowej.

az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>

Usuń tożsamość zarządzaną

Po usunięciu tożsamości przypisanej przez system zostanie ona usunięta z identyfikatora Entra firmy Microsoft. Tożsamości przypisane przez system są również automatycznie usuwane z identyfikatora Entra firmy Microsoft po usunięciu samego zasobu aplikacji kontenera. Usunięcie zarządzanych tożsamości przypisanych przez użytkownika z aplikacji kontenerowej nie powoduje usunięcia ich z Microsoft Entra ID.

  1. W lewym obszarze nawigacyjnym strony aplikacji przewiń w dół do sekcji Ustawienia.

  2. Wybierz Tożsamość. Następnie wykonaj kroki na podstawie typu tożsamości:

    • Tożsamość przypisana przez system: na karcie Przypisane przez system zmień Stan na Wyłączone. Wybierz pozycję Zapisz.
    • Tożsamość przypisana przez użytkownika: wybierz zakładkę przypisana przez użytkownika, zaznacz pole wyboru tożsamości i wybierz Usuń. Wybierz Tak, aby potwierdzić.

Następne kroki