Beheerde Azure-toepassing met beheerde identiteit

Notitie

Ondersteuning voor beheerde identiteiten voor Azure Managed Applications is momenteel beschikbaar als preview-versie. Gebruik de API-versie 2018-09-01-preview om een beheerde identiteit te gebruiken.

Meer informatie over het configureren van een beheerde toepassing voor het bevatten van een beheerde identiteit. Een beheerde identiteit kan worden gebruikt om de klant toegang te geven tot bestaande resources. Het Azure-platform beheert de identiteit en vereist niet dat u geheimen inricht of roteert. Zie Beheerde identiteiten voor Azure-resources voor meer informatie over beheerde identiteiten in Microsoft Entra ID.

Aan uw toepassing kunnen twee typen identiteiten worden toegekend:

  • Een door het systeem toegewezen beheerde identiteit is gekoppeld aan uw toepassing en wordt verwijderd als uw app wordt verwijderd. Een app kan slechts één door het systeem toegewezen beheerde identiteit hebben.
  • Een door de gebruiker toegewezen beheerde identiteit is een zelfstandige Azure-resource die kan worden toegewezen aan uw app. Een app kan meerdere door de gebruiker toegewezen beheerde identiteiten hebben.

Beheerde identiteit gebruiken

Beheerde identiteit maakt veel scenario's mogelijk voor beheerde toepassingen. Enkele veelvoorkomende scenario's die kunnen worden opgelost, zijn:

  • Een beheerde toepassing implementeren die is gekoppeld aan bestaande Azure-resources. Een voorbeeld is het implementeren van een virtuele Azure-machine (VM) in de beheerde toepassing die is gekoppeld aan een bestaande netwerkinterface.
  • De beheerde toepassing en uitgever toegang verlenen tot Azure-resources buiten de beheerde resourcegroep.
  • Het bieden van een operationele identiteit van beheerde toepassingen voor activiteitenlogboek en andere services in Azure.

Beheerde identiteit toevoegen

Voor het maken van een beheerde toepassing met een beheerde identiteit moet een andere eigenschap worden ingesteld op de Azure-resource. In het volgende voorbeeld ziet u een voorbeeld van een id-eigenschap:

{
  "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
    }
  }
}

Er zijn twee veelvoorkomende manieren om een beheerde toepassing te maken met identity: createUiDefinition.json - en Azure Resource Manager-sjablonen. Voor eenvoudige scenario's met één maak moet createUiDefinition worden gebruikt om beheerde identiteit in te schakelen, omdat het een rijkere ervaring biedt. Wanneer u echter te maken hebt met geavanceerde of complexe systemen waarvoor geautomatiseerde of meerdere beheerde toepassingsimplementaties zijn vereist, kunnen sjablonen worden gebruikt.

CreateUiDefinition gebruiken

Een beheerde toepassing kan worden geconfigureerd met een beheerde identiteit via de createUiDefinition.json. In de sectie uitvoer kan de sleutel managedIdentity worden gebruikt om de identiteitseigenschap van de beheerde toepassingssjabloon te overschrijven. In het volgende voorbeeld wordt een door het systeem toegewezen beheerde identiteit ingeschakeld voor de beheerde toepassing. Complexere identiteitsobjecten kunnen worden gevormd met behulp van createUiDefinition-elementen om de consument te vragen om invoer. Deze invoer kan worden gebruikt voor het maken van beheerde toepassingen met door de gebruiker toegewezen beheerde identiteit.

"outputs": {
  "managedIdentity": { "Type": "SystemAssigned" }
}

Wanneer moet u createUiDefinition gebruiken voor beheerde identiteit

Hieronder volgen enkele aanbevelingen voor het gebruik van createUiDefinition om een beheerde identiteit in te schakelen voor beheerde toepassingen.

  • Het maken van de beheerde toepassing gaat via Azure Portal of Azure Marketplace.
  • Voor de beheerde identiteit is complexe invoer van de consument vereist.
  • De beheerde identiteit is nodig bij het maken van de beheerde toepassing.

Beheerde identiteit createUiDefinition-besturingselement

De createUiDefinition.json ondersteunt een ingebouwd beheer van beheerde identiteiten.

{
  "$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

Azure Resource Manager-sjablonen gebruiken

Notitie

Door Marketplace beheerde toepassingssjablonen worden automatisch gegenereerd voor klanten die de Azure-portal maken. Voor deze scenario's moet de managedIdentity uitvoersleutel op de createUiDefinition worden gebruikt om identiteit in te schakelen.

De beheerde identiteit kan ook worden ingeschakeld via Azure Resource Manager-sjablonen. In het volgende voorbeeld wordt een door het systeem toegewezen beheerde identiteit ingeschakeld voor de beheerde toepassing. Complexere identiteitsobjecten kunnen worden gevormd met behulp van azure Resource Manager-sjabloonparameters om invoer te bieden. Deze invoer kan worden gebruikt voor het maken van beheerde toepassingen met door de gebruiker toegewezen beheerde identiteit.

Wanneer gebruikt u Azure Resource Manager-sjablonen voor beheerde identiteit

Hier volgen enkele aanbevelingen voor het gebruik van Azure Resource Manager-sjablonen voor het inschakelen van beheerde identiteiten voor beheerde toepassingen.

  • Beheerde toepassingen kunnen programmatisch worden geïmplementeerd op basis van een sjabloon.
  • Aangepaste roltoewijzingen voor de beheerde identiteit zijn nodig om de beheerde toepassing in te richten.
  • De beheerde toepassing heeft de Stroom voor het maken van Azure Portal en Marketplace niet nodig.

SystemAssigned-sjabloon

Een eenvoudige Azure Resource Manager-sjabloon waarmee een beheerde toepassing wordt geïmplementeerd met een door het systeem toegewezen beheerde identiteit.

"resources": [
  {
    "type": "Microsoft.Solutions/applications",
    "name": "[parameters('applicationName')]",
    "apiVersion": "2018-09-01-preview",
    "location": "[parameters('location')]",
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
        "parameters": { }
    }
  }
]

Sjabloon UserAssigned

Een eenvoudige Azure Resource Manager-sjabloon waarmee een beheerde toepassing wordt geïmplementeerd met een door de gebruiker toegewezen beheerde identiteit.

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

Toegang verlenen tot Azure-resources

Zodra een beheerde toepassing een identiteit heeft gekregen, kan deze toegang krijgen tot bestaande Azure-resources door een roltoewijzing te maken.

Hiervoor zoekt en selecteert u de naam van de beheerde toepassing of door de gebruiker toegewezen beheerde identiteit en selecteert u vervolgens Toegangsbeheer (IAM). Raadpleeg Azure-rollen toewijzen met Azure Portal voor informatie over het toewijzen van rollen.

Bestaande Azure-resources koppelen

Notitie

Een door de gebruiker toegewezen beheerde identiteit moet worden geconfigureerd voordat de beheerde toepassing wordt geïmplementeerd. Daarnaast wordt de gekoppelde resource-implementatie van beheerde toepassingen alleen ondersteund voor het type Marketplace .

Beheerde identiteit kan ook worden gebruikt voor het implementeren van een beheerde toepassing die tijdens de implementatie toegang tot bestaande resources vereist. Wanneer de klant de beheerde toepassing in richt, kunnen door de gebruiker toegewezen beheerde identiteiten worden toegevoegd om meer autorisaties te bieden voor de mainTemplate-implementatie .

De createUiDefinition ontwerpen met een gekoppelde resource

Wanneer u de implementatie van de beheerde toepassing koppelt aan bestaande resources, moeten zowel de bestaande Azure-resource als een door de gebruiker toegewezen beheerde identiteit met de toepasselijke roltoewijzing voor die resource worden opgegeven.

Een voorbeeld van createUiDefinition.json waarvoor twee invoer is vereist: een resource-id voor de netwerkinterface en een door de gebruiker toegewezen resource-id voor beheerde identiteiten.

{
  "$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),':{}}}'))]"
    }
  }
}

Met deze createUiDefinition.json wordt een gebruikerservaring gemaakt met twee velden. Met het eerste veld kan de gebruiker de Azure-resource-id invoeren voor de resource die wordt gekoppeld aan de implementatie van de beheerde toepassing. De tweede is dat een consument de door de gebruiker toegewezen beheerde identiteit kan invoeren die toegang heeft tot de gekoppelde Azure-resource. De gegenereerde ervaring ziet er als volgt uit:

Screenshot of a sample createUiDefinition.json with two inputs: a network interface resource ID and a user-assigned managed identity resource ID.

De mainTemplate ontwerpen met een gekoppelde resource

Naast het bijwerken van de createUiDefinition moet de hoofdsjabloon ook worden bijgewerkt om de doorgegeven gekoppelde resource-id te accepteren. De hoofdsjabloon kan worden bijgewerkt om de nieuwe uitvoer te accepteren door een nieuwe parameter toe te voegen. Omdat de managedIdentity uitvoer de waarde voor de gegenereerde beheerde toepassingssjabloon overschrijft, wordt deze niet doorgegeven aan de hoofdsjabloon en mag deze niet worden opgenomen in de sectie parameters.

Een voorbeeld van een hoofdsjabloon waarmee het netwerkprofiel wordt ingesteld op een bestaande netwerkinterface die wordt geleverd door de 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')]"
            }
          ]
        }
      }
    }
  ]
}

De beheerde toepassing gebruiken met een gekoppelde resource

Zodra het beheerde toepassingspakket is gemaakt, kan de beheerde toepassing worden gebruikt via Azure Portal. Voordat deze kan worden gebruikt, zijn er verschillende vereiste stappen.

  • Er moet een exemplaar van de vereiste gekoppelde Azure-resource worden gemaakt.
  • De door de gebruiker toegewezen beheerde identiteit moet worden gemaakt en roltoewijzingen aan de gekoppelde resource krijgen.
  • De bestaande gekoppelde resource-id en de door de gebruiker toegewezen beheerde identiteit-id worden verstrekt aan de createUiDefinition.

Toegang tot het token voor beheerde identiteit

Het token van de beheerde toepassing kan nu worden geopend via de listTokens API vanuit de uitgevertenant. Een voorbeeldaanvraag kan er als volgt uitzien:

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

Parameters voor aanvraagbody:

Parameter Vereist Beschrijving
authorizationAudience No De app-id-URI van de doelresource. Het is ook de aud claim (doelgroep) van het uitgegeven token. De standaardwaarde is 'https://management.azure.com/"
userAssignedIdentities No De lijst met door de gebruiker toegewezen beheerde identiteiten voor het ophalen van een token. Als dit niet is opgegeven, listTokens retourneert u het token voor de door het systeem toegewezen beheerde identiteit.

Een voorbeeldantwoord kan er als volgt uitzien:

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

Het antwoord bevat een matrix met tokens onder de value eigenschap:

Parameter Omschrijving
access_token Het aangevraagde toegangstoken.
expires_in Het aantal seconden dat het toegangstoken geldig is.
expires_on Het tijdsbestek waarin het token verloopt. Deze waarde wordt weergegeven als het aantal seconden uit de periode.
not_before De tijdsduur waarop het toegangstoken van kracht wordt. Deze waarde wordt weergegeven als het aantal seconden uit de periode.
authorizationAudience Het aud (publiek) waarvoor het toegangstoken is aangevraagd. Deze waarde is hetzelfde als de waarde die is opgegeven in de listTokens aanvraag.
resourceId De Azure-resource-id voor het uitgegeven token. Deze waarde is de beheerde toepassings-id of de door de gebruiker toegewezen beheerde identiteit-id.
token_type Het type token.

Volgende stappen