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 åtkomst till det hanterade programmet 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 systemtilldelad identitet är kopplad till ditt program och tas bort om appen tas bort. En app kan bara ha en systemtilldelad identitet.
- En användartilldelad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användartilldelade identiteter.
Så här använder du 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 operativ identitet för hanterade program för aktivitetsloggen och andra tjänster i Azure.
Lägga till hanterad identitet
Att skapa ett hanterat program med en hanterad identitet kräver 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.json och Azure Resource Manager mallar. För enkla scenarier med enkel skapande bör CreateUIDefinition användas för att aktivera hanterad identitet, eftersom det ger en bättre 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.json. I avsnittet utdata kan nyckeln managedIdentity
användas för att åsidosätta identitetsegenskapen för mallen hanterat program. Exemplet nedan aktiverar systemtilldelad 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 konstruera hanterade program med användartilldelad 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 i hanterade program.
- Skapandet av hanterade program går via Azure Portal eller Marketplace.
- Den hanterade identiteten kräver komplexa konsumentindata.
- Den hanterade identiteten krävs när det hanterade programmet skapas.
CreateUIDefinition-kontroll för hanterad identitet
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 igenom Azure Portal skapa upplevelsen.
I dessa scenarier måste utdatanyckeln managedIdentity
i CreateUIDefinition användas för aktiverad identitet.
Den hanterade identiteten kan också aktiveras via Azure Resource Manager-mallar. Exempelbälgen aktiverar systemtilldelad identitet i det hanterade programmet. Mer komplexa identitetsobjekt kan skapas med hjälp av Azure Resource Manager mallparametrar för att tillhandahålla indata. Dessa indata kan användas för att konstruera hanterade program med användartilldelad identitet.
När du ska använda Azure Resource Manager-mallar för hanterad identitet
Nedan visas några rekommendationer om när du ska använda Azure Resource Manager-mallar för att aktivera hanterad identitet i 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 flödet för att skapa Azure Portal och Marketplace.
SystemTilldelade mallar
En grundläggande Azure Resource Manager-mall som distribuerar ett hanterat program med systemtilldelad 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": { }
}
}
]
Användartilldelade mallar
En grundläggande Azure Resource Manager-mall som distribuerar ett hanterat program med en användartilldelad 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 genom att skapa en rolltilldelning.
Det gör du genom att söka efter och välja namnet på det hanterade programmet eller den användartilldelade identiteten och sedan välja Åtkomstkontroll (IAM).. Detaljerade anvisningar finns i Tilldela Azure-roller med hjälp av Azure Portal.
Länka befintliga Azure-resurser
Anteckning
En användartilldelad 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ändartilldelad identitet med tillämplig rolltilldelning för den resursen anges.
Ett exempel på CreateUIDefinition som kräver två indata: ett resurs-ID för nätverksgränssnittet och ett resurs-ID för användartilldelad 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 här CreateUIDefinition.json genererar en användarupplevelse för att skapa som har två fält. Med det första fältet kan användaren ange i Azure-resurs-ID:t för resursen som är länkad till distributionen av det hanterade programmet. Det andra är att en konsument anger den användartilldelade identitetens Azure-resurs-ID , 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 länkade resurs-ID:t. Huvudmallen kan uppdateras för att acceptera de nya utdata genom att lägga till en ny parameter. managedIdentity
Eftersom utdata åsidosätter värdet för den genererade mallen för hanterat program skickas den inte till huvudmallen och bör inte tas med i avsnittet parametrar.
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 länkade Azure-resursen som krävs måste skapas.
- Den användartilldelade identiteten måste skapas och tilldelas rolltilldelningar till den länkade resursen.
- Det befintliga länkade resurs-ID:t och det användartilldelade identitets-ID :t tillhandahålls till 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å anspråket aud (målgruppen) för den utfärdade token. Standardvärdet är "https://management.azure.com/" |
userAssignedIdentities | Nej | Listan över användartilldelade hanterade identiteter att hämta en token för. Om det inte anges listTokens returneras token för den systemtilldelade 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 | Tidsintervallet när åtkomsttoken upphör att gälla. Detta representeras som antalet sekunder från epoken. |
not_before | Tidsintervallet när åtkomsttoken börjar gälla. Detta representeras som antalet sekunder från epoken. |
authorizationAudience | Den aud (målgrupp) som åtkomsttoken begärdes för. Det här är samma som det som angavs i listTokens begäran. |
resourceId | Azure-resurs-ID för den utfärdade token. Det här är antingen det hanterade program-ID:t eller det användartilldelade identitets-ID:t. |
token_type | Typ av token. |