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.
Les applications ou les processus qui s’exécutent directement sur un serveur avec Azure Arc peut tirer parti des identités managées pour accéder à d’autres ressources Azure qui prennent en charge l’authentification basée sur Microsoft Entra ID. Une application peut obtenir un jeton d’accès représentant son identité, qui est affectée par le système pour les serveurs avec Azure Arc et l’utiliser comme jeton de porteur pour s’authentifier auprès d’un autre service.
Pour obtenir une description détaillée des identités managées et la distinction entre les identités affectées par le système et les identités affectées par l’utilisateur, consultez la vue d’ensemble de l’identité managée.
Dans cet article, vous allez découvrir comment un serveur peut utiliser une identité managée affectée par le système pour accéder à Azure Key Vault. Azure Key Vault permet à votre application cliente d’utiliser un secret pour accéder aux ressources qui ne sont pas sécurisées par l’ID Microsoft Entra. Par exemple, Azure Key Vault peut stocker des certificats TLS/SSL utilisés par vos serveurs web IIS et déployer en toute sécurité les certificats sur des serveurs Windows ou Linux en dehors d’Azure.
Vue d’ensemble de la sécurité
Lorsque vous intégrez votre serveur à des serveurs avec Azure Arc et que vous le configurez pour utiliser une identité managée, plusieurs actions se produisent (comme ce qui se passe pour une machine virtuelle Azure) :
Azure Resource Manager reçoit une demande d’activation de l’identité managée affectée par le système sur le serveur Azure Arc.
Azure Resource Manager crée un principal de service dans Microsoft Entra ID pour représenter l’identité du serveur. Le principal de service est créé dans le locataire Microsoft Entra ID approuvé par cet abonnement.
Azure Resource Manager configure l’identité sur le serveur en mettant à jour le point de terminaison d’identité IMDS (Azure Instance Metadata Service) pour Windows ou Linux avec l’ID client et le certificat du principal de service. Le point de terminaison est un point de terminaison REST accessible uniquement à partir du serveur à l’aide d’une adresse IP non routable connue. Ce service fournit un sous-ensemble d’informations de métadonnées sur le serveur Azure Arc pour faciliter sa gestion et sa configuration.
L’environnement d’un serveur avec identité managée est configuré avec les variables suivantes sur un serveur avec Azure Arc :
IMDS_ENDPOINT : adresse IP du point
http://localhost:40342de terminaison IMDS pour les serveurs avec Azure Arc.IDENTITY_ENDPOINT : point de terminaison
http://localhost:40342/metadata/identity/oauth2/tokenlocalhost correspondant à l’identité managée du service.
Le code exécuté sur le serveur peut demander un jeton au point de terminaison d’Azure Instance Metadata Service, qui est accessible uniquement à partir du serveur.
Les applications peuvent récupérer les variables d’environnement système IDENTITY_ENDPOINT et IMDS_ENDPOINT valeurs et les utiliser pour découvrir ces points de terminaison. Les applications avec n’importe quel niveau d’accès peuvent effectuer des demandes aux points de terminaison. Les réponses de métadonnées sont gérées normalement et accordées à n’importe quel processus sur la machine. Toutefois, lorsqu’une demande expose un jeton, le client doit fournir un secret pour attester qu’il est en mesure d’accéder aux données disponibles uniquement pour les utilisateurs disposant de privilèges supérieurs.
Conditions préalables
Avant de commencer, assurez-vous que les prérequis suivants sont en place :
Compréhension des identités managées.
Un serveur connecté aux serveurs avec Azure Arc.
Sur Windows, vous devez être membre du groupe local
Administratorsou duHybrid Agent Extension Applicationsgroupe. Sur Linux, vous devez être membre duhimdsgroupe.Vous devez disposer du rôle Propriétaire dans l’abonnement Ou le groupe de ressources Azure qui contient les serveurs avec Arc afin d’effectuer les étapes de création de ressources et de gestion des rôles requises.
Azure Key Vault pour stocker et récupérer vos informations d’identification et affecter l’accès d’identité Azure Arc au Coffre de clés.
- Pour configurer l’accès par l’identité managée utilisée par le serveur, consultez Accorder l’accès pour Linux ou Accorder l’accès pour Windows. Lorsque vous entrez le nom de votre machine virtuelle, utilisez le nom du serveur avec Azure Arc.
Acquérir un jeton d’accès à l’aide de l’API REST
La méthode permettant d’obtenir et d’utiliser une identité managée affectée par le système pour s’authentifier auprès des ressources Azure est similaire à la méthode utilisée avec une machine virtuelle Azure.
Pour un serveur Windows avec Azure Arc, utilisez PowerShell pour appeler la requête web qui obtient le jeton de l’hôte local sur le port spécifique. Spécifiez la requête à l’aide de l’adresse IP ou de la variable environnementale IDENTITY_ENDPOINT.
$apiVersion = "2020-06-01"
$resource = "https://management.azure.com/"
$endpoint = "{0}?resource={1}&api-version={2}" -f $env:IDENTITY_ENDPOINT,$resource,$apiVersion
$secretFile = ""
try
{
Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'} -UseBasicParsing
}
catch
{
$wwwAuthHeader = $_.Exception.Response.Headers["WWW-Authenticate"]
if ($wwwAuthHeader -match "Basic realm=.+")
{
$secretFile = ($wwwAuthHeader -split "Basic realm=")[1]
}
}
Write-Host "Secret file path: " $secretFile`n
$secret = cat -Raw $secretFile
$response = Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'; Authorization="Basic $secret"} -UseBasicParsing
if ($response)
{
$token = (ConvertFrom-Json -InputObject $response.Content).access_token
Write-Host "Access token: " $token
}
La réponse ressemble à ce qui suit :
Pour un serveur Linux avec Azure Arc, utilisez Bash pour appeler la requête web qui obtient le jeton de l’hôte local sur le port spécifique. Spécifiez la requête suivante à l’aide de l’adresse IP ou de la variable environnementale IDENTITY_ENDPOINT. Pour effectuer cette étape, vous avez besoin d’un client SSH.
CHALLENGE_TOKEN_PATH=$(curl -s -D - -H Metadata:true "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com" | grep Www-Authenticate | cut -d "=" -f 2 | tr -d "[:cntrl:]")
CHALLENGE_TOKEN=$(cat $CHALLENGE_TOKEN_PATH)
if [ $? -ne 0 ]; then
echo "Could not retrieve challenge token, double check that this command is run with root privileges."
else
curl -s -H Metadata:true -H "Authorization: Basic $CHALLENGE_TOKEN" "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com"
fi
La réponse ressemble à ce qui suit :
Remarque
L’exemple précédent demande un jeton d’accès à utiliser avec les API REST ARM lorsque la variable de ressource est définie sur https://management.azure.com. Si vous avez besoin d’un jeton d’accès pour un autre service Azure, remplacez la variable de ressource dans le script par la valeur de ressource correcte. Pour vous authentifier auprès du stockage Azure, consultez Microsoft Authentication Library (MSAL). Pour terminer la configuration pour s’authentifier auprès d’Azure Key Vault, consultez Access Key Vault avec Windows ou Access Key Vault avec Linux.
Contenu connexe
- En savoir plus sur Azure Key Vault.
- Découvrez comment attribuer un accès d’identité managée à une ressource à l’aide du portail Azure, de PowerShell ou d’Azure CLI.