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. Użyj wersji interfejsu API 2018-09-01-preview, aby korzystać z tożsamości zarządzanej.
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
}
Istnieją dwa typowe sposoby tworzenia aplikacji zarządzanej za pomocą identity
polecenia : 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 pośrednictwem 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
CreateUiDefinition.json obsługuje wbudowaną kontrolę 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]"
}
}
}
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 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.Network/networkInterfaces/existingnetworkinterface",
"toolTip": "Must represent the identity as an Azure Resource Manager resource identifier 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity",
"toolTip": "Must represent the identity as an Azure Resource Manager resource identifier 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 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:
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 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 |
Nie | 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 |
Nie | 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. |