Verwaltete Azure-Anwendung mit verwalteter Identität

Hinweis

Die Unterstützung von Azure Managed Applications durch verwaltete Identitäten befindet sich derzeit in der Vorschau. Verwenden Sie die API-Version „2018-09-01-preview“, um die verwaltete Identität einzusetzen.

Erfahren Sie, wie Sie eine verwaltete Azure-Anwendung so konfigurieren, dass sie eine verwaltete Identität enthält. Eine verwaltete Identität kann verwendet werden, damit der Kunde der verwalteten Anwendung Zugriff auf vorhandene Ressourcen gewähren kann. Die Azure-Plattform verwaltet die Identität. Sie müssen keine Geheimnisse bereitstellen oder rotieren. Weitere Informationen zu verwalteten Identitäten in Microsoft Entra ID finden Sie unter Verwaltete Identitäten für Azure-Ressourcen.

Ihrer Anwendung können zwei Arten von Identitäten zugewiesen werden:

  • Eine systemseitig zugewiesene verwaltete Identität ist an Ihre Anwendung gebunden und wird gelöscht, wenn Ihre App gelöscht wird. Eine App kann nur über eine systemseitig zugewiesene verwaltete Identität verfügen.
  • Eine benutzerseitig zugewiesene verwaltete Identität ist eine eigenständige Azure-Ressource, die Ihrer App zugewiesen werden kann. Eine App kann über mehrere benutzerseitig zugewiesene verwaltete Identitäten verfügen.

Verwenden einer verwalteten Identität

Die verwaltete Identität ermöglicht viele Szenarien für verwaltete Anwendungen. Einige gängige Szenarien, die gelöst werden können:

  • Bereitstellen einer verwalteten Anwendung, die mit vorhandenen Azure-Ressourcen verknüpft ist. Ein Beispiel ist die Bereitstellung eines virtuellen Azure-Computers (VM) in der verwalteten Anwendung, der einer vorhandenen Netzwerkschnittstelle angefügt ist.
  • Gewährung des Zugriffs auf Azure-Ressourcen außerhalb der verwalteten Ressourcengruppe für die verwaltete Anwendung und Herausgeber.
  • Bereitstellen einer operativen Identität von verwalteten Anwendungen für das Aktivitätsprotokoll und andere Dienste in Azure.

Hinzufügen einer verwalteten Identität

Zum Erstellen einer verwalteten Anwendung mit einer verwalteten Identität muss eine andere Eigenschaft für die Azure-Ressource festgelegt werden. Das folgende Beispiel zeigt eine Beispieleigenschaft identity:

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

Es gibt zwei gängige Möglichkeiten, eine verwaltete Anwendung mit identity zu erstellen: createUiDefinition.json und Azure Resource Manager-Vorlagen. Für einfache Einzelerstellungsszenarien sollte createUiDefinition zum Aktivieren der verwalteten Identität verwendet werden, da es eine umfangreichere Benutzeroberfläche bereitstellt. Beim Umgang mit erweiterten oder komplexen Systemen, die automatisierte oder mehrere Bereitstellungen von verwalteten Anwendungen erfordern, können allerdings Vorlagen verwendet werden.

Verwenden von createUiDefinition

Eine verwaltete Anwendung kann über createUiDefinition.json mit der verwalteten Identität konfiguriert werden. Im Abschnitt Ausgaben kann mit dem Schlüssel managedIdentity die Identitätseigenschaft der Vorlage für die verwaltete Anwendung außer Kraft gesetzt werden. Im folgenden Beispiel wird eine systemseitig zugewiesene verwaltete Identität für die verwaltete Anwendung aktiviert. Komplexere Identitätsobjekte können mit createUiDefinition-Elementen gebildet werden, um den Consumer zu Eingaben aufzufordern. Diese Eingaben dienen zum Erstellen von verwalteten Anwendungen mit vom Benutzer zugewiesener verwalteter Identität.

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

Verwendung von createUiDefinition für die verwaltete Identität

Im Folgenden finden Sie einige Empfehlungen zur Verwendung von createUiDefinition zum Aktivieren einer verwalteten Identität für verwaltete Anwendungen.

  • Die Erstellung von verwalteten Anwendungen erfolgt im Azure-Portal oder Marketplace.
  • Die verwaltete Identität erfordert komplexe Consumereingaben.
  • Die verwaltete Identität wird zum Erstellen der verwalteten Anwendung benötigt.

createUiDefinition-Steuerelement für verwaltete Identitäten

createUiDefinition unterstützt ein integriertes Steuerelement für verwaltete Identitäten.

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

Verwenden von Azure-Ressourcen-Manager-Vorlagen

Hinweis

Vorlagen für verwaltete Marketplace-Anwendungen werden automatisch für Kunden generiert, die über das Azure-Portal erstellen. Für diese Szenarien muss der managedIdentity-Ausgabeschlüssel von createUiDefinition zum Aktivieren der Identität verwendet werden.

Die verwaltete Identität kann auch über Azure Resource Manager-Vorlagen aktiviert werden. Im folgenden Beispiel wird eine systemseitig zugewiesene verwaltete Identität für die verwaltete Anwendung aktiviert. Komplexere Identitätsobjekte können mithilfe der Azure Resource Manager-Vorlagenparameter zum Bereitstellen von Eingaben gebildet werden. Diese Eingaben dienen zum Erstellen von verwalteten Anwendungen mit vom Benutzer zugewiesener verwalteter Identität.

Verwenden von Azure Resource Manager-Vorlagen für verwaltete Identitäten

Im Folgenden finden Sie einige Empfehlungen zur Verwendung von Azure Resource Manager-Vorlagen zum Aktivieren der verwalteten Identität für verwaltete Anwendungen.

  • Verwaltete Anwendungen können programmgesteuert auf Grundlage einer Vorlage bereitgestellt werden.
  • Benutzerdefinierte Rollenzuweisungen für die verwaltete Identität sind erforderlich, um die verwaltete Anwendung bereitzustellen.
  • Die verwaltete Anwendung benötigt keinen Erstellungsflow im Azure-Portal und Marketplace.

SystemAssigned-Vorlage

Eine einfache Azure Resource Manager-Vorlage, die eine verwaltete Anwendung mit systemseitig zugewiesene verwaltete Identität bereitstellt.

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

UserAssigned-Vorlage

Eine einfache Azure Resource Manager-Vorlage, die eine verwaltete Anwendung mit benutzerseitig zugewiesene verwaltete Identität bereitstellt.

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

Gewähren des Zugriffs auf Azure-Ressourcen

Sobald einer verwalteten Anwendung eine Identität gewährt wird, kann ihr Zugriff auf vorhandene Azure-Ressourcen gewährt werden, indem Sie eine Rollenzuweisung erstellen.

Hierzu suchen Sie nach dem Namen der verwalteten Anwendung oder der benutzerseitig zugewiesenen verwaltete Identität, und wählen diese dann und anschließend Zugriffssteuerung (IAM) aus. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Verknüpfen vorhandener Azure-Ressourcen

Hinweis

Eine benutzerseitig zugewiesene verwaltete Identität muss vor dem Bereitstellen der verwalteten Anwendung konfiguriert werden. Außerdem wird die Bereitstellung verknüpfter Ressourcen von verwalteten Anwendungen nur für den Marketplace unterstützt.

Mit der verwalteten Identität kann auch eine verwaltete Anwendung bereitgestellt werden, die während ihrer Bereitstellung Zugriff auf vorhandene Ressourcen erfordert. Wenn die verwaltete Anwendung vom Kunden bereitgestellt wird, können benutzerseitig zugewiesene verwaltete Identitäten hinzugefügt werden, um zusätzliche Autorisierungen für die mainTemplate-Bereitstellung bereitzustellen.

Erstellen von createUiDefinition mit einer verknüpften Ressource

Wenn Sie die Bereitstellung der verwalteten Anwendung mit vorhandenen Ressourcen verknüpfen, muss sowohl die vorhandene Azure-Ressource als auch eine benutzerseitig zugewiesene verwaltete Identität mit der entsprechenden Rollenzuweisung für diese Ressource angegeben werden.

Ein createUiDefinition.json-Beispiel, das zwei Eingaben erfordert: eine Netzwerkschnittstellen-Ressourcen-ID und eine Benutzerseitig zugewiesene verwaltete Identitätsressourcen-ID.

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

Diese createUiDefinition.json generiert eine Erstellungsbenutzeroberfläche mit zwei Feldern. Das erste Feld ermöglicht dem Benutzer die Eingabe der Azure-Ressourcen-ID für die Ressource, die mit der Bereitstellung der verwalteten Anwendung verknüpft wird. Im zweiten kann ein Consumer die Azure-Ressourcen-ID der benutzerseitig zugewiesene verwaltete Identität eingeben, die Zugriff auf die verknüpfte Azure-Ressource hat. Die generierte Benutzeroberfläche würde so aussehen:

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

Erstellen von mainTemplate mit einer verknüpften Ressource

Neben createUiDefinition muss auch die Hauptvorlage aktualisiert werden, um die übergebene ID der verknüpften Ressource zu akzeptieren. Die Hauptvorlage kann durch Hinzufügen eines neuen Parameters aktualisiert werden, um die neue Ausgabe zu akzeptieren. Da die managedIdentity-Ausgabe den Wert für die generierte Vorlage für die verwaltete Anwendung überschreibt, wird sie nicht an die Hauptvorlage übergeben und sollte nicht im Abschnitt „Parameter“ enthalten sein.

Eine Beispielhauptvorlage, die das Netzwerkprofil auf eine vorhandene, von createUiDefinition.json bereitgestellte Netzwerkschnittstelle festlegt.

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

Nutzen der verwalteten Anwendung mit einer verknüpften Ressource

Nachdem das Paket für die verwaltete Anwendung erstellt wurde, kann die verwaltete Anwendung über das Azure-Portal genutzt werden. Bevor sie verwendet werden kann, sind mehrere Schritte erforderlich.

Zugreifen auf das Token der verwalteten Identität

Auf das Token der verwalteten Anwendung kann nun über die listTokens-API vom Mandanten des Herausgebers aus zugegriffen werden. Eine Beispielanforderung könnte folgendermaßen aussehen:

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

Anforderungstextparameter:

Parameter Erforderlich Beschreibung
authorizationAudience Nein Der App-ID-URI der Zielressource. Dieser ist auch der aud-Anspruch (Zielgruppe) des ausgestellten Tokens. Der Standardwert ist "https://management.azure.com/"
userAssignedIdentities Nein Die Liste der vom Benutzer zugewiesenen verwalteten Identitäten, für die ein Token abgerufen werden kann. Falls nicht angegeben, gibt listTokens das Token für die systemseitig zugewiesene verwaltete Identität zurück.

Eine Beispielantwort könnte folgendermaßen aussehen:

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

Die Antwort enthält in der value-Eigenschaft ein Array von Token:

Parameter Beschreibung
access_token Das angeforderte Zugriffstoken.
expires_in Die Anzahl der Sekunden, die das Zugriffstoken gültig ist.
expires_on Der Zeitpunkt, zu dem das Zugriffstoken abläuft. Dieser Wert wird als die Anzahl der Sekunden in der Epoche dargestellt.
not_before Die Zeitspanne, in der das Zugriffstoken gilt. Dieser Wert wird als die Anzahl der Sekunden in der Epoche dargestellt.
authorizationAudience Die aud (Zielgruppe), für die das Zugriffstoken angefordert wurde. Dieser Wert ist mit den in der listTokens-Anforderung bereitgestellten Daten identisch.
resourceId Die Azure-Ressourcen-ID für das ausgestellte Token. Dieser Wert ist entweder die ID der verwalteten Anwendung oder die ID der benutzerseitig zugewiesenen verwalteten Identität.
token_type Der Typ des Tokens.

Nächste Schritte