Udostępnij za pośrednictwem


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.

Aplikację kontenera można przyznać dwóm typom 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?

Tożsamość zarządzana w uruchomionej aplikacji kontenera umożliwia uwierzytelnianie w dowolnej usłudze obsługującej uwierzytelnianie firmy 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.
  • Tożsamość zarządzana umożliwia uwierzytelnianie za pomocą prywatnej usługi Azure Container Registry bez nazwy użytkownika i hasła w celu ściągnięcia kontenerów dla aplikacji kontenera.
  • 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 w przypadku obciążeń, które:

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

Tożsamości przypisane przez użytkownika są idealne dla obciążeń, które:

  • uruchamianie na wielu zasobach i może współużytkować jedną tożsamość
  • potrzebna wstępna autoryzacja do bezpiecznego zasobu

Ograniczenia

Kontenery inicjowania nie mogą uzyskiwać dostępu do tożsamości zarządzanych w środowiskach tylko do użycia i dedykowanych środowiskach profilu obciążenia

Konfigurowanie tożsamości zarządzanych

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

  • Azure Portal
  • interfejsu wiersza polecenia platformy Azure,
  • 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 pozycję 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 przez użytkownika 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 połączonych przykładach użyto polecenia 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

Począwszy od wersji 2024-02-02-previewinterfejsu API, można używać tożsamości zarządzanych w regułach skalowania do uwierzytelniania za pomocą usług platformy Azure obsługujących tożsamości zarządzane. Aby użyć tożsamości zarządzanej w regule skalowania, użyj identity właściwości zamiast auth właściwości w regule skalowania. Dopuszczalne wartości właściwości identity to identyfikator zasobu platformy Azure tożsamości przypisanej przez użytkownika lub system użycie tożsamości przypisanej przez system

W poniższym przykładzie pokazano, jak używać tożsamości zarządzanych z regułą skalowania usługi Azure Queue Storage. Konto magazynu kolejek używa accountName właściwości do identyfikowania konta magazynu, podczas gdy identity właściwość określa, która tożsamość zarządzana ma być używana. 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>"
        }
    }]
}

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

Usługa Container Apps umożliwia określanie kontenerów inicjowania i kontenerów głównych. Domyślnie zarówno kontenery główne, jak i init w środowisku profilu obciążenia zużycia 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-previewinterfejsu API, możesz kontrolować, które tożsamości zarządzane są dostępne dla aplikacji kontenera podczas inicjowania i głównych faz, aby postępować zgodnie z zasadą zabezpieczeń najniższych uprawnień. Dostępne są następujące opcje:

  • Init: dostępny tylko dla kontenerów init. Użyj tej funkcji, jeśli chcesz wykonać pewne zadania, 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ępny 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. Ustawienie domyślne.
  • None: nie jest dostępny 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 pokazano, jak skonfigurować aplikację kontenera w środowisku użycia profilu obciążenia, które:

  • Ogranicza tożsamość przypisaną przez system aplikacji kontenera tylko do głównych kontenerów.
  • Ogranicza tylko określoną tożsamość przypisaną przez użytkownika do kontenerów inicjowania.
  • 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

Tożsamości zarządzane przypisane przez system i przypisane przez użytkownika można wyświetlić przy użyciu następującego polecenia interfejsu wiersza polecenia platformy Azure. Dane wyjściowe przedstawiają typ tożsamości zarządzanej, identyfikatory dzierżawy i identyfikatory podmiotów zabezpieczeń wszystkich tożsamości zarządzanych przypisanych do aplikacji kontenera.

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

Usuwanie tożsamości zarządzanej

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 tożsamości zarządzanych przypisanych przez użytkownika z aplikacji kontenera nie powoduje usunięcia ich z identyfikatora Entra firmy Microsoft.

  1. W lewym obszarze nawigacyjnym strony aplikacji przewiń w dół do grupy 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 przełącz pozycję Stan na Wyłączone. Wybierz pozycję Zapisz.
    • Tożsamość przypisana przez użytkownika: wybierz kartę Przypisane przez użytkownika, zaznacz pole wyboru tożsamości i wybierz pozycję Usuń. Wybierz Tak, aby potwierdzić.

Następne kroki