Azure-hanterat program med hanterad identitet
Anteckning
Stöd för hanterad identitet för hanterade program är för närvarande i förhandsversion. Använd API-versionen 2018-09-01-preview för att använda hanterad identitet.
Lär dig hur du konfigurerar ett hanterat program så att det innehåller en hanterad identitet. Hanterad identitet kan användas för att ge kunden möjlighet att ge det hanterade programmet åtkomst till ytterligare befintliga resurser. Identiteten hanteras av Azure-plattformen och kräver inte att du etablerar eller roterar några hemligheter. Mer information om hanterade identiteter i Azure Active Directory (AAD) finns i Hanterade identiteter för Azure-resurser.
Programmet kan beviljas två typer av identiteter:
- En system tilldelad identitet är kopplad till ditt program och tas bort om din app tas bort. En app kan bara ha en system tilldelad identitet.
- En användar tilldelad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användar tilldelade identiteter.
Använda hanterad identitet
Hanterad identitet möjliggör många scenarier för hanterade program. Några vanliga scenarier som kan lösas är:
- Distribuera ett hanterat program som är länkat till befintliga Azure-resurser. Ett exempel är att distribuera en virtuell Azure-dator (VM) i det hanterade programmet som är kopplat till ett befintligt nätverksgränssnitt.
- Bevilja det hanterade programmet och utgivaren åtkomst till Azure-resurser utanför den hanterade resursgruppen.
- Tillhandahålla en driftsidentitet för hanterade program för aktivitetsloggen och andra tjänster i Azure.
Lägga till hanterad identitet
För att skapa ett hanterat program med en hanterad identitet krävs att ytterligare en egenskap anges för Azure-resursen. I följande exempel visas en exempelidentitetsegenskap:
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
Det finns två vanliga sätt att skapa ett hanterat program med identitet: CreateUIDefinition.jspå och Azure Resource Manager mallar. För enkla scenarier med en enskild skapa bör CreateUIDefinition användas för att aktivera hanterad identitet, eftersom det ger en mer omfattande upplevelse. Men när du hanterar avancerade eller komplexa system som kräver automatiserade eller flera distributioner av hanterade program kan mallar användas.
Använda CreateUIDefinition
Ett hanterat program kan konfigureras med hanterad identitet via CreateUIDefinition.jspå. I avsnittet outputs (utdata)kan managedIdentity nyckeln användas för att åsidosätta identitetsegenskapen för mallen för hanterade program. Exemplet aktiverar system tilldelad identitet i det hanterade programmet. Mer komplexa identitetsobjekt kan skapas med hjälp av CreateUIDefinition-element för att be konsumenten om indata. Dessa indata kan användas för att skapa hanterade program med användartillde tilldelad identitet.
"outputs": {
"managedIdentity": { "Type": "SystemAssigned" }
}
När du ska använda CreateUIDefinition för hanterad identitet
Nedan visas några rekommendationer om när du ska använda CreateUIDefinition för att aktivera hanterad identitet på hanterade program.
- Skapandet av hanterade program går via Azure Portal marknadsplatsen.
- Den hanterade identiteten kräver komplexa konsumentindata.
- Den hanterade identiteten krävs när du skapar det hanterade programmet.
Hanterad identitet CreateUIDefinition-kontroll
CreateUIDefinition stöder en inbyggd hanterad identitetskontroll.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.0.1-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]"
}
}
}

Använda Azure Resource Manager-mallar
Anteckning
Mallar för hanterade Marketplace-program genereras automatiskt för kunder som går Azure Portal skapa-upplevelsen.
I dessa scenarier måste managedIdentity utdatanyckeln på CreateUIDefinition användas för att aktiverad identitet.
Den hanterade identiteten kan också aktiveras via Azure Resource Manager mallar. Exemplet aktiverar system tilldelad identitet i det hanterade programmet. Mer komplexa identitetsobjekt kan skapas med hjälp av Azure Resource Manager för att tillhandahålla indata. Dessa indata kan användas för att skapa hanterade program med användartillde tilldelad identitet.
När du ska använda Azure Resource Manager för hanterad identitet
Nedan visas några rekommendationer om när du ska Azure Resource Manager mallar för att aktivera hanterad identitet på hanterade program.
- Hanterade program kan distribueras programmatiskt baserat på en mall.
- Anpassade rolltilldelningar för den hanterade identiteten krävs för att etablera det hanterade programmet.
- Det hanterade programmet behöver inte Azure Portal flödet för att skapa marketplace.
SystemTilldelade mallar
En grundläggande Azure Resource Manager som distribuerar ett hanterat program med system tilldelad identitet.
"resources": [
{
"type": "Microsoft.Solutions/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]
UserAssigned-mall
En grundläggande Azure Resource Manager som distribuerar ett hanterat program med en användar tilldelad identitet.
"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": { }
}
}
]
Bevilja åtkomst till Azure-resurser
När ett hanterat program har beviljats en identitet kan det beviljas åtkomst till befintliga Azure-resurser. Den här processen kan göras via gränssnittet Åtkomstkontroll (IAM) i Azure Portal. Namnet på det hanterade programmet eller den användar tilldelade identiteten kan genomsökas för att lägga till en rolltilldelning.

Länka befintliga Azure-resurser
Anteckning
En användar tilldelad identitet måste konfigureras innan du distribuerar det hanterade programmet. Dessutom stöds länkad resursdistribution av hanterade program endast för Marketplace-typen.
Hanterad identitet kan också användas för att distribuera ett hanterat program som kräver åtkomst till befintliga resurser under distributionen. När det hanterade programmet etableras av kunden kan användartilldelade identiteter läggas till för att ge ytterligare auktoriseringar till mainTemplate-distributionen.
Redigera CreateUIDefinition med en länkad resurs
När du länkar distributionen av det hanterade programmet till befintliga resurser måste både den befintliga Azure-resursen och en användar tilldelad identitet med relevant rolltilldelning för den resursen tillhandahållas.
Ett exempel på CreateUIDefinition som kräver två indata: ett resurs-ID för nätverksgränssnittet och ett resurs-ID för en användardefinierad identitet.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Compute.MultiVm",
"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 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),':{}}}'))]"
}
}
}
Den CreateUIDefinition.jspå genererar en användarupplevelse som har två fält. I det första fältet kan användaren ange Azure-resurs-ID:t för resursen som är länkad till distributionen av det hanterade programmet. Den andra är att en konsument anger azure-resurs-ID:t för den användartilldelning som har åtkomst till den länkade Azure-resursen. Den genererade upplevelsen skulle se ut så här:

Redigera mainTemplate med en länkad resurs
Förutom att uppdatera CreateUIDefinition måste huvudmallen också uppdateras för att acceptera det skickade länkade resurs-ID:t. Huvudmallen kan uppdateras för att acceptera nya utdata genom att lägga till en ny parameter. Eftersom utdata åsidosätter värdet för den genererade mallen för hanterat program skickas det inte till huvudmallen och bör inte managedIdentity inkluderas i parameteravsnittet.
En exempelmall som anger nätverksprofilen till ett befintligt nätverksgränssnitt som tillhandahålls av CreateUIDefinition.
{
"$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')]"
}
]
}
}
}
]
}
Använda det hanterade programmet med en länkad resurs
När det hanterade programpaketet har skapats kan det hanterade programmet användas via Azure Portal. Innan den kan användas finns det flera nödvändiga steg.
- En instans av den nödvändiga länkade Azure-resursen måste skapas.
- Den användar tilldelade identiteten måste skapas och tilldelas rolltilldelningar till den länkade resursen.
- Det befintliga länkade resurs-ID:t och det användardefinierade identitets-ID:t anges för CreateUIDefinition.
Åtkomst till token för hanterad identitet
Token för det hanterade programmet kan nu nås via API:et listTokens från utgivarklienten. En exempelbegäran kan se ut så här:
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}"
]
}
Parametrar för begärandetext:
| Parameter | Krävs | Beskrivning |
|---|---|---|
| authorizationAudience | Nej | App-ID-URI för målresursen. Det är också aud anspråket (målgruppen) för den utfärdade token. Standardvärdet är https://management.azure.com/ " " |
| userAssignedIdentities | Nej | Listan över användar tilldelade hanterade identiteter att hämta en token för. Om inget anges listTokens returneras token för den system tilldelade hanterade identiteten. |
Ett exempelsvar kan se ut så här:
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"
}
]
}
Svaret innehåller en matris med token under value egenskapen :
| Parameter | Beskrivning |
|---|---|
| access_token | Den begärda åtkomsttoken. |
| expires_in | Antalet sekunder som åtkomsttoken är giltig. |
| expires_on | Tidsspann när åtkomsttoken upphör att gälla. Detta representeras som antalet sekunder från epoken. |
| not_before | Det tidsspann då åtkomsttoken gäller. Detta representeras som antalet sekunder från epoken. |
| authorizationAudience | Den aud (målgrupp) som åtkomsttoken efterfrågades för. Detta är samma som det som angavs i listTokens begäran. |
| resourceId | Azure-resurs-ID:t för den utfärdade token. Det här är antingen det hanterade program-ID:t eller det användar tilldelade identitets-ID:t. |
| token_type | Typen av token. |