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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
}
Er zijn twee veelvoorkomende manieren om een beheerde toepassing te maken met: createUiDefinition.json- en Azure Resource Manager-sjablonen. identity
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]"
}
}
}
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 createUiDefinition.json waarvoor twee invoer is vereist: een resource-id van de netwerkinterface en een door de gebruiker toegewezen resource-id voor beheerde identiteit.
{
"$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),':{}}}'))]"
}
}
}
Deze createUiDefinition.json genereert een gebruikerservaring 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:
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 |
Nee | 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 |
Nee | 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 | Description |
---|---|
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. |