Klucze i wpisy tajne w usłudze Azure Key Vault

Ukończone

Większość aplikacji sieciowych musi pracować z wpisami tajnymi, takimi jak parametry połączenia bazy danych lub hasła. W przypadku uczenia maszynowego na platformie Azure zwykle używamy wpisów tajnych do uzyskiwania dostępu do danych treningowych lub patrzenie na wyniki. Szczególnie podczas pracy z danymi prywatnymi ważne jest, aby upewnić się, że wpisy tajne są prawidłowo zarządzane.

Nie przechowuj wpisów tajnych w kodzie źródłowym

Przechowywanie wpisów tajnych w kodzie źródłowym jest niepraktyczne i antywzór zabezpieczeń. Jest to z wielu powodów:

  • Zmiana haseł oznacza aktualizowanie kodu źródłowego, co może oznaczać ponowne kompilowanie i ponowne publikowanie aplikacji.
  • Zakodowane wpisy tajne sprawiają, że praca z różnymi środowiskami, takimi jak środowiska przejściowe i produkcyjne, staje się niezręczna. Zwiększa to również ryzyko nieumyślnej modyfikacji lub zniszczenia danych środowiska produkcyjnego podczas opracowywania.
  • Wszystkie osoby z dostępem do kodu źródłowego uzyskują dostęp do wszystkich wpisów tajnych. To sprawia, że niemal niemożliwe jest zapewnienie, że tylko starsi członkowie zespołu mają dostęp do poufnych zasobów. Oznacza to również, że udostępnianie lub wyciek kodu źródłowego zapewnia również osobom zewnętrznym klucze zabezpieczeń.
  • Kontrola źródła, taka jak git, zwykle zachowuje stare hasła w historii. Oznacza to, że przyszli członkowie zespołu uzyskują dostęp do wszystkich haseł historycznych.

Jedną z najlepszych alternatyw dla przechowywania wpisów tajnych w kodzie źródłowym jest udostępnienie ich w środowisku aplikacji. W tym wzorcu aplikacja żąda wpisów tajnych ze środowiska, a następnie używa ich do łączenia się z wymaganymi zasobami. Wymienione wyżej wady przechowywania wpisów tajnych w kodzie źródłowym są wyeliminowane, o ile każde środowisko ma różne wartości wpisów tajnych, takie jak różne hasła umożliwiające dostęp do niektórych zasobów.

Azure Key Vault

Usługa Azure Key Vault zapewnia bezpieczny magazyn ogólnych wpisów tajnych dla aplikacji w środowiskach hostowanych na platformie Azure. Można przechowywać dowolny typ wpisu tajnego, o ile jego wartość nie jest większa niż 25 kb i może być odczytywana i zwracana jako ciąg. Wpisy tajne są nazwane, a ich typ zawartości (taki jak hasło lub certyfikat) może być opcjonalnie przechowywany wraz z wartością, aby podać wskazówkę, która pomaga w interpretowaniu podczas pobierania.

Wpisy tajne przechowywane w usłudze Azure Key Vault są szyfrowane opcjonalnie na poziomie sprzętu. Jest to obsługiwane w sposób niewidoczny i nie wymaga żadnej akcji od użytkownika ani aplikacji żądającej wpisów tajnych. Można je również tymczasowo wyłączyć i automatycznie aktywować lub wygasać w określonym dniu.

Jak działa Key Vault z Azure Machine Learning

Podczas tworzenia obszaru roboczego Azure Machine Learning program automatycznie tworzy Key Vault. Aby wyświetlić Key Vault platformy Azure skojarzone z obszarem roboczym, otwórz kartę Przegląd obszaru roboczego. Magazyn kluczy jest wyświetlany po prawej stronie.

Screenshot showing the Azure portal with a Azure Machine Learning workspace overview.

Po pierwszym utworzeniu obszaru roboczego Key Vault zostaną automatycznie utworzone. Dostęp do Key Vault można uzyskać za pośrednictwem aplikacji. Możesz na przykład użyć usługi Azure Shell, aby ustawić zmienną środowiskową przechowującą nazwę magazynu kluczy i zapisać hasło do tego magazynu kluczy w następujący sposób:

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

To hasło jest przechowywane bezpiecznie i jest szyfrowane. Na przykład aplikacja języka Python korzystająca z zestawu SDK Azure Machine Learning może uzyskać dostęp do tego klucza w następujący sposób:

''' 
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}'")

Dane wyjściowe to oryginalne hasło, które przechowywaliśmy:

Your secret is 'hVFkk965BuUv' 

Praca z przebiegami zdalnymi

Powyższe rozwiązanie zapewnia ogólne rozwiązanie do korzystania z Key Vault. Zazwyczaj w przypadku Azure Machine Learning będziesz wykonywać kod za pośrednictwem zdalnego uruchamiania.

Standardowy przepływ używania wpisów tajnych w tym kontekście to:

  • Zaloguj się do platformy Azure i połącz się z obszarem roboczym.
  • Ustawianie wpisu tajnego w Key Vault obszaru roboczego
  • Prześlij przebieg zdalny, a następnie
  • W ramach zdalnego przebiegu pobierz wpis tajny z Key Vault i użyj go.

W przypadku korzystania z zestawu SDK języka Python i przebiegu można łatwo uzyskać dostęp do wpisów tajnych bezpośrednio. Dzieje się tak, ponieważ przesłany przebieg jest świadomy jego obszaru roboczego. Przykład:

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

A generic image of a key vault authenticator.

Dowiedz się więcej

Aby uzyskać więcej informacji na temat używania wpisów tajnych do zabezpieczania danych i uzyskiwania do nich dostępu, zalecamy następujące zasoby: