Stocker des informations d’identification d’accès en toute sécurité sur une machine virtuelle de science des données (DSVM) Azure

Le code d’application cloud contient souvent des informations d’identification pour l’authentification auprès des services cloud. La gestion et la sécurité de ces informations d’identification est un enjeu bien connu dans la création d’applications cloud. Dans l’idéal, les informations d’identification ne doivent jamais s’afficher sur les stations de travail de développement. Nous ne devons jamais archiver les informations d’identification pour le contrôle de code source.

La fonctionnalité des identités managées pour les ressources Azure permet de résoudre ce problème. Elle fournit aux services Azure une identité automatiquement managée dans Microsoft Entra ID. Vous pouvez utiliser cette identité pour authentifier tous les services qui prennent en charge l’authentification Microsoft Entra. En outre, cette identité évite de placer les informations d’identification incorporées dans votre code.

Pour sécuriser les informations d’identification, utilisez Windows Installer (MSI) en combinaison avec Azure Key Vault. Azure Key Vault est un service Azure managé qui stocke en toute sécurité les secrets et les clés de chiffrement. Vous pouvez accéder à un coffre de clés à l’aide de l’identité managée et y récupérer les secrets et les clés de chiffrement autorisés.

La documentation sur Key Vault et les identités managées pour les ressources Azure contient des informations complètes et détaillées sur ces services. Cet article décrit l’utilisation de base de MSI et de Key Vault sur Data Science Virtual Machine (DSVM) pour accéder à des ressources Azure.

Créer une identité gérée sur la machine virtuelle DSVM

# Prerequisite: You already created a Data Science VM in the usual way.

# Create an identity principal for the VM.
az vm assign-identity -g <Resource Group Name> -n <Name of the VM>
# Get the principal ID of the DSVM.
az resource list -n <Name of the VM> --query [*].identity.principalId --out tsv

Assigner des autorisations d’accès à Key Vault à un principal de machine virtuelle

# Prerequisite: You already created an empty Key Vault resource on Azure through use of the Azure portal or Azure CLI.

# Assign only get and set permissions but not the capability to list the keys.
az keyvault set-policy --object-id <Principal ID of the DSVM from previous step> --name <Key Vault Name> -g <Resource Group of Key Vault>  --secret-permissions get set

Accéder à un secret dans le coffre de clés à partir de la machine virtuelle DSVM

# Get the access token for the VM.
x=`curl http://localhost:50342/oauth2/token --data "resource=https://vault.azure.net" -H Metadata:true`
token=`echo $x | python -c "import sys, json; print(json.load(sys.stdin)['access_token'])"`

# Access the key vault by using the access token.
curl https://<Vault Name>.vault.azure.net/secrets/SQLPasswd?api-version=2016-10-01 -H "Authorization: Bearer $token"

Accéder aux clés de stockage à partir de la machine virtuelle DSVM

# Prerequisite: You granted your VMs MSI access to use storage account access keys, based on instructions at https://learn.microsoft.com/azure/active-directory/managed-service-identity/tutorial-linux-vm-access-storage. This article describes the process in more detail.

y=`curl http://localhost:50342/oauth2/token --data "resource=https://management.azure.com/" -H Metadata:true`
ytoken=`echo $y | python -c "import sys, json; print(json.load(sys.stdin)['access_token'])"`
curl https://management.azure.com/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup of Storage account>/providers/Microsoft.Storage/storageAccounts/<Storage Account Name>/listKeys?api-version=2016-12-01 --request POST -d "" -H "Authorization: Bearer $ytoken"

# Now you can access the data in the storage account from the retrieved storage account keys.

Accéder au coffre de clés à partir de Python

from azure.keyvault import KeyVaultClient
from msrestazure.azure_active_directory import MSIAuthentication

"""MSI Authentication example."""

# Get credentials.
credentials = MSIAuthentication(
    resource='https://vault.azure.net'
)

# Create a Key Vault client.
key_vault_client = KeyVaultClient(
    credentials
)

key_vault_uri = "https://<key Vault Name>.vault.azure.net/"

secret = key_vault_client.get_secret(
    key_vault_uri,  # Your key vault URL.
    # The name of your secret that already exists in the key vault.
    "SQLPasswd",
    ""              # The version of the secret; empty string for latest.
)
print("My secret value is {}".format(secret.value))

Accéder au coffre de clés à partir d’Azure CLI

# With managed identities for Azure resources set up on the DSVM, users on the DSVM can use Azure CLI to perform the authorized functions. The following commands enable access to the key vault from Azure CLI, without a required Azure account login.
# Prerequisites: MSI is already set up on the DSVM, as indicated earlier. Specific permissions, like accessing storage account keys, reading specific secrets, and writing new secrets, are provided to the MSI.

# Authenticate to Azure CLI without a required Azure account. 
az login --msi

# Retrieve a secret from the key vault. 
az keyvault secret show --vault-name <Vault Name> --name SQLPasswd

# Create a new secret in the key vault.
az keyvault secret set --name MySecret --vault-name <Vault Name> --value "Helloworld"

# List access keys for the storage account.
az storage account keys list -g <Storage Account Resource Group> -n <Storage Account Name>