Bezpieczne przechowywanie poświadczeń dostępu na maszynie wirtualnej usługi Azure Nauka o danych

Kod aplikacji w chmurze często zawiera poświadczenia do uwierzytelniania w usługach w chmurze. Zarządzanie tymi poświadczeniami i ich zabezpieczenia to dobrze znane wyzwanie, ponieważ tworzymy aplikacje w chmurze. Najlepiej, aby poświadczenia nigdy nie pojawiały się na stacjach roboczych deweloperów. Nigdy nie powinniśmy zaewidencjonować poświadczeń do kontroli źródła.

Funkcja tożsamości zarządzanych dla zasobów platformy Azure pomaga rozwiązać problem. Zapewnia ona usługom platformy Azure automatycznie zarządzaną tożsamość w usłudze Microsoft Entra ID. Tej tożsamości można użyć do uwierzytelniania w dowolnej usłudze obsługującej uwierzytelnianie firmy Microsoft Entra. Ponadto ta tożsamość pozwala uniknąć umieszczania wszelkich osadzonych poświadczeń w kodzie.

Aby zabezpieczyć poświadczenia, użyj Instalatora Windows (MSI) w połączeniu z usługą Azure Key Vault. Azure Key Vault to zarządzana usługa platformy Azure, która bezpiecznie przechowuje wpisy tajne i klucze kryptograficzne. Dostęp do magazynu kluczy można uzyskać przy użyciu tożsamości zarządzanej, a następnie pobrać autoryzowane wpisy tajne i klucze kryptograficzne z magazynu kluczy.

Dokumentacja usługi Key Vault i tożsamości zarządzanych dla zasobów platformy Azure stanowi kompleksowy zasób, aby uzyskać szczegółowe informacje o tych usługach. W tym artykule przedstawiono podstawowe użycie tożsamości usługi zarządzanej i usługi Key Vault na maszynie wirtualnej Nauka o danych (DSVM) w celu uzyskania dostępu do zasobów platformy Azure.

Tworzenie tożsamości zarządzanej na maszynie 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

Przypisywanie uprawnień dostępu usługi Key Vault do jednostki maszyny wirtualnej

# 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

Uzyskiwanie dostępu do wpisu tajnego w magazynie kluczy z maszyny 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"

Uzyskiwanie dostępu do kluczy magazynu z maszyny 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.

Uzyskiwanie dostępu do magazynu kluczy z poziomu języka 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))

Uzyskiwanie dostępu do magazynu kluczy za pomocą interfejsu wiersza polecenia platformy Azure

# 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>