Aplikacja zarządzana platformy Azure z tożsamością zarządzaną

Uwaga

Obsługa tożsamości zarządzanej dla aplikacji zarządzanych platformy Azure jest obecnie dostępna w wersji zapoznawczej. Aby korzystać z tożsamości zarządzanej, użyj wersji interfejsu API 2018-09-01-preview.

Dowiedz się, jak skonfigurować aplikację zarządzaną tak, aby zawierała tożsamość zarządzaną. Tożsamość zarządzana może służyć do umożliwienia klientowi udzielenia aplikacji zarządzanej dostępu do istniejących zasobów. Platforma Azure zarządza tożsamością i nie wymaga aprowizacji ani rotacji wpisów tajnych. 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.

Aplikacja może mieć korzystać z dwóch typów tożsamości:

  • Tożsamość zarządzana przypisana przez system jest powiązana z aplikacją i jest usuwana, jeśli aplikacja zostanie usunięta. Aplikacja może mieć tylko jedną tożsamość zarządzaną przypisaną przez system.
  • Tożsamość zarządzana przypisana przez użytkownika to autonomiczny zasób platformy Azure, który można przypisać do aplikacji. Aplikacja może mieć wiele tożsamości zarządzanych przypisanych przez użytkownika.

Jak używać tożsamości zarządzanej

Tożsamość zarządzana umożliwia korzystanie z wielu scenariuszy dla aplikacji zarządzanych. Oto niektóre typowe scenariusze, które można rozwiązać:

  • Wdrażanie aplikacji zarządzanej połączonej z istniejącymi zasobami platformy Azure. Przykładem jest wdrożenie maszyny wirtualnej platformy Azure w aplikacji zarządzanej dołączonej do istniejącego interfejsu sieciowego.
  • Udzielanie aplikacji zarządzanej i wydawcy dostępu do zasobów platformy Azure poza zarządzaną grupą zasobów.
  • Zapewnianie tożsamości operacyjnej aplikacji zarządzanych dla dziennika aktywności i innych usług na platformie Azure.

Dodawanie tożsamości zarządzanej

Utworzenie aplikacji zarządzanej z tożsamością zarządzaną wymaga ustawienia innej właściwości na zasobie platformy Azure. W poniższym przykładzie przedstawiono przykładową właściwość tożsamości :

{
  "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
    }
  }
}

Istnieją dwa typowe sposoby tworzenia aplikacji zarządzanej za pomocą identitypolecenia : createUiDefinition.json i szablonów usługi Azure Resource Manager. W przypadku prostych scenariuszy tworzenia pojedynczego należy użyć metody createUiDefinition w celu włączenia tożsamości zarządzanej, ponieważ zapewnia ona bogatsze środowisko. Jednak w przypadku obsługi zaawansowanych lub złożonych systemów, które wymagają zautomatyzowanych lub wielu wdrożeń aplikacji zarządzanych, można używać szablonów.

Korzystanie z metody createUiDefinition

Aplikację zarządzaną można skonfigurować przy użyciu tożsamości zarządzanej za pomocą pliku createUiDefinition.json. W sekcji dane wyjściowe klucz managedIdentity może służyć do zastąpienia właściwości tożsamości szablonu aplikacji zarządzanej. Poniższy przykład umożliwia przypisaną przez system tożsamość zarządzaną w aplikacji zarządzanej. Bardziej złożone obiekty tożsamości można tworzyć przy użyciu elementów createUiDefinition , aby poprosić użytkownika o dane wejściowe. Te dane wejściowe mogą służyć do konstruowania aplikacji zarządzanych przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.

"outputs": {
  "managedIdentity": { "Type": "SystemAssigned" }
}

Kiedy należy używać metody createUiDefinition dla tożsamości zarządzanej

Poniżej przedstawiono kilka zaleceń dotyczących sposobu używania metody createUiDefinition w celu włączenia tożsamości zarządzanej w aplikacjach zarządzanych.

  • Tworzenie aplikacji zarządzanej odbywa się za pośrednictwem witryny Azure Portal lub witryny Azure Marketplace.
  • Tożsamość zarządzana wymaga złożonych danych wejściowych użytkownika.
  • Tożsamość zarządzana jest wymagana podczas tworzenia aplikacji zarządzanej.

Tożsamość zarządzana createUiDefinition, kontrolka

Plik createUiDefinition.json obsługuje wbudowaną kontrolkę tożsamości zarządzanej.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [],
    "steps": [
      {
        "name": "applicationSettings",
        "label": "Application Settings",
        "subLabel": {
          "preValidation": "Configure your application settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Application Settings",
        "elements": [
          {
            "name": "appName",
            "type": "Microsoft.Common.TextBox",
            "label": "Managed application Name",
            "toolTip": "Managed application instance name",
            "visible": true
          },
          {
            "name": "appIdentity",
            "type": "Microsoft.ManagedIdentity.IdentitySelector",
            "label": "Managed Identity Configuration",
            "toolTip": {
              "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
              "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
            },
            "defaultValue": {
              "systemAssignedIdentity": "Off"
            },
            "options": {
              "hideSystemAssignedIdentity": false,
              "hideUserAssignedIdentity": false,
              "readOnlySystemAssignedIdentity": false
            },
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "applicationResourceName": "[steps('applicationSettings').appName]",
      "location": "[location()]",
      "managedIdentity": "[steps('applicationSettings').appIdentity]"
    }
  }
}

Screenshot of the application settings for system-assigned managed identity and user-assigned managed identity

Korzystanie z szablonów usługi Azure Resource Manager

Uwaga

Szablony aplikacji zarządzanych w witrynie Marketplace są generowane automatycznie dla klientów przechodzących przez środowisko tworzenia witryny Azure Portal. W przypadku tych scenariuszy managedIdentity klucz wyjściowy metody createUiDefinition musi być używany do obsługi tożsamości.

Tożsamość zarządzana można również włączyć za pomocą szablonów usługi Azure Resource Manager. Poniższy przykład umożliwia przypisaną przez system tożsamość zarządzaną w aplikacji zarządzanej. Bardziej złożone obiekty tożsamości można tworzyć przy użyciu parametrów szablonu usługi Azure Resource Manager w celu zapewnienia danych wejściowych. Te dane wejściowe mogą służyć do konstruowania aplikacji zarządzanych przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.

Kiedy używać szablonów usługi Azure Resource Manager do obsługi tożsamości zarządzanej

Poniżej przedstawiono kilka zaleceń dotyczących tego, kiedy używać szablonów usługi Azure Resource Manager do włączania tożsamości zarządzanej w aplikacjach zarządzanych.

  • Aplikacje zarządzane można wdrażać programowo na podstawie szablonu.
  • Do aprowizacji aplikacji zarządzanej są wymagane przypisania ról niestandardowych dla tożsamości zarządzanej.
  • Aplikacja zarządzana nie wymaga przepływu tworzenia witryny Azure Portal i witryny Marketplace.

Szablon SystemAssigned

Podstawowy szablon usługi Azure Resource Manager, który wdraża aplikację zarządzaną z przypisaną przez system tożsamością zarządzaną.

"resources": [
  {
    "type": "Microsoft.Solutions/applications",
    "name": "[parameters('applicationName')]",
    "apiVersion": "2018-09-01-preview",
    "location": "[parameters('location')]",
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
        "parameters": { }
    }
  }
]

Szablon UserAssigned

Podstawowy szablon usługi Azure Resource Manager, który wdraża aplikację zarządzaną z tożsamością zarządzaną przypisaną przez użytkownika.

"resources": [
  {
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
    "name": "[parameters('managedIdentityName')]",
    "apiVersion": "2018-11-30",
    "location": "[parameters('location')]"
  },
  {
    "type": "Microsoft.Solutions/applications",
    "name": "[parameters('applicationName')]",
    "apiVersion": "2018-09-01-preview",
    "location": "[parameters('location')]",
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('managedIdentityName'))]": {}
        }
    },
    "properties": {
        "ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
        "parameters": { }
    }
  }
]

Udzielanie dostępu do zasobów platformy Azure

Po udzieleniu tożsamości aplikacji zarządzanej można jej udzielić dostępu do istniejących zasobów platformy Azure, tworząc przypisanie roli.

W tym celu wyszukaj i wybierz nazwę aplikacji zarządzanej lub tożsamości zarządzanej przypisanej przez użytkownika, a następnie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami). Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Łączenie istniejących zasobów platformy Azure

Uwaga

Przed wdrożeniem aplikacji zarządzanej należy skonfigurować tożsamość zarządzaną przypisaną przez użytkownika. Ponadto połączone wdrażanie zasobów aplikacji zarządzanych jest obsługiwane tylko w przypadku rodzaju witryny Marketplace .

Tożsamość zarządzana może również służyć do wdrażania aplikacji zarządzanej, która wymaga dostępu do istniejących zasobów podczas wdrażania. Gdy klient aprowizuje aplikację zarządzaną, tożsamości zarządzane przypisane przez użytkownika można dodać, aby zapewnić więcej autoryzacji do wdrożenia mainTemplate .

Tworzenie elementu createUiDefinition za pomocą połączonego zasobu

Po połączeniu wdrożenia aplikacji zarządzanej z istniejącymi zasobami należy podać zarówno istniejący zasób platformy Azure, jak i tożsamość zarządzaną przypisaną przez użytkownika z odpowiednim przypisaniem roli dla tego zasobu.

Przykładowy plik createUiDefinition.json , który wymaga dwóch danych wejściowych: identyfikator zasobu interfejsu sieciowego i identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {}
    ],
    "steps": [
      {
        "name": "managedApplicationSetting",
        "label": "Managed Application Settings",
        "subLabel": {
          "preValidation": "Managed Application Settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Managed Application Settings",
        "elements": [
          {
            "name": "networkInterfaceId",
            "type": "Microsoft.Common.TextBox",
            "label": "Network interface resource ID",
            "defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.Network/networkInterfaces/existingnetworkinterface",
            "toolTip": "Must represent the identity as an Azure Resource Manager resource identifer format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.Network/networkInterfaces/networkinterface1",
            "visible": true
          },
          {
            "name": "userAssignedId",
            "type": "Microsoft.Common.TextBox",
            "label": "User-assigned managed identity resource ID",
            "defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity",
            "toolTip": "Must represent the identity as an Azure Resource Manager resource identifer format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity1",
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "existingNetworkInterfaceId": "[steps('managedApplicationSetting').networkInterfaceId]",
      "managedIdentity": "[parse(concat('{\"Type\":\"UserAssigned\",\"UserAssignedIdentities\":{',string(steps('managedApplicationSetting').userAssignedId),':{}}}'))]"
    }
  }
}

Ten plik createUiDefinition.json generuje środowisko użytkownika, które ma dwa pola. Pierwsze pole umożliwia użytkownikowi wprowadzenie identyfikatora zasobu platformy Azure dla zasobu połączonego z wdrożeniem aplikacji zarządzanej. Drugi to wprowadzenie tożsamości zarządzanej przypisanej przez użytkownika identyfikatora zasobu platformy Azure, która ma dostęp do połączonego zasobu platformy Azure. Wygenerowane środowisko wygląda następująco:

Screenshot of a sample createUiDefinition.json with two inputs: a network interface resource ID and a user-assigned managed identity resource ID.

Tworzenie zasobu mainTemplate za pomocą połączonego zasobu

Oprócz zaktualizowania szablonu createUiDefinition należy również zaktualizować szablon główny, aby akceptował przekazany identyfikator zasobu połączonego. Szablon główny można zaktualizować w celu zaakceptowania nowych danych wyjściowych przez dodanie nowego parametru. managedIdentity Ponieważ dane wyjściowe zastępują wartość wygenerowanego szablonu aplikacji zarządzanej, nie są przekazywane do głównego szablonu i nie powinny być uwzględniane w sekcji parametrów.

Przykładowy szablon główny, który ustawia profil sieciowy na istniejący interfejs sieciowy dostarczony przez plik createUiDefinition.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "existingNetworkInterfaceId": { "type": "string" }
  },
  "variables": {
  },
  "resources": [
    {
      "apiVersion": "2016-04-30-preview",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "myLinkedResourceVM",
      "location": "[resourceGroup().location]",
      "properties": {
        …,
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[parameters('existingNetworkInterfaceId')]"
            }
          ]
        }
      }
    }
  ]
}

Korzystanie z aplikacji zarządzanej z połączonym zasobem

Po utworzeniu pakietu aplikacji zarządzanej aplikację zarządzaną można używać za pośrednictwem witryny Azure Portal. Zanim będzie można go użyć, należy wykonać kilka kroków wymagań wstępnych.

  • Należy utworzyć wystąpienie wymaganego połączonego zasobu platformy Azure.
  • Tożsamość zarządzana przypisana przez użytkownika musi zostać utworzona i nadana przypisaniom ról do połączonego zasobu.
  • Istniejący połączony identyfikator zasobu i identyfikator tożsamości zarządzanej przypisanej przez użytkownika są dostarczane do elementu createUiDefinition.

Uzyskiwanie dostępu do tokenu tożsamości zarządzanej

Token aplikacji zarządzanej można teraz uzyskać za pośrednictwem interfejsu listTokens API z dzierżawy wydawcy. Przykładowe żądanie może wyglądać następująco:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}/listTokens?api-version=2018-09-01-preview HTTP/1.1

{
  "authorizationAudience": "https://management.azure.com/",
  "userAssignedIdentities": [
      "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userAssignedIdentityName}"
  ]
}

Parametry treści żądania:

Parametr Wymagania opis
authorizationAudience Nr Identyfikator URI identyfikatora aplikacji zasobu docelowego. Jest to również aud (odbiorcy) oświadczenie wystawionego tokenu. Wartość domyślna to "https://management.azure.com/"
userAssignedIdentities Nr Lista tożsamości zarządzanych przypisanych przez użytkownika do pobrania tokenu. Jeśli nie zostanie określony, listTokens zwraca token tożsamości zarządzanej przypisanej przez system.

Przykładowa odpowiedź może wyglądać następująco:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "value": [
    {
      "access_token": "eyJ0eXAi…",
      "expires_in": "2…",
      "expires_on": "1557…",
      "not_before": "1557…",
      "authorizationAudience": "https://management.azure.com/",
      "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}",
      "token_type": "Bearer"
    }
  ]
}

Odpowiedź zawiera tablicę tokenów w value ramach właściwości :

Parametr Opis
access_token Żądany token dostępu.
expires_in Liczba sekund, przez które token dostępu jest prawidłowy.
expires_on Przedział czasu wygaśnięcia tokenu dostępu. Ta wartość jest reprezentowana jako liczba sekund z epoki.
not_before Przedział czasu, kiedy token dostępu ma obowiązywać. Ta wartość jest reprezentowana jako liczba sekund z epoki.
authorizationAudience Żądano aud tokenu dostępu (odbiorcy). Ta wartość jest taka sama jak wartość podana w żądaniu listTokens .
resourceId Identyfikator zasobu platformy Azure dla wystawionego tokenu. Ta wartość to identyfikator aplikacji zarządzanej lub identyfikator tożsamości zarządzanej przypisanej przez użytkownika.
token_type Typ tokenu.

Następne kroki