Application managée Azure avec identité managée
Notes
La prise en charge d’une identité managée pour des applications managées Azure est actuellement en préversion. Utilisez la version 2018-09-01-preview de l’API pour utiliser l’identité managée.
Découvrez comment configurer une application managée pour contenir une identité managée. Une identité managée peut être utilisée pour permettre au client d’octroyer à l’application managée l’accès à des ressources existantes. La plateforme Azure gère l’identité et ne requiert pas de votre part de provisionner des secrets ou d’en effectuer la rotation. Pour plus d’informations sur les identités managées dans Microsoft Entra ID, consultez Identités managées pour les ressources Azure.
Deux types d’identité peuvent être accordés à votre application :
- Une identité managée attribuée par le système est liée à votre application et est supprimée si votre application est supprimée. Une application ne peut avoir qu’une seule identité managée attribuée par le système.
- Une identité managée attribuée par l’utilisateur est une ressource Azure autonome qui peut être attribuée à votre application. Une application peut avoir plusieurs identités managées attribuées par l’utilisateur.
Comment utiliser une identité managée
L’identité managée permet de nombreux scénarios pour des applications managées. Quelques scénarios courants qui peuvent être résolus sont :
- Déploiement d’une application managée liée à des ressources Azure existantes. Le déploiement d’une machine virtuelle (VM) Azure dans l’application managée qui est attachée à une interface réseau existante peut être un exemple.
- Octroi de l’accès aux ressources Azure en dehors du groupe de ressources managé à l’application managée et à l’éditeur.
- Fourniture d’une identité opérationnelle des applications managées au journal d’activité et d’autres services dans Azure.
Ajout d’une identité managée
La création d’une application managée avec une identité managée nécessite la définition d’une autre propriété sur la ressource Azure. L’exemple suivant illustre un exemple de propriété identity :
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
}
Il existe deux manières courantes de créer une application managée avec identity
: CreateUIDefinition.json et les modèles Azure Resource Manager. Pour des scénarios de création uniques et simples, createUiDefinition doit être utilisé pour activer l’identité managée, car il propose une expérience plus riche. Toutefois, quand vous utilisez des systèmes avancés ou complexes qui nécessitent des déploiements automatisés ou multiples d’applications managées, des modèles peuvent être utilisés.
Utilisation de createUiDefinition
Une application managée peut être configurée avec une identité managée via createUiDefinition.json. Dans la section des sorties, la clé managedIdentity
peut être utilisée pour remplacer la propriété d’identité du modèle d’application managée. L’exemple suivant active une identité managée attribuée par le système sur l’application managée. Des objets d’identité plus complexes peuvent être formés à l’aide des éléments createUiDefinitionpour demander des entrées au contrôle serveur consommateur. Ces entrées peuvent être utilisées pour construire des applications managées avec une identité managée attribuée par l’utilisateur.
"outputs": {
"managedIdentity": { "Type": "SystemAssigned" }
}
Quand utiliser createUiDefinition pour une identité managée
Voici quelques recommandations permettant de déterminer quand utiliser createUiDefinition pour activer une identité managée sur des applications managées.
- La création d’une application managée passe par le portail Azure ou la Place de marché Azure.
- L’identité managée nécessite une entrée du contrôle serveur consommateur complexe.
- L’identité managée est nécessaire lors de la création de l’application managée.
Contrôle createUiDefinition d’une identité managée
Le fichier createUiDefinition.json prend en charge un contrôle d’identité managée intégré.
{
"$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]"
}
}
}
Utilisation de modèles Azure Resource Manager
Notes
Les modèles d’application managée de la Place de marché sont automatiquement générés pour les clients qui passent par l’expérience de création du portail Azure.
Dans ces scénarios, la clé de sortie managedIdentity
sur createUiDefinition doit être utilisée pour activer une identité.
L’identité managée peut également être activée via des modèles Azure Resource Manager. L’exemple suivant active une identité managée attribuée par le système sur l’application managée. Des objets d’identité plus complexes peuvent être formés à l’aide des paramètres de modèle Azure Resource Manager pour fournir des entrées. Ces entrées peuvent être utilisées pour construire des applications managées avec une identité managée attribuée par l’utilisateur.
Quand utiliser des modèles Azure Resource Manager pour une identité managée
Voici quelques recommandations permettant de déterminer quand utiliser des modèles Azure Resource Manager pour activer une identité managée sur des applications managées.
- Les applications managées peuvent être déployées programmatiquement selon un modèle.
- Des attributions de rôles personnalisées pour l’identité managée sont nécessaires pour approvisionner l’application managée.
- L’application managée n’a pas besoin du flux de création du portail ni de la Place de marché Azure.
Modèle SystemAssigned
Modèle Azure Resource Manager de base qui déploie une application managée avec une identité managée attribuée par le système.
"resources": [
{
"type": "Microsoft.Solutions/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]
Modèle UserAssigned
Modèle Azure Resource Manager de base qui déploie une application managée avec une identité managée attribuée par l’utilisateur.
"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": { }
}
}
]
Octroi de l’accès aux ressources Azure
Lorsqu’une identité a été octroyée à une application managée, l’accès aux ressources Azure existantes peut lui être octroyé par la création d’une attribution de rôle.
Pour ce faire, recherchez et sélectionnez le nom de l’application managée ou l’identité managée attribuée par l’utilisateur, puis sélectionnez Contrôle d’accès (IAM). Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Liaison des ressources Azure existantes
Notes
Une identité managée attribuée par l’utilisateur doit être configurée avant le déploiement de l’application managée. De plus, le déploiement des ressources liées des applications managées est uniquement pris en charge pour le type Place de marché.
L’identité managée peut également être utilisée pour déployer une application managée qui nécessite un accès à des ressources existantes lors de son déploiement. Quand le client approvisionne l’application managée, des identités managées attribuées par l’utilisateur peuvent être ajoutées pour fournir des autorisations supplémentaires au déploiement de mainTemplate.
Création de createUiDefinition avec une ressource liée
Lorsque vous liez le déploiement de l’application managée à des ressources existantes, la ressource Azure existante et une identité managée affectée par l’utilisateur avec l’attribution de rôle applicable à cette ressource doivent toutes deux être fournies.
Exemple de fichier createUiDefinition.jsonqui nécessite deux entrées : un ID de ressource d’interface réseau et un ID de ressource d’identité managée attribuée par l’utilisateur.
{
"$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),':{}}}'))]"
}
}
}
Ce fichier createUiDefinition.json génère une expérience de création d’utilisateur qui comporte deux champs. Le premier champ permet à l’utilisateur d’entrer l’ID de ressource Azure pour la ressource liée au déploiement de l’application managée. Le deuxième champ permet à un contrôle serveur consommateur d’entrer l’ID de ressource Azure de l’identité managée attribuée par l’utilisateur, qui a accès à la ressource Azure liée. L’expérience générée peut se présenter comme suit :
Création de mainTemplate avec une ressource liée
En plus de la mise à jour de createUiDefinition, le modèle principal doit également être mis à jour pour accepter l’ID de ressource liée transmis. Le modèle principal peut être mis à jour pour accepter la nouvelle sortie en ajoutant un nouveau paramètre. Dans la mesure où la sortie managedIdentity
remplace la valeur sur le modèle d’application managée généré, elle n’est pas transmise au modèle principal et ne doit pas être incluse dans la section des paramètres.
Exemple de modèle principal qui définit le profil réseau sur une interface réseau existante fournie par le fichier 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')]"
}
]
}
}
}
]
}
Utilisation de l’application managée avec une ressource liée
Une fois le package d’application managée créé, l’application managée peut être utilisée via le portail Azure. Avant de pouvoir être utilisée, plusieurs étapes préalables doivent être suivies.
- Une instance de la ressource Azure liée requise doit être créée.
- L’identité managée attribuée par l’utilisateur doit être créée et se voir attribuer des rôles sur la ressource liée.
- L’ID de la ressource liée existante et l’ID de l’identité managée attribuée par l’utilisateur sont fournis à createUiDefinition.
Accès au jeton de l’identité managée
Le jeton de l’application managée est désormais accessible via l’listTokens
API du locataire de l’éditeur. Voici un exemple de demande :
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}"
]
}
Paramètres du corps de la demande :
Paramètre | Obligatoire | Description |
---|---|---|
authorizationAudience |
non | URI ID d’application de la ressource cible. Il s’agit également de la revendication aud (audience) du jeton émis. La valeur par défaut est « https://management.azure.com/" ». |
userAssignedIdentities |
non | Liste des identités managées attribuées par l’utilisateur pour lesquelles récupérer un jeton. Si ce paramètre n’est pas spécifié, listTokens retourne le jeton pour l’identité managée attribuée par le système. |
Voici un exemple de réponse :
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"
}
]
}
La réponse contient un tableau de jetons sous la propriété value
:
Paramètre | Description |
---|---|
access_token |
Le jeton d’accès demandé. |
expires_in |
Nombre de secondes pendant lesquelles le jeton d’accès est valide. |
expires_on |
L’intervalle de temps lorsque le jeton d’accès expire. Cette valeur est exprimée en nombre de secondes depuis l’epoch. |
not_before |
Intervalle de temps pendant lequel le jeton d’accès prend effet. Cette valeur est exprimée en nombre de secondes depuis l’epoch. |
authorizationAudience |
Valeur aud (audience) pour laquelle le jeton d’accès a été demandé. Cette valeur est la même valeur que celle fournie par la requête listTokens . |
resourceId |
ID de ressource Azure pour le jeton émis. Cette valeur est celle de l’ID de l’application managée ou de l’ID de l’identité managée attribuée par l’utilisateur. |
token_type |
Type du jeton. |