Azure Managed Application med hanterad identitet
Kommentar
Stöd för hanterad identitet för Azure Managed Applications finns 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. En hanterad identitet kan användas för att ge kunden åtkomst till det hanterade programmet till befintliga resurser. Azure-plattformen hanterar identiteten och kräver inte att du etablerar eller roterar några hemligheter. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.
Ditt program kan beviljas två typer av identiteter:
- En systemtilldelad hanterad identitet är kopplad till ditt program och tas bort om appen tas bort. En app kan bara ha en systemtilldelad hanterad identitet.
- En användartilldelad hanterad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användartilldelade hanterade 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
Om du skapar ett hanterat program med en hanterad identitet måste en annan egenskap anges för Azure-resursen. I följande exempel visas en exempelidentitetsegenskap:
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
}
Det finns två vanliga sätt att skapa ett hanterat program med identity
: 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 den hanterade programmallen. Följande exempel aktiverar en systemtilldelad hanterad 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 hanterad identitet.
"outputs": {
"managedIdentity": { "Type": "SystemAssigned" }
}
När ska du använda createUiDefinition för hanterad identitet
Följande är några rekommendationer om när du ska använda createUiDefinition för att aktivera en hanterad identitet i hanterade program.
- Skapandet av hanterade program går via Azure Portal eller Azure Marketplace.
- Den hanterade identiteten kräver komplexa konsumentindata.
- Den hanterade identiteten behövs när det hanterade programmet skapas.
CreateUiDefinition-kontroll för hanterad identitet
createUiDefinition.json 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.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]"
}
}
}
Använda Azure Resource Manager-mallar
Kommentar
Marketplace-hanterade programmallar genereras automatiskt för kunder som går igenom Azure Portal skapa upplevelsen.
I dessa scenarier managedIdentity
måste utdatanyckeln i createUiDefinition användas för aktiverad identitet.
Den hanterade identiteten kan också aktiveras via Azure Resource Manager-mallar. Följande exempel aktiverar en systemtilldelad hanterad 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 hanterad identitet.
När du ska använda Azure Resource Manager-mallar för hanterad identitet
Följande är 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 hanterad 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 hanterad 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.
Om du vill göra det söker du efter och väljer namnet på det hanterade programmet eller den användartilldelade hanterade identiteten och väljer sedan Åtkomstkontroll (IAM).. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.
Länka befintliga Azure-resurser
Kommentar
En användartilldelad hanterad identitet måste konfigureras innan det hanterade programmet distribueras. 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 kunden etablerar det hanterade programmet kan användartilldelade hanterade identiteter läggas till för att ge fler 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 hanterad identitet med tillämplig rolltilldelning för resursen anges.
Ett exempel createUiDefinition.json som kräver två indata: ett resurs-ID för nätverksgränssnittet och ett användartilldelat resurs-ID för hanterad identitet.
{
"$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),':{}}}'))]"
}
}
}
Den här createUiDefinition.json skapar en användarupplevelse 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. Den andra är att en konsument anger den användartilldelade hanterade 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 på den genererade hanterade programmallen skickas den inte till huvudmallen och bör inte ingå i avsnittet parametrar.
En exempelmall som anger nätverksprofilen till ett befintligt nätverksgränssnitt som tillhandahålls av 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')]"
}
]
}
}
}
]
}
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-resurs som krävs måste skapas.
- Den användartilldelade hanterade identiteten måste skapas och tilldelas rolltilldelningar till den länkade resursen.
- Det befintliga länkade resurs-ID:t och det användartilldelade hanterade identitets-ID:t tillhandahålls till createUiDefinition.
Åtkomst till den hanterade identitetstoken
Token för det hanterade programmet kan nu nås via API:et listTokens
från utgivarens klientorganisation. 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 | Obligatoriskt | Beskrivning |
---|---|---|
authorizationAudience |
Nej | App-ID-URI:n för målresursen. Det är också anspråket aud (målgrupp) 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 egenskapen value
:
Parameter | Description |
---|---|
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. Det här värdet representeras som antalet sekunder från epoken. |
not_before |
Tidsintervallet när åtkomsttoken börjar gälla. Det här värdet representeras som antalet sekunder från epoken. |
authorizationAudience |
Den aud (målgrupp) som åtkomsttoken begärdes för. Det här värdet är samma som det som angavs i listTokens begäran. |
resourceId |
Azure-resurs-ID för den utfärdade token. Det här värdet är antingen det hanterade program-ID:t eller det användartilldelade hanterade identitets-ID:t. |
token_type |
Typ av token. |