Verwenden von Geheimnissen als Anmeldeinformationen für die Authentifizierung in Azure Machine Learning-Trainingsaufträgen
GILT FÜR: Python SDK azureml v1
In diesem Artikel erfahren Sie, wie Sie Geheimnisse sicher in Trainingsaufträgen verwenden. Authentifizierungsinformationen (wie etwa Ihr Benutzername und Ihr Kennwort) sind Geheimnisse. Wenn Sie beispielsweise eine Verbindung mit einer externen Datenbank herstellen möchten, um Trainingsdaten abzufragen, müssen Sie Ihren Benutzernamen und Ihr Kennwort an den Kontext des Remoteauftrags übergeben. Das Codieren solcher Werte in Trainingsskripts in Klartext ist unsicher, da so das Geheimnis verfügbar gemacht wird.
Daher ist Ihrem Azure Machine Learning-Arbeitsbereich eine Ressource namens Azure Key Vault zugeordnet. Verwenden Sie diese Key Vault-Instanz, um Geheimnisse über eine Gruppe von APIs aus dem Azure Machine Learning Python SDK sicher an Remoteaufträge zu übergeben.
Der Standardablauf für das Verwenden von Geheimnissen sieht wie folgt aus:
- Melden Sie sich auf einem lokalen Computer bei Azure an, und stellen Sie eine Verbindung mit Ihrem Arbeitsbereich her.
- Legen Sie auf dem lokalen Computer ein Geheimnis in der Key Vault-Instanz des Arbeitsbereichs fest.
- Übermitteln Sie einen Remoteauftrag.
- Rufen Sie innerhalb des Remoteauftrags das Geheimnis aus der Key Vault-Instanz ab, und verwenden Sie es.
Festlegen von Geheimnissen
In Azure Machine Learning enthält die Klasse Keyvault Methoden zum Festlegen von Geheimnissen. Rufen Sie in Ihrer lokalen Python-Sitzung zunächst einen Verweis auf die Key Vault-Instanz Ihres Arbeitsbereichs ab, und verwenden Sie dann die Methode set_secret()
, um ein Geheimnis mit Name und Wert festzulegen. Die set_secret-Methode aktualisiert den Geheimniswert, wenn der Name bereits vorhanden ist.
from azureml.core import Workspace
from azureml.core import Keyvault
import os
ws = Workspace.from_config()
my_secret = os.environ.get("MY_SECRET")
keyvault = ws.get_default_keyvault()
keyvault.set_secret(name="mysecret", value = my_secret)
Schreiben Sie den Wert des Geheimnisses nicht in Python-Code, weil es unsicher ist, den Wert als Klartext in einer Datei zu speichern. Rufen Sie den Wert des Geheimnisses stattdessen aus einer Umgebungsvariablen, z. B. Azure DevOps-Buildgeheimnis, oder aus einer interaktiven Benutzereingabe ab.
Geheimnisnamen können mithilfe der Methode list_secrets()
aufgelistet werden. Mit set_secrets() steht außerdem eine Batchversion zur Verfügung, mit der Sie mehrere Geheimnisse gleichzeitig festlegen können.
Wichtig
Mit list_secrets()
werden nur Geheimnisse aufgelistet, die mit dem Azure Machine Learning SDK durch set_secret()
oder set_secrets()
erstellt wurden. Es werden keine Geheimnisse aufgelistet, die von einem anderen als diesem SDK erstellt wurden. Beispielsweise wird ein Geheimnis, das mit dem Azure-Portal oder der Azure PowerShell erstellt wurde, nicht aufgeführt.
Sie können get_secret()
verwenden, um einen Geheimniswert aus dem Schlüsseltresor abzurufen, unabhängig davon, wie er erstellt wurde. Sie können also Geheimnisse abrufen, die nicht von list_secrets()
aufgelistet werden.
Abrufen geheimer Schlüssel
In Ihrem lokalen Code können Sie die Methode get_secret()
verwenden, um den Geheimniswert anhand des Namens abzurufen.
Verwenden Sie für Aufträge mit Übermittlung von Experiment.submit
die Methode get_secret()
mit der Klasse Run
. Da die übermittelte Ausführung ihren Arbeitsbereich kennt, umgeht diese Methode die Arbeitsbereichsinstanziierung und gibt den Geheimniswert direkt zurück.
# Code in submitted job
from azureml.core import Experiment, Run
run = Run.get_context()
secret_value = run.get_secret(name="mysecret")
Achten Sie darauf, dass Sie den Geheimniswert nicht dadurch verfügbar machen, dass Sie ihn schreiben oder drucken.
Mit get_secrets() steht auch eine Batchversion zur Verfügung, mit der Sie gleichzeitig auf mehrere Geheimnisse zugreifen können.