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]"
    }
  }
}

Managed Identity CreateUIDefinition

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:

Sample CreateUIDefinition with two inputs: a network interface resource ID and a user assigned identity resource ID

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.

Nästa steg