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/00000000-0000-0000-0000-000000000000/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-portalen 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]"
    }
  }
}

Screenshot of the application settings for system-assigned managed identity and user-assigned managed identity

Använda Azure Resource Manager-mallar

Kommentar

Marketplace-hanterade programmallar genereras automatiskt för kunder som går igenom azure-portalens skapa-upplevelse. 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-portalen 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 på 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/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 managed 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 skapa 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:

Screenshot of a sample createUiDefinition.json with two inputs: a network interface resource ID and a user-assigned managed 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 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-portalen. 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 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. 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.

Nästa steg