Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez des identités managées pour les ressources Azure pour exécuter du code dans Azure Container Instances qui interagit avec d’autres services Azure. Vous n’avez pas besoin de conserver de secrets ou d’informations d’identification dans le code. La fonctionnalité fournit un déploiement Container Instances avec une identité managée automatiquement dans l’ID Microsoft Entra.
Dans cet article, vous allez en savoir plus sur les identités managées dans Container Instances. Vous aussi :
- Activez une identité affectée par l’utilisateur ou affectée par le système dans un groupe de conteneurs.
- Autoriser l’identité à accéder au coffre de clés Azure.
- Pour accéder à un Key Vault depuis un conteneur en cours d'exécution, utilisez l'identité managée.
Adaptez les exemples pour activer et utiliser des identités dans Container Instances pour accéder à d’autres services Azure. Ces exemples sont interactifs. Dans la pratique, vos images conteneur exécutent du code pour accéder aux services Azure.
Pourquoi utiliser une identité managée ?
Utilisez une identité managée dans un conteneur en cours d’exécution pour vous authentifier sur n’importe quel service prenant en charge l’authentification Microsoft Entra, sans avoir à gérer les informations d’identification dans le code de votre conteneur. Pour les services qui ne prennent pas en charge l’authentification Microsoft Entra, vous pouvez stocker des secrets dans un coffre de clés Azure et utiliser l’identité managée pour accéder au coffre de clés pour récupérer les informations d’identification. Pour plus d’informations sur l’utilisation d’une identité managée, consultez Qu’est-ce que les identités managées pour les ressources Azure ?.
Activer une identité managée
Lorsque vous créez un groupe de conteneurs, activez une ou plusieurs identités managées en définissant une propriété ContainerGroupIdentity. Vous pouvez également activer ou mettre à jour des identités managées après l’exécution d’un groupe de conteneurs. L’une ou l’autre action entraîne le redémarrage du groupe de conteneurs. Pour définir les identités sur un groupe de conteneurs nouveau ou existant, utilisez Azure CLI, un modèle Azure Resource Manager, un fichier YAML ou un autre outil Azure.
Container Instances prend en charge les deux types d’identités Azure managées : attribuées par l’utilisateur et affectées par le système. Sur un groupe de conteneurs, vous pouvez activer une identité attribuée par le système, une ou plusieurs identités attribuées par l’utilisateur, ou les deux types d’identités. Si vous n’êtes pas familiarisé avec les identités managées pour les ressources Azure, consultez la présentation.
Utiliser une identité managée
Pour utiliser une identité managée, l’identité doit être autorisée à accéder à une ou plusieurs ressources de service Azure (par exemple, une application web, un coffre de clés ou un compte de stockage) dans l’abonnement. L’utilisation d’une identité managée dans un conteneur en cours d’exécution est similaire à l’utilisation d’une identité dans une machine virtuelle Azure. Pour plus d’informations, consultez les instructions pour utiliser un jeton, Azure PowerShell ou Azure CLI, ou les SDKs Azure.
Prérequis
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour obtenir plus d’informations, consultez Démarrage d’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 obtenir d’autres options de connexion, consultez S’authentifier auprès d’Azure à l’aide d’Azure CLI.
Quand vous y êtes invité, installez l’extension Azure CLI à la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer 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.
- Cet article demande la version 2.0.49 ou ultérieure d’Azure CLI. Si vous utilisez Azure Cloud Shell, la dernière version est déjà installée.
Créer un coffre de clés Azure
Les exemples de cet article utilisent une identité managée dans Container Instances pour accéder à un secret Azure Key Vault.
Commencez par créer un groupe de ressources nommé myResourceGroup à l’emplacement eastus à l’aide de la commande az group create suivante :
az group create --name myResourceGroup --location eastus
Utilisez la commande az keyvault create pour créer un coffre de clés. Veillez à spécifier un nom de coffre de clés unique.
az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus
Stockez un exemple de secret dans le coffre de clés à l’aide de la commande az keyvault secret set :
az keyvault secret set \
--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault
Poursuivez avec les exemples suivants pour accéder au coffre de clés à l’aide d’une identité managée affectée par l’utilisateur ou affectée par le système dans Container Instances.
Exemple 1 : Utiliser une identité affectée par l’utilisateur pour accéder au coffre de clés Azure
Créer une identité
Commencez par créer une identité dans votre abonnement à l’aide de la commande az identity create . Vous pouvez utiliser le même groupe de ressources que celui utilisé pour créer le coffre de clés. Vous pouvez également utiliser un autre.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Pour utiliser l’identité dans les étapes suivantes, utilisez la commande az identity show pour stocker l’ID de principal de service et l’ID de ressource de l’identité dans des variables.
# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query id --output tsv)
Autoriser l’identité attribuée par l’utilisateur à accéder au coffre de clés
Exécutez la commande az keyvault set-policy suivante pour définir une stratégie d’accès sur le coffre de clés. L’exemple suivant permet à l’identité affectée par l’utilisateur d’obtenir des secrets du coffre de clés :
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Activer une identité attribuée par l’utilisateur dans un groupe de conteneurs
Exécutez la commande az container create suivante pour créer une instance de conteneur basée sur une image azure-cli de Microsoft. Cet exemple fournit un groupe de conteneurs unique que vous pouvez utiliser de manière interactive pour exécuter Azure CLI pour accéder à d’autres services Azure. Dans cette section, seul le système d’exploitation de base est utilisé. Pour obtenir un exemple d’utilisation d’Azure CLI dans le conteneur, consultez Activer l’identité attribuée par le système sur un groupe de conteneurs.
Le paramètre --assign-identity passe votre identité managée attribuée par l’utilisateur au groupe. Cette commande longue laisse le conteneur s’exécuter. Cet exemple utilise le même groupe de ressources que celui utilisé pour créer le coffre de clés, mais vous pouvez en spécifier un autre.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $RESOURCE_ID \
--command-line "tail -f /dev/null"
Dans quelques secondes, vous devez obtenir une réponse à partir d’Azure CLI qui indique que le déploiement s’est terminé. Vérifiez son état à l’aide de la commande az container show.
az container show \
--resource-group myResourceGroup \
--name mycontainer
La section identity de la sortie ressemble à l’exemple suivant, ce qui montre que l’identité est définie dans le groupe de conteneurs. Le principalID sous userAssignedIdentities est le service principal de l’identité que vous avez créée dans Microsoft Entra ID :
[...]
"identity": {
"principalId": "null",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
}
},
[...]
Utiliser une identité attribuée par l’utilisateur pour obtenir un secret du coffre de clés
Vous pouvez désormais utiliser l’identité managée dans l’instance de conteneur en cours d’exécution pour accéder au coffre de clés. Tout d’abord, ouvrez un interpréteur de commandes Bash dans le conteneur :
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Exécutez les commandes suivantes dans l’interpréteur de commandes Bash dans le conteneur. Pour obtenir un jeton d’accès pour utiliser l’ID Microsoft Entra pour s’authentifier auprès du coffre de clés, exécutez la commande suivante :
client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s
Sortie :
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}
Pour stocker le jeton d’accès dans une variable qui pourra être utilisée dans les prochaines commandes pour l’authentification, exécutez la commande suivante :
TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')
Utilisez maintenant le jeton d’accès pour vous authentifier auprès du coffre de clés et lire un secret. Veillez à remplacer le nom de votre coffre de clés dans l’URL (https://mykeyvault.vault.azure.net/...)°:
curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"
La réponse ressemble à l’exemple suivant qui montre le secret. Dans votre code, vous analysez cette sortie pour obtenir le secret. Utilisez ensuite le code secret dans une opération ultérieure pour accéder à une autre ressource Azure.
{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}
Exemple 2 : Utiliser une identité affectée par le système pour accéder à un coffre de clés Azure
Activer une identité attribuée par le système dans un groupe de conteneurs
Exécutez la commande az container create suivante pour créer une instance de conteneur basée sur une image azure-cli de Microsoft. Cet exemple fournit un groupe de conteneurs unique que vous pouvez utiliser de manière interactive pour exécuter Azure CLI pour accéder à d’autres services Azure.
Le paramètre --assign-identity sans autre valeur active une identité gérée assignée par le système sur le groupe. L’identité est limitée au groupe de ressources du groupe de conteneurs. Cette commande longue laisse le conteneur s’exécuter. Cet exemple utilise le même groupe de ressources que celui utilisé pour créer le coffre de clés, qui se trouve dans l’étendue de l’identité.
# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)
# Create container group with system-managed identity
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity --scope $RG_ID \
--command-line "tail -f /dev/null"
Dans quelques secondes, vous devez obtenir une réponse à partir d’Azure CLI indiquant que le déploiement est terminé. Vérifiez son état à l’aide de la commande az container show.
az container show \
--resource-group myResourceGroup \
--name mycontainer
La section identity de la sortie ressemble à l'exemple suivant, qui montre qu'une identité attribuée par le système est créée dans Microsoft Entra ID.
[...]
"identity": {
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]
Définissez une variable sur la valeur principalId (l’ID du principal de service) de l’identité, pour une utilisation ultérieure.
SP_ID=$(az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)
Autoriser le groupe de conteneurs à accéder au coffre de clés
Exécutez la commande az keyvault set-policy suivante pour définir une stratégie d’accès sur le coffre de clés. L’exemple suivant permet à l’identité managée attribuée par le système d’obtenir des secrets du coffre de clés :
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Utiliser une identité de groupe de conteneurs pour obtenir un secret du coffre de clés
Maintenant, vous pouvez utiliser l’identité managée pour accéder au coffre de clés dans l’instance de conteneur en cours d’exécution. Tout d’abord, ouvrez un interpréteur de commandes Bash dans le conteneur :
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Exécutez les commandes suivantes dans l’interpréteur de commandes Bash dans le conteneur. Tout d’abord, connectez-vous à Azure CLI à l’aide de l’identité managée :
az login --identity
À partir du conteneur en cours d’exécution, récupérez le secret du coffre de clés :
az keyvault secret show \
--name SampleSecret \
--vault-name mykeyvault --query value
La valeur du secret est récupérée :
"Hello Container Instances"
Activer l’identité managée à l’aide d’un modèle Resource Manager
Pour activer une identité managée dans un groupe de conteneurs à l’aide d’un modèle Resource Manager, définissez la identity propriété de l’objet Microsoft.ContainerInstance/containerGroups avec un ContainerGroupIdentity objet. Dans les extraits de code suivants, la propriété identity est configurée pour différents scénarios. Pour plus d’informations, consultez la référence du modèle Resource Manager. Spécifiez une version apiVersion minimale de 2018-10-01.
Identité attribuée par l’utilisateur
Une identité affectée par l’utilisateur est un ID de ressource du formulaire suivant :
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"
Vous pouvez activer une ou plusieurs identités attribuées par l’utilisateur.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
Identité attribuée par le système
"identity": {
"type": "SystemAssigned"
}
Identités gérées par le système et gérées par l'utilisateur
Sur un groupe de conteneurs, vous pouvez activer à la fois une identité attribuée par le système, et une ou plusieurs identités attribuées par l’utilisateur.
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
Activer l’identité managée à l’aide d’un fichier YAML
Pour activer une identité managée dans un groupe de conteneurs déployé à l’aide d’un fichier YAML, incluez le code YAML suivant.
Spécifiez une version apiVersion minimale de 2018-10-01.
Identité attribuée par l’utilisateur
Une identité affectée par l’utilisateur est un ID de ressource du formulaire suivant :
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'
Vous pouvez activer une ou plusieurs identités attribuées par l’utilisateur.
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Identité attribuée par le système
identity:
type: SystemAssigned
Identités gérées par le système et gérées par l'utilisateur
Sur un groupe de conteneurs, vous pouvez activer à la fois une identité attribuée par le système, et une ou plusieurs identités attribuées par l’utilisateur.
identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Identité managée sur les conteneurs Windows
L’identité managée sur les groupes de conteneurs Windows fonctionne différemment des groupes de conteneurs Linux. Pour Windows conteneurs, le serveur de métadonnées (169.254.169.254) n'est pas disponible pour obtenir un jeton Microsoft Entra. Au lieu de cela, envoyez une demande de jeton à IDENTITY_ENDPOINT et incluez IDENTITY_HEADER en tant qu’en-tête de secret. Azure injecte IDENTITY_ENDPOINT et IDENTITY_HEADER en tant que variables d’environnement dans le conteneur.
Créer un groupe de conteneurs Windows avec une identité managée
Exécutez la commande az container create suivante pour créer un groupe de conteneurs Windows avec une identité managée affectée par l’utilisateur. Remplacez le groupe de ressources, le nom et l’ID de ressource d’identité par vos propres valeurs.
az container create \
--resource-group myResourceGroup \
--name mywindowscontainer \
--image mcr.microsoft.com/windows/nanoserver:1809 \
--assign-identity $RESOURCE_ID \
--os-type windows \
--command-line "ping -t localhost"
Récupérer un jeton dans un conteneur Windows
Si vous utilisez une identité managée assignée par l’utilisateur, incluez principalId dans la demande. Si vous utilisez une identité managée affectée par le système, omettez principalId.
curl -G "%IDENTITY_ENDPOINT%" ^
--data-urlencode "resource=https://vault.azure.net" ^
--data-urlencode "principalId=<principal-id>" ^
-H "secret: %IDENTITY_HEADER%"
Exemple de requête PowerShell :
$identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "aaaaaaaa-bbbb-cccc-1111-222222222222"
$response = Invoke-RestMethod -Uri $identityEndpoint `
-Method Get `
-Headers @{ secret = $identityHeader } `
-Body @{ resource = $resource; principalId = $principalId } `
-ContentType "application/x-www-form-urlencoded"
$response.access_token
La az login commande et les bibliothèques clientes qui dépendent du serveur de métadonnées (169.254.169.254) ne fonctionnent pas dans un conteneur Windows.
Les conteneurs Windows dans un réseau virtuel ne peuvent pas se connecter au point de terminaison de l’identité managée. Par conséquent, vous ne pouvez pas générer de jeton d’identité managée dans ce scénario.
Tip
Pour une identité attribuée par l’utilisateur, incluez son principalId dans la requête de jeton, comme indiqué dans le script précédent. Pour une identité affectée par le système , omettez principalId.
Exemple : lire un objet blob stockage Azure à partir d’un conteneur Windows
Cet exemple de bout en bout déploie un groupe de conteneurs Windows avec une identité affectée par l’utilisateur, puis utilise cette identité à partir du conteneur pour télécharger un objet blob.
Tout d’abord, accordez à l’identité affectée par l’utilisateur l’accès au compte de stockage (une seule fois). Le rôle Lecteur de données blob du stockage est suffisant pour télécharger un objet blob :
PRINCIPAL_ID=$(az identity show --resource-group myResourceGroup --name myACIId --query principalId --output tsv)
STORAGE_ID=$(az storage account show --name mystorageaccount --query id --output tsv)
az role assignment create \
--assignee-object-id $PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal \
--role "Storage Blob Data Reader" \
--scope $STORAGE_ID
Ensuite, déployez le groupe de conteneurs Windows à l’aide d’un fichier YAML (deploy-aci.yaml). La commande de longue durée maintient le groupe actif afin que vous puissiez y az container exec entrer :
apiVersion: '2023-05-01'
location: eastus
name: mywindowscg
type: Microsoft.ContainerInstance/containerGroups
identity:
type: UserAssigned
userAssignedIdentities:
'/subscriptions/<subscriptionId>/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId': {}
properties:
osType: Windows
restartPolicy: Always
containers:
- name: mycontainer
properties:
image: mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022
command:
- pwsh
- -NoProfile
- -Command
- 'while ($true) { Start-Sleep -Seconds 3600 }'
resources:
requests:
cpu: 2
memoryInGB: 4
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Une fois le groupe en cours d’exécution, ouvrez un interpréteur de commandes PowerShell dans le conteneur :
az container exec \
--resource-group myResourceGroup \
--name mywindowscg \
--container-name mycontainer \
--exec-command "pwsh"
Dans le shell du conteneur, demandez un jeton limité au stockage et utilisez-le pour télécharger l’objet blob. Comme le conteneur n’inclut pas l’interface de ligne de commande Azure, transmettez directement le principalId de l’identité :
$principalId = "<user-assigned-identity-principalId>"
$storageAccount = "mystorageaccount"
$container = "mycontainer"
$blob = "hello.txt"
$tokenResponse = Invoke-RestMethod -Uri $env:IDENTITY_ENDPOINT `
-Method Get `
-Headers @{secret = $env:IDENTITY_HEADER} `
-Body @{resource = "https://storage.azure.com/"; principalId = $principalId} `
-ContentType "application/x-www-form-urlencoded"
$blobUrl = "https://$storageAccount.blob.core.windows.net/$container/$blob"
Invoke-WebRequest -Uri $blobUrl `
-Headers @{ Authorization = "Bearer $($tokenResponse.access_token)"; "x-ms-version" = "2023-11-03" } `
-OutFile "C:\$blob"
Get-Content "C:\$blob"
Le conteneur s’authentifie auprès du stockage en utilisant uniquement son identité managée. Adaptez la resource valeur et le point de terminaison de destination pour appeler d’autres services Azure.
Contenu connexe
- En savoir plus sur les identités managées pour les ressources Azure.
- Consultez un exemple de Kit de développement logiciel (SDK) Azure Go utilisant une identité managée pour accéder à un coffre de clés à partir de Container Instances.