Comment utiliser des identités managées avec des services Azure pour se connecter à Azure Cosmos DB for NoSQL
S’APPLIQUE À : NoSQL
Diagramme de la séquence du guide de déploiement, y compris ces emplacements, dans l’ordre : Vue d’ensemble, Concepts, Préparation, Contrôle d’accès en fonction du rôle, Réseau et Référence. L’emplacement « Préparation » est mis en surbrillance.
Cet article passe en revue les étapes nécessaires pour créer des identités gérées à utiliser avec une application déployée connectée à Azure Cosmos DB for NoSQL.
Les identités gérées constituent l’un des nombreux types de ressources d’identité dans Microsoft Entra ID pour les applications à utiliser lors de la connexion aux services qui prennent en charge l’authentification Microsoft Entra. Les identités gérées peuvent être utilisées à la place des informations d’identification traditionnelles appartenant à des ressources telles que des clés. Dans Azure, les identités gérées permettent à vos applications d’obtenir un jeton Microsoft Entra pour s’authentifier auprès des services Azure sans avoir à écrire une grande quantité de code d’authentification.
Vous pouvez utiliser Microsoft Entra pour vous authentifier auprès des services Azure, notamment, mais sans s’y limiter :
- Azure SQL
- Azure AI
- Azure Cosmos DB
- Stockage Azure
- Hubs d'événements Azure
- Azure Container Registry
Vous pouvez utiliser des identités gérées pour représenter le principal qui s’authentifie auprès d’un service Azure à partir d’autres services Azure, notamment, mais sans s’y limiter :
- Azure Kubernetes Service
- Azure Container Apps
- Machines virtuelles Azure
- Azure Functions
- Azure App Service
- Azure Spring Apps
- Azure Service Fabric
Les identités gérées permettent plusieurs scénarios sécurisés où différents services Azure peuvent se connecter les uns aux autres. Voici quelques exemples :
- Création d’une identité gérée attribuée par le système pour une application dans Azure Spring Apps pour se connecter et interroger un compte Azure SQL
- Utilisation d’une identité managée affectée par l’utilisateur unique avec Azure Kubernetes Service et Azure Functions pour émettre des demandes adressées à un compte Azure AI
- Utilisation d’une identité gérée pour un compte Azure Cosmos DB pour stocker des clés dans Azure Key Vault
Pour plus d’informations, consultez Identités managées pour les ressources Azure.
Prérequis
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
- Si vous choisissez d’utiliser Azure PowerShell localement :
- Installez la dernière version du module Az PowerShell.
- Connectez-vous à votre compte Azure à l’aide de la cmdlet Connect-AzAccount.
- Si vous choisissez d’utiliser Azure Cloud Shell :
- Pour plus d’informations, consultez Vue d’ensemble d’Azure Cloud Shell.
Créer un service Azure avec une identité gérée attribuée par le système
Créez un nouveau service avec une identité gérée attribuée par le système. Cette section crée une ressource Azure Container Instances.
Utilisez
az container create
pour créer une nouvelle instance de conteneur. Configurez le compte pour utiliser une identité gérée attribuée par le système à l’aide du paramètreassign-identity
.az container create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-container>" \ --image mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled \ --cpu 1 \ --memory 2 \ --assign-identity
Obtenez les détails de l’identité gérée attribuée par le système à l’aide
az container show
et d’une requête JMESPath.az container show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-container>" \ --query "identity"
Examinez la sortie de la commande. Elle doit inclure les identificateurs uniques de l’identité et du locataire.
{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned", "userAssignedIdentities": null }
Créez un nouveau fichier Bicep pour définir une nouvelle instance de conteneur. Nommez le fichier container-instance.bicep. Définissez les propriétés de l’instance de conteneur suivantes :
Valeur name
Utiliser un paramètre nommé instanceName
location
Définir l’emplacement du groupe de ressources identity.type
SystemAssigned
properties.osType
Linux
properties.containers[0].name
aspnet-sample
properties.containers[0].properties.image
mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled
properties.containers[0].properties.resources.requests.cpu
1
properties.containers[0].properties.resources.requests.memoryInGB
2
metadata description = 'Create Azure Container Instance resource with system-assigned managed identity.' @description('Name of the Azure Container Instances resource.') param instanceName string resource instance 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = { name: instanceName location: resourceGroup().location identity: { type: 'SystemAssigned' } properties: { osType: 'Linux' containers: [ { name: 'aspnet-sample' properties: { image: 'mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled' resources: { requests: { cpu: 1 memoryInGB: 2 } } } } ] } } output systemAssignedIdentity object = instance.identity
Créez un nouveau fichier de paramètres Bicep nommé container-instance.
bicepparam
. Dans ce fichier de paramètres, créez un nom unique pour votre instance de conteneur à l’aide du paramètreinstanceName
.using './container-instance.bicep' param instanceName = '<name-of-new-container-instance>'
Déployez le modèle Bicep à l’aide de
az deployment group create
. Spécifiez le nom du modèle Bicep, du fichier de paramètres et du groupe de ressources Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "container-instance.bicepparam" \ --template-file "container-instance.bicep"
Examinez la sortie du déploiement. La sortie contient l’objet d’identité de l’instance de conteneur dans la propriété
properties.outputs.systemAssignedIdentity.value
.{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Connectez-vous au portail Azure (https://portal.azure.com).
Entrez Azure Container Instances dans la barre de recherche globale.
Dans Services, sélectionnez Instances de conteneur.
Dans le volet Instances de conteneur, sélectionnez Créer.
Dans le volet Informations de base, configurez les options suivantes, puis sélectionnez Avis+ créer :
Valeur Abonnement Sélectionnez votre abonnement Azure. Groupe de ressources Créer un groupe de ressources ou en sélectionner un Nom du conteneur Fournir un nom globalement unique Région Sélectionnez une région Azure prise en charge pour votre abonnement Conseil
Vous pouvez laisser les options non spécifiées à leur valeur par défaut.
Dans le volet Avis+ créer, attendez que la validation de votre compte se termine avec succès, puis sélectionnez Créer.
Le portail accède automatiquement au volet Déploiement. Attendez la fin du déploiement.
Une fois le déploiement terminé, sélectionnezAccéder à la ressource pour accéder à la nouvelle ressource Azure Container Instances.
Dans le volet de la nouvelle instance de conteneur, sélectionnez Identité dans la section Paramètres du menu de service.
Dans le volet Identité, activez l’identité gérée attribuée par le système en définissant l’option État sur Activé. Ensuite, sélectionnez Enregistrer et résolvez les invites pour valider la modification.
Une fois que l’identité gérée attribuée par le système est prête, passez en revue la valeur de la propriété ID de l’objet (principal). La valeur de la propriété est un identificateur unique pour l’identité.
Conseil
Dans cet exemple de capture d’écran, l’identificateur unique de l’identité gérée attribuée par le système est
bbbbbbbb-1111-2222-3333-cccccccccccc
.
Créez un objet représentant un conteneur à l’aide de
New-AzContainerInstanceObject
et stockez-le dans une variable nommée$container
. Ensuite, utilisez cet objet conteneur pour créer une instance de conteneur avecNew-AzContainerGroup
. Configurez le compte pour utiliser une identité gérée attribuée par le système en définissant le paramètreIdentityType
surSystemAssigned
.$parameters = @{ Name = "aspnet-sample" Image = "mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled" RequestCpu = 1 RequestMemoryInGb = 2 } $container = New-AzContainerInstanceObject @parameters $parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-container>" Container = $container OsType = "Linux" Location = "<azure-region>" IdentityType = "SystemAssigned" } New-AzContainerGroup @parameters
Obtenez les détails de l’identité gérée attribuée par le système à l’aide de
Get-AzContainerGroup
et deFormat-List
en sélectionnant uniquement la propriétéIdentity
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-container>" } Get-AzContainerGroup @parameters | Format-List Identity
Examinez la sortie de la commande. Elle doit inclure les identificateurs uniques de l’identité et du locataire.
Identity : { "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Créer une identité managée attribuée par l’utilisateur
Créez une identité managée affectée par l’utilisateur qui peut être utilisée avec un ou plusieurs services Azure de manière portable.
Utilisez
az identity create
pour créer une nouvelle identité managée affectée par l’utilisateur dans votre groupe de ressources Azure.az identity create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-managed-identity>"
Obtenir la liste des identités gérée attribuée par l’utilisateur dans votre groupe de ressources à l’aide de
az identity list
az identity list \ --resource-group "<name-of-existing-resource-group>"
Examinez la sortie de la commande. Enregistrez la valeur du champ
id
, car cet identificateur de ressource complet est utilisé pour attribuer l’identité managée affectée par l’utilisateur à votre ressource Azure.{ "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned", "location": "<azure-location>", "name": "msdocs-identity-example-user-assigned", "principalId": "cccccccc-dddd-eeee-3333-444444444444", "resourceGroup": "msdocs-identity-example", "systemData": null, "tags": {}, "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Remarque
Pour cet exemple, la valeur
id
serait/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
. Cet exemple utilise des données fictives et votre identificateur sera distinct de cet exemple.
Créez un fichier Bicep pour définir une iidentité managée affectée par l’utilisateur et nommez le fichier user-assigned-managed-identity.bicep. Définissez les propriétés minimales suivantes :
Valeur name
Utiliser un paramètre facultatif nommé identityName
et générer une valeur par défaut uniquelocation
Définir l’emplacement du groupe de ressources metadata description = 'Create a user-assigned managed identity.' param identityName string = uniqueString(subscription().id, resourceGroup().id) resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { name: identityName location: resourceGroup().location } output id string = identity.id output name string = identity.name
Déployez le modèle Bicep à l’aide de
az deployment group create
. Spécifiez le nom du modèle Bicep et du groupe de ressources Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file "user-assigned-managed-identity.bicep"
Examinez la sortie du déploiement. La sortie contient l’identificateur unique de l’identité gérée dans la propriété
properties.outputs.name.value
. Enregistrez cette valeur, car elle devra être utilisée lors de la création d’une ressource Azure plus loin dans ce guide.{ "type": "String", "value": "msdocs-identity-example-user-assigned" }
Remarque
Dans cet exemple, la valeur
name.value
seraitmsdocs-identity-example-user-assigned
. Cet exemple utilise des données fictives et votre identificateur sera distinct de cet exemple.
Entrez Identité gérée dans la barre de recherche globale.
Dans Services, sélectionnez Identités gérées.
Dans le volet Instances de conteneur, sélectionnez Créer.
Dans le volet Informations de base, configurez les options suivantes, puis sélectionnez Avis+ créer :
Valeur Abonnement Sélectionnez votre abonnement Azure. Groupe de ressources Créer un groupe de ressources ou en sélectionner un Région Sélectionnez une région Azure prise en charge pour votre abonnement Nom Fournir un nom globalement unique Dans le volet Avis+ créer, attendez que la validation de votre compte se termine avec succès, puis sélectionnez Créer.
Le portail accède automatiquement au volet Déploiement. Attendez la fin du déploiement.
Attendez la fin du déploiement de l’identité gérée.
Créez une nouvelle identité managée affectée par l’utilisateur à l’aide de
New-AzUserAssignedIdentity
dans votre groupe de ressources Azure.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-managed-identity>" Location = "<azure-region>" } New-AzUserAssignedIdentity @parameters
Utilisez
Get-AzUserAssignedIdentity
pour obtenir la liste des identités gérées attribuées par l’utilisateur dans votre groupe de ressources.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" } Get-AzUserAssignedIdentity @parameters | Format-List Name, Id
Examinez la sortie de la commande. Enregistrez la valeur du champ
Id
, car cet identificateur de ressource complet est utilisé pour attribuer l’identité managée affectée par l’utilisateur à votre ressource Azure.Name : msdocs-identity-example-user-assigned Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
Remarque
Pour cet exemple, la valeur
Id
serait/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
. Cet exemple utilise des données fictives et votre identificateur sera distinct de cet exemple.
Créer un service Azure avec une identité managée affectée par l’utilisateur
Attribuez l’identité managée affectée par l’utilisateur précédemment créée à un nouveau service hôte Azure. Cette section crée une ressource d’application web Azure App Services.
Créez un nouveau plan App Service à l’aide de
az appservice plan create
.az appservice plan create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-plan>"
Attribuez l’identité managée affectée par l’utilisateur à une nouvelle application web avec
az webapp create
. Utilisez le champid
enregistré précédemment dans ce guide comme valeur du paramètressign-identity
.az webapp create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-web-app>" \ --plan "<name-of-existing-plan>" \ --assign-identity "<resource-id-recorded-earlier>"
Obtenez les détails de toutes les identités attribuées à ce compte à l’aide de
az webapp show
et d’une requête JMESPath.az webapp show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-account>" \ --query "identity"
Examinez la sortie de la commande. Elle doit inclure l’identité managée affectée par l’utilisateur.
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "principalId": "cccccccc-dddd-eeee-3333-444444444444" } } }
Créez un autre fichier Bicep nommé app-service-web-app.bicep et définissez un plan Azure App Service et une application web. Définissez les propriétés des ressources suivantes :
Ressource Valeur name
Identité gérée existante Utiliser un paramètre nommé identityName
name
App service plan (Plan App Service) Utiliser un paramètre nommé planName
location
App service plan (Plan App Service) Définir l’emplacement du groupe de ressources name
Application web Utiliser un paramètre nommé webAppName
location
Application web Définir l’emplacement du groupe de ressources identity.type
UserAssigned
identity.userAssignedIdentities.{identity.id}
{}
properties.serverFarmId
plan.id
metadata description = 'Creates an Azure App Service plan and web app with a user-assigned managed identity.' @description('The name of the app service plan.') param planName string @description('The name of the web app.') param webAppName string @description('The name of the user-assigned managed identity.') param identityName string resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' existing = { name: identityName } resource plan 'Microsoft.Web/serverfarms@2023-12-01' = { name: planName location: resourceGroup().location } resource webApp 'Microsoft.Web/sites@2023-12-01' = { name: webAppName location: resourceGroup().location identity: { type: 'UserAssigned' userAssignedIdentities: { '${identity.id}': {} } } properties: { serverFarmId: plan.id } } output userAssignedIdentity object = webApp.identity
Créez un fichier de paramètres Bicep nommé app-service-web-app.
bicepparam
. Dans ce fichier de paramètres, créez un nom unique pour votre application web et pour votre plan à l’aide des paramètresplanName
etwebAppName
, respectivement. Ensuite, indiquez le nom de l’identité managée affectée par l’utilisateur comme valeur du paramètreidentityName
.using './app-service-web-app.bicep' param planName = '<name-of-new-app-service-plan>' param webAppName = '<name-of-new-web-app>' param identityName = '<name-of-existing-managed-identity>'
Déployez le modèle Bicep à l’aide de
az deployment group create
. Spécifiez le nom du modèle Bicep, du fichier de paramètres et du groupe de ressources Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "app-service-web-app.bicepparam" \ --template-file "app-service-web-app.bicep"
Examinez la sortie du déploiement. La sortie contient l’objet d’identité de l’instance de conteneur dans la propriété
properties.outputs.userAssignedIdentity.value
.{ "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "principalId": "cccccccc-dddd-eeee-3333-444444444444" } } }
Entrez Application web dans la barre de recherche globale.
Dans Services, sélectionnez App Services.
Dans le volet App Services, sélectionnez Créer, puis Application web.
Dans le volet Informations de base, configurez les options suivantes, puis sélectionnez Avis+ créer :
Valeur Abonnement Sélectionnez votre abonnement Azure. Groupe de ressources Créer un groupe de ressources ou en sélectionner un Nom Fournir un nom globalement unique Planifier Créer un nouveau plan ou sélectionner un plan existant Dans le volet Avis+ créer, attendez que la validation de votre compte se termine avec succès, puis sélectionnez Créer.
Le portail accède automatiquement au volet Déploiement. Attendez la fin du déploiement.
Une fois le déploiement terminé, sélectionnezAccéder à la ressource pour accéder à la nouvelle ressource Azure Container Instances.
Dans le volet de la nouvelle instance de conteneur, sélectionnez Identité dans la section Paramètres du menu de service.
Dans le volet Identité, sélectionnez l’option Attribuée par l’utilisateur.
Sélectionnez Ajouter pour ouvrir une boîte de dialogue pour affecter des identités gérées attribuées par l’utilisateur existantes. Dans la boîte de dialogue, sélectionnez votre identité managée affectée par l’utilisateur existante, puis sélectionnez Ajouter.
Enfin, passez en revue la liste des identités gérées attribuées par l’utilisateur associées à votre application web. Elle doit inclure le nom des identités, le nom du groupe de ressources et l’identificateur d’abonnement.
Utilisez
New-AzWebApp
pour créer une nouvelle application web Azure App Service.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-web-app>" Location = "<azure-region>" } New-AzWebApp @parameters
Corrigez l’application web nouvellement créée pour définir la propriété
identity.type
surUserAssigned
, puis ajoutez votre identité managée affectée par l’utilisateur existante à la propriétéidentity.userAssignedIdentities
. Pour accomplir cette tâche, commencez par fournir le champid
enregistré précédemment dans ce guide en tant que valeur de la variable shellidentityId
. Ensuite, créez un objet de charge utile et convertissez-le au format JSON. Enfin, utilisezInvoke-AzRestMethod
avec le verbe HTTPPATCH
pour mettre à jour l’application web existante.$identityId = "<resource-id-recorded-earlier>" $payload = @{ identity = @{ type = "UserAssigned" userAssignedIdentities = @{ "$identityId" = @{} } } } | ConvertTo-Json -Depth 3 $parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-web-app>" ResourceProviderName = 'Microsoft.Web' ResourceType = 'sites' ApiVersion = '2023-12-01' Method = 'PATCH' Payload = $payload } Invoke-AzRestMethod @parameters
Obtenez les détails de toutes les identités attribuées à l’application web à l’aide de
Get-AzWebApp
,Select-Object
etConvertTo-Json
, en sélectionnant uniquement la propriétéIdentity
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-web-app>" } Get-AzWebApp @parameters | Select-Object Identity | ConvertTo-Json -Depth 3
Examinez la sortie de la commande. Elle doit inclure les identificateurs uniques de l’identité et du locataire.
{ "Identity": { "Type": "UserAssigned", "TenantId": null, "PrincipalId": null, "UserAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "PrincipalId": "cccccccc-dddd-eeee-3333-444444444444", "ClientId": "11112222-bbbb-3333-cccc-4444dddd5555" } } } }