Nycklar och hemligheter med Azure Key Vault

Slutförd

De flesta nätverksanslutna program måste arbeta med hemligheter, till exempel databasanslutningssträngar eller lösenord. När vi utför maskininlärning i Azure använder vi vanligtvis hemligheter för att komma åt träningsdata eller titta på resultat. Särskilt när du arbetar med privata data är det viktigt att se till att hemligheterna hanteras korrekt.

Lagra inte hemligheter i källkoden

Att lagra hemligheter i källkoden är opraktiskt och ett antimönster för säkerhet. Det här är av flera orsaker:

  • Att ändra lösenord innebär att uppdatera källkoden, vilket kan innebära att program återskapas och publiceras igen.
  • Hårdkodade hemligheter gör det svårt att arbeta med olika miljöer, till exempel mellanlagrings- och produktionsmiljöer. Detta ökar också risken för oavsiktliga ändringar eller destruktion av produktionsmiljödata under utvecklingen.
  • Alla personer med åtkomst till källkoden får åtkomst till alla hemligheter. Detta gör det nästan omöjligt att se till att endast seniora teammedlemmar har åtkomst till känsliga resurser. Det innebär också att all delning, eller läckage, av källkoden även ger externa parter dina säkerhetsnycklar.
  • Källkontroll, till exempel git, behåller vanligtvis gamla lösenord i historiken. Det innebär att framtida teammedlemmar får åtkomst till alla historiska lösenord.

Ett av de bästa alternativen till att lagra hemligheter i källkoden är att göra dem tillgängliga i programmiljön. I det här mönstret begär programmet hemligheter från miljön och använder dem sedan för att ansluta till de nödvändiga resurserna. De tidigare nämnda nackdelarna med att lagra hemligheter i källkoden elimineras, så länge varje miljö har olika hemliga värden, till exempel olika lösenord för att få åtkomst till vissa resurser.

Azure Key Vault

Azure Key Vault säker lagring av allmänna hemligheter för program i Azure-värdbaserade miljöer. Alla typer av hemligheter kan lagras, så länge dess värde inte är större än 25 kb och det kan läsas och returneras som en sträng. Hemligheter namnges och deras innehållstyp (till exempel lösenord eller certifikat) kan lagras tillsammans med värdet för att ge ett tips som hjälper till vid tolkning när de hämtas.

Hemligheter som lagras Azure Key Vault krypteras, eventuellt på maskinvarunivå. Detta hanteras transparent och kräver ingen åtgärd från användaren eller programmet som begär hemligheterna. De kan också inaktiveras tillfälligt och automatiskt aktiveras eller upphöra att gälla vid ett visst datum.

Så Key Vault fungerar med Azure Machine Learning

När du skapar en Azure Machine Learning arbetsyta skapas automatiskt en Key Vault. Om du vill Azure Key Vault som är associerad med din arbetsyta öppnar du arbetsytans översiktsflik. Ditt nyckelvalv visas till höger.

Skärmbild som visar Azure Portal med en Azure Machine Learning översikt över arbetsytan.

När du först skapar arbetsytan skapas Key Vault automatiskt. Den Key Vault kan nås via ditt program. Du kan till exempel använda Azure Shell för att ange en miljövariabel som innehåller key store-namnet och spara ett lösenord i nyckellagret så här:

# export the name of the vault to an environmental variable 
export KEY_VAULT_NAME=<your-unique-keyvault-name> 
 
# Save a new secret, called ExamplePassword 
az keyvault secret set --vault-name $KEY_VAULT_NAME --name "ExamplePassword" --value "hVFkk965BuUv" 

Det här lösenordet lagras på ett säkert sätt och krypteras. Ett Python-program som använder Azure Machine Learning SDK kan till exempel komma åt den här nyckeln på följande sätt:

''' 
Simple example of obtaining a secret from the keyvault. 
Assumes azure-identity and azure-keyvault-secrets have been 
pip installed 
''' 
 
import os 
from azure.keyvault.secrets import SecretClient 
from azure.identity import DefaultAzureCredential 
 
# Get the key vault name 
keyVaultName = os.environ["KEY_VAULT_NAME"] 
  
 
# Create a client to access the secret 
credential = DefaultAzureCredential() 
client = SecretClient(vault_url= f"https://{keyVaultName}.vault.azure.net", credential=credential) 
 
# Get a secret and print it to the console 
# Note that printing out passwords is bad practice and only  
# performed here for learning purposes 
retrieved_secret = client.get_secret("ExamplePassword") 
print(f"Your secret is '{retrieved_secret.value}'") 

Utdata är det ursprungliga lösenordet som vi lagrade:

Your secret is 'hVFkk965BuUv' 

Arbeta med fjärrkörningar

Ovanstående ger en allmän lösning för att använda Key Vault. Med Azure Machine Learning kör du vanligtvis kod via en fjärrkörning.

Standardflödet för att använda hemligheter i den här kontexten är:

  • Logga in på Azure och anslut till din arbetsyta.
  • Ange en hemlighet i Arbetsytans Key Vault,
  • Skicka en fjärrkörning och sedan
  • I fjärrkörningen hämtar du hemligheten från Key Vault och använder den.

När du använder Python SDK och en körning kan du enkelt komma åt hemligheter direkt. Det beror på att en skickad körning känner till dess arbetsyta. Exempel:

# Code in submitted run 
from azureml.core import Experiment, Run 
 
run = Run.get_context() 
secret_value = run.get_secret(name=" ExamplePassword")

En allmän bild av en nyckelvalvsauutenticator.

Läs mer

Om du vill ha mer information om hur du använder hemligheter för att skydda och komma åt dina data rekommenderar vi följande resurser: