Erfahren Sie, wie Sie von Ihrem Scoring-Skript aus mit einem Onlineendpunkt und entweder einer systemseitig oder einer benutzerseitig zugewiesenen verwalteten Identität auf Azure-Ressourcen zugreifen können.
Sowohl verwaltete Endpunkte als auch Kubernetes-Endpunkte ermöglichen es Azure Machine Learning, den Aufwand für die Bereitstellung Ihrer Computeressourcen und die Bereitstellung Ihres Machine Learning-Modells zu verwalten. In der Regel muss Ihr Modell auf Azure-Ressourcen wie Azure Container Registry oder Ihren Blobspeicher für Rückschlüsse zugreifen. Mit einer verwalteten Identität können Sie auf diese Ressourcen zugreifen, ohne Anmeldeinformationen in Ihrem Code verwalten zu müssen. Weitere Informationen zu verwalteten Identitäten
In diesem Leitfaden wird davon ausgegangen, dass Sie keine verwaltete Identität, kein Speicherkonto und keinen Onlineendpunkt haben. Wenn Sie bereits über diese Komponenten verfügen, fahren Sie mit dem Abschnitt Erteilen von Zugriffsberechtigungen für die verwaltete Identität fort.
Für die Verwendung von Azure Machine Learning ist ein Azure-Abonnement erforderlich. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
Eine Azure-Ressourcengruppe, in der Sie (oder der von Ihnen verwendete Dienstprinzipal) Zugriff der Rollen Benutzerzugriffsadministrator und Mitwirkender haben müssen Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein Azure Machine Learning-Arbeitsbereich. Sie verfügen bereits über einen Arbeitsbereich, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein trainiertes, für die Bewertung und Bereitstellung bereites Machine Learning-Modell. Wenn Sie dem Beispiel folgen, wird ein Modell bereitgestellt.
Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Um zu vermeiden, dass Sie die Werte für Ihr Abonnement, Ihren Arbeitsbereich und Ihre Ressourcengruppe mehrfach eingeben müssen, führen Sie den folgenden Code aus:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Um dem Beispiel zu folgen, klonen Sie das Repository mit den Beispielen, und wechseln Sie dann in das Verzeichnis in cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Für die Verwendung von Azure Machine Learning ist ein Azure-Abonnement erforderlich. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
Eine Azure-Ressourcengruppe, in der Sie (oder der von Ihnen verwendete Dienstprinzipal) Zugriff der Rollen Benutzerzugriffsadministrator und Mitwirkender haben müssen Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein Azure Machine Learning-Arbeitsbereich. Sie haben einen Arbeitsbereich, wenn Sie Ihre ML-Erweiterung gemäß dem obigen Artikel konfiguriert haben.
Ein trainiertes, für die Bewertung und Bereitstellung bereites Machine Learning-Modell. Wenn Sie dem Beispiel folgen, wird ein Modell bereitgestellt.
Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Um zu vermeiden, dass Sie die Werte für Ihr Abonnement, Ihren Arbeitsbereich und Ihre Ressourcengruppe mehrfach eingeben müssen, führen Sie den folgenden Code aus:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Um dem Beispiel zu folgen, klonen Sie das Repository mit den Beispielen, und wechseln Sie dann in das Verzeichnis in cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Für die Verwendung von Azure Machine Learning ist ein Azure-Abonnement erforderlich. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
Eine Azure-Ressourcengruppe, in der Sie (oder der von Ihnen verwendete Dienstprinzipal) Zugriff der Rollen Benutzerzugriffsadministrator und Mitwirkender haben müssen Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein Azure Machine Learning-Arbeitsbereich. Sie verfügen bereits über einen Arbeitsbereich, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein trainiertes, für die Bewertung und Bereitstellung bereites Machine Learning-Modell. Wenn Sie dem Beispiel folgen, wird ein Modell bereitgestellt.
Klonen Sie das Repository mit den Beispielen, und wechseln Sie dann in das Verzeichnis.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Um diesem Notebook zu folgen, greifen Sie auf das zugehörige Beispielnotebook im Verzeichnis sdk/endpoints/online/managed/managed-identities zu.
Für dieses Beispiel werden weitere Python-Pakete benötigt:
Für die Verwendung von Azure Machine Learning ist ein Azure-Abonnement erforderlich. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
Berechtigungen zur Rollenerstellung für Ihr Abonnement oder die Azure-Ressourcen, auf die die benutzerseitig zugewiesene Identität zugreift
Eine Azure-Ressourcengruppe, in der Sie (oder der von Ihnen verwendete Dienstprinzipal) Zugriff der Rollen Benutzerzugriffsadministrator und Mitwirkender haben müssen Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein Azure Machine Learning-Arbeitsbereich. Sie verfügen bereits über einen Arbeitsbereich, wenn Sie Ihre ML-Erweiterung gemäß dem vorherigen Artikel konfiguriert haben.
Ein trainiertes, für die Bewertung und Bereitstellung bereites Machine Learning-Modell. Wenn Sie dem Beispiel folgen, wird ein Modell bereitgestellt.
Klonen Sie das Beispielrepository.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Um diesem Notebook zu folgen, greifen Sie auf das zugehörige Beispielnotebook im Verzeichnis sdk/endpoints/online/managed/managed-identities zu.
Für dieses Beispiel werden weitere Python-Pakete benötigt:
Die Identität für einen Endpunkt ist unveränderlich. Während der Erstellung eines Endpunkts können Sie diesem eine systemseitig zugewiesene Identität (Standard) oder eine benutzerseitig zugewiesene Identität zuordnen. Die Identität kann nach der Erstellung des Endpunkts nicht mehr geändert werden.
Wenn Ihr ARC- und Blobspeicher als privat konfiguriert sind, d. h. sich hinter einem virtuellen Netzwerk befinden, sollte der Zugriff vom Kubernetes-Endpunkt über die private Verbindung erfolgen, unabhängig davon, ob Ihr Arbeitsbereich öffentlich oder privat ist. Weitere Informationen zur Einstellung für private Verbindungen finden Sie unter Schützen des Arbeitsbereichs-VNet.
Konfigurieren Sie Variablen für die Bereitstellung
Konfigurieren Sie die Variablennamen für den Arbeitsbereich, den Arbeitsbereichsspeicherort und den Endpunkt, den Sie für die Verwendung mit Ihrer Bereitstellung erstellen möchten.
Geben Sie als Nächstes an, wie Sie Ihr Blobspeicherkonto, Ihren Blobcontainer und Ihre Datei nennen möchten. Diese Variablennamen werden hier definiert und im nächsten Abschnitt in den Befehlen az storage account create und az storage container create verwendet.
Durch den folgenden Code werden diese Werte als Umgebungsvariablen exportiert:
Erstellen Sie nach dem Exportieren dieser Variablen eine lokale Textdatei. Wenn der Endpunkt bereitgestellt wird, wird vom Bewertungsskript mithilfe der systemseitig zugewiesenen verwalteten Identität, die bei der Erstellung des Endpunkts generiert wird, auf diese Textdatei zugegriffen.
Legen Sie den Namen Ihres Endpunkts und Arbeitsbereichs und den Speicherort des Arbeitsbereichs fest, und exportieren Sie diesen Wert als Umgebungsvariable:
Geben Sie als Nächstes an, wie Sie Ihr Blobspeicherkonto, Ihren Blobcontainer und Ihre Datei nennen möchten. Diese Variablennamen werden hier definiert und im nächsten Abschnitt in den Befehlen az storage account create und az storage container create verwendet.
Erstellen Sie nach dem Exportieren dieser Variablen eine lokale Textdatei. Wenn der Endpunkt bereitgestellt wird, greift das Bewertungsskript auf diese Textdatei zu, indem es die benutzerseitig zugewiesene verwaltete Identität verwendet, die im Endpunkt verwendet wird.
Legen Sie den Namen Ihrer Benutzeridentität fest, und exportieren Sie diesen Wert als Umgebungsvariable:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Weisen Sie Werte für die arbeitsbereichs- und bereitstellungsbezogenen Variablen zu:
Geben Sie als Nächstes an, wie Sie Ihr Blobspeicherkonto, Ihren Blobcontainer und Ihre Datei nennen möchten. Diese Variablennamen werden hier definiert und im Code zur Erstellung des Speicherkontos und des Containers durch den StorageManagementClient und ContainerClient bezeichnet.
Nachdem diese Variablen zugewiesen wurden, erstellen Sie lokal eine Textdatei. Wenn der Endpunkt bereitgestellt wird, wird vom Bewertungsskript mithilfe der systemseitig zugewiesenen verwalteten Identität, die bei der Erstellung des Endpunkts generiert wird, auf diese Textdatei zugegriffen.
Rufen Sie jetzt einen Handle für den Arbeitsbereich und dann dessen Speicherort ab:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
Sie verwenden diesen Wert, um ein Speicherkonto zu erstellen.
Weisen Sie Werte für die arbeitsbereichs- und bereitstellungsbezogenen Variablen zu:
Geben Sie als Nächstes an, wie Sie Ihr Blobspeicherkonto, Ihren Blobcontainer und Ihre Datei nennen möchten. Diese Variablennamen werden hier definiert und im Code zur Erstellung des Speicherkontos und des Containers durch den StorageManagementClient und ContainerClient bezeichnet.
Nachdem diese Variablen zugewiesen wurden, erstellen Sie lokal eine Textdatei. Wenn der Endpunkt bereitgestellt wird, wird vom Bewertungsskript mithilfe der benutzerseitig zugewiesenen verwalteten Identität, die bei der Erstellung des Endpunkts generiert wird, auf diese Textdatei zugegriffen.
Entscheiden Sie sich für einen Namen für Ihre Benutzeridentität:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Rufen Sie jetzt einen Handle für den Arbeitsbereich und dann dessen Speicherort ab:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
Sie verwenden diesen Wert, um ein Speicherkonto zu erstellen.
Um einen Onlineendpunkt mit der CLI bereitzustellen, müssen Sie die Konfiguration in einer YAML-Datei definieren. Weitere Informationen zum YAML-Schema finden Sie im Dokument YAML-Referenz für verwalteten Onlineendpunkt.
Die YAML-Dateien in den folgenden Beispielen werden zur Erstellung von Online-Endpunkten verwendet.
Das folgende YAML-Beispiel befindet sich in Endpunkten/online/managed/managed-identities/1-sai-create-endpoint. Die Datei,
Legt den Namen fest, mit dem Sie auf den Endpunkt my-sai-endpoint verweisen wollen.
Gibt die Art der Berechtigung an, die für den Zugriff auf den Endpunkt auth-mode: key verwendet werden soll.
Angabe, dass Sie einen Endpunkt vom Typ online erstellen möchten
Zeigt an, dass der Endpunkt eine zugehörige Bereitstellung mit dem Namen blue hat.
Konfiguration der Bereitstellungsdetails (beispielsweise, welches Modell bereitgestellt und welche Umgebung und welches Bewertungsskript verwendet werden soll)
Um einen Onlineendpunkt mit der CLI bereitzustellen, müssen Sie die Konfiguration in einer YAML-Datei definieren. Weitere Informationen zum YAML-Schema finden Sie im Dokument YAML-Referenz für verwalteten Onlineendpunkt.
Die YAML-Dateien in den folgenden Beispielen werden zur Erstellung von Online-Endpunkten verwendet.
Das folgende YAML-Beispiel befindet sich in endpoints/online/managed/managed-identities/1-uai-create-endpoint. Die Datei,
Legt den Namen fest, mit dem Sie auf den Endpunkt my-uai-endpoint verweisen wollen.
Gibt die Art der Berechtigung an, die für den Zugriff auf den Endpunkt auth-mode: key verwendet werden soll.
Gibt den zu verwendenden Identitätstyp an, type: user_assigned
Angabe, dass Sie einen Endpunkt vom Typ online erstellen möchten
Zeigt an, dass der Endpunkt eine zugehörige Bereitstellung mit dem Namen blue hat.
Konfiguration der Bereitstellungsdetails (beispielsweise, welches Modell bereitgestellt und welche Umgebung und welches Bewertungsskript verwendet werden soll)
Um einen Onlineendpunkt mit dem Python SDK (v2) bereitzustellen, können Objekte verwendet werden, um die folgende Konfiguration zu definieren. Alternativ können Sie YAML-Dateien auch mit der Methode .load laden.
Das folgende Python-Endpunktobjekt:
Weist den Namen, mit dem Sie auf den Endpunkt verweisen möchten, der Variable endpoint_name zu.
Angabe des Autorisierungstyps, der für den Zugriff auf den Endpunkt auth-mode="key" verwendet werden soll.
Um einen Onlineendpunkt mit dem Python SDK (v2) bereitzustellen, können Objekte verwendet werden, um die folgende Konfiguration zu definieren. Alternativ können Sie YAML-Dateien auch mit der Methode .load laden.
Für eine benutzerseitig zugewiesene Identität definieren Sie die Endpunktkonfiguration, nachdem die benutzerseitig zugewiesene verwaltete Identität erstellt wurde.
Dieses Bereitstellungsobjekt:
Gibt an, dass die Art der Bereitstellung, die Sie erstellen möchten, eine ManagedOnlineDeployment über die Klasse ist.
Zeigt an, dass der Endpunkt eine zugehörige Bereitstellung mit dem Namen blue hat.
Konfiguriert die Details der Bereitstellung, z. B. name und instance_count.
Definiert weitere Objekte inline und ordnet sie der Bereitstellung für Model, CodeConfiguration und Environment zu.
Enthält Umgebungsvariablen, die für den Zugriff der benutzerseitig zugewiesenen verwalteten Identität auf den Speicher benötigt werden.
Fügt eine Platzhalterumgebungsvariable für UAI_CLIENT_ID hinzu, die nach dem Erstellen und vor der eigentlichen Bereitstellung dieser Konfiguration hinzugefügt wird.
deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=Model(path="../../model-1/model/"),
code_configuration=CodeConfiguration(
code="../../model-1/onlinescoring/", scoring_script="score_managedidentity.py"
),
environment=Environment(
conda_file="../../model-1/environment/conda-managedidentity.yml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
),
instance_type="Standard_DS3_v2",
instance_count=1,
environment_variables={
"STORAGE_ACCOUNT_NAME": storage_account_name,
"STORAGE_CONTAINER_NAME": storage_container_name,
"FILE_NAME": file_name,
# We will update this after creating an identity
"UAI_CLIENT_ID": "uai_client_id_place_holder",
},
)
Erstellen Sie die verwaltete Identität
Um auf Azure-Ressourcen zuzugreifen, erstellen Sie eine dem System oder dem Benutzer zugewiesene verwaltete Identität für Ihren Onlineendpunkt.
Wenn Sie einen Online-Endpunkt erstellen, wird automatisch eine vom System zugewiesene verwaltete Identität für Sie generiert, so dass Sie keine separate Identität erstellen müssen.
Um eine benutzerseitig zugewiesene verwaltete Identität zu erstellen, verwenden Sie den folgenden Befehl:
az identity create --name $UAI_NAME
Wenn Sie einen Online-Endpunkt erstellen, wird automatisch eine vom System zugewiesene verwaltete Identität für Sie generiert, so dass Sie keine separate Identität erstellen müssen.
Um eine benutzerseitig zugewiesene verwaltete Identität zu erstellen, rufen Sie zunächst einen Handle für den ManagedServiceIdentityClient ab:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
Für dieses Beispiel erstellen Sie ein Blob-Speicherkonto und einen Blob-Container und laden dann die zuvor erstellte Textdatei in den Blob-Container hoch. Sie gewähren dem Onlineendpunkt und der verwalteten Identität Zugriff auf dieses Speicherkonto und den Blobcontainer.
Laden Sie dann ein Blob in den Container mit dem ContainerClient hoch:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Erstellen eines Onlineendpunkts
Durch den folgenden Code wird ein Onlineendpunkt ohne Angabe einer Bereitstellung erstellt.
Warnung
Die Identität für einen Endpunkt ist unveränderlich. Während der Erstellung eines Endpunkts können Sie diesem eine systemseitig zugewiesene Identität (Standard) oder eine benutzerseitig zugewiesene Identität zuordnen. Die Identität kann nach der Erstellung des Endpunkts nicht mehr geändert werden.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
Überprüfen Sie den Status des Endpunkts wie folgt:
Zugriffsberechtigung für die verwaltete Identität erteilen
Wichtig
Online-Endpunkte benötigen die Azure Container Registry Pull-Berechtigung, die AcrPull-Berechtigung, für die Container Registry und die Storage Blob Data Reader-Berechtigung für den Standard-Datenspeicher des Arbeitsbereich.
Sie können dem Onlineendpunkt die Erlaubnis erteilen, über seine vom System zugewiesene verwaltete Identität auf Ihren Speicher zuzugreifen, oder der vom Benutzer zugewiesenen verwalteten Identität die Erlaubnis erteilen, auf das im vorherigen Abschnitt erstellte Speicherkonto zuzugreifen.
Rufen Sie die dem System zugewiesene verwaltete Identität ab, die für Ihren Endpunkt erstellt wurde.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Anschließend können Sie der systemseitig zugewiesenen verwalteten Identität Zugriff auf Ihren Speicher gewähren.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Abrufen der dem Benutzer zugewiesenen verwalteten Identitäts-Client-ID.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Abrufen der dem Benutzer zugewiesenen verwalteten Identitäts-ID.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Abrufen der mit dem Arbeitsbereich verbundenen Container-Registrierung.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Abrufen des Standardspeichers des Arbeitsbereichs.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Erteilen Sie der dem Benutzer zugewiesenen verwalteten Identität die Genehmigung für ein Speicherkonto.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Erteilen Sie dem Benutzer, dem eine verwaltete Identität zugewiesen wurde, die Berechtigung zur Containerregistrierung.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Erteilen Sie der dem Benutzer zugewiesenen verwalteten Identität die Berechtigung zur Speicherung im Standardarbeitsbereich.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Erstellen Sie zunächst einen AuthorizationManagementClient, um die Rollendefinitionen aufzulisten:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Initialisieren Sie nun einen, um Rollenzuweisungen vorzunehmen:
Weisen Sie als Nächstes dem Endpunkt die Rolle Storage-Blobdatenleser zu. Die Rollendefinition wird über den Namen abgerufen und zusammen mit der Prinzipal-ID des Endpunkts übergeben. Die Rolle wird im Bereich des oben erstellten Speicherkontos angewendet und ermöglicht dem Endpunkt das Lesen der Datei.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id, principal_id=system_principal_id
),
)
Erstellen Sie zunächst einen AuthorizationManagementClient, um die Rollendefinitionen aufzulisten:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Initialisieren Sie nun einen, um Rollenzuweisungen vorzunehmen:
Rufen Sie dann die Prinzipal-ID und die Client-ID der benutzerseitig zugewiesenen verwalteten Identität ab. Für die Zuweisung von Rollen benötigen Sie nur die Prinzipal-ID. Sie verwenden jedoch die Client-ID, um die Platzhalter-Umgebungsvariable UAI_CLIENT_ID zu füllen, bevor Sie die Bereitstellung erstellen.
Weisen Sie als Nächstes dem Endpunkt die Rolle Storage-Blobdatenleser zu. Die Rollendefinition wird über den Namen abgerufen und zusammen mit der Prinzipal-ID des Endpunkts übergeben. Die Rolle wird im Bereich des oben erstellten Speicherkontos angewendet, um dem Endpunkt das Lesen der Datei zu ermöglichen.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Für die nächsten beiden Berechtigungen benötigen Sie die Arbeitsbereichs- und Containerregistrierungsobjekte:
Weisen Sie als Nächstes der benutzerseitig zugewiesenen Identität die Rolle AcrPull zu. Mit dieser Rolle können Images aus einer Azure Container Registry-Instanz gepullt werden. Der Bereich wird auf der Ebene der dem Arbeitsbereich zugeordneten Containerregistrierung angewendet.
role_name = "AcrPull"
scope = container_registry
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Weisen Sie schließlich dem Endpunkt die Rolle Storage-Blobdatenleser im Bereich des Arbeitsbereichsspeicherkontos zu. Diese Rollenzuweisung ermöglicht dem Endpunkt, Blobs sowohl im Speicherkonto des Arbeitsbereichs als auch in dem neu erstellten Speicherkonto zu lesen.
Die Rolle hat denselben Namen und dieselben Funktionen wie die erste, oben zugewiesene Rolle, sie wird jedoch in einem anderen Bereich angewendet und hat eine andere ID.
role_name = "Storage Blob Data Reader"
scope = workspace.storage_account
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Bewertungsskript für den Zugriff auf Azure-Ressourcen
Anhand des folgenden Skripts können Sie nachvollziehen, wie Sie mit Ihrem Identitäts-Token auf Azure-Ressourcen zugreifen, in diesem Szenario auf das in den vorherigen Abschnitten erstellte Speicherkonto.
import os
import logging
import json
import numpy
import joblib
import requests
from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobClient
def access_blob_storage_sdk():
credential = ManagedIdentityCredential(client_id=os.getenv("UAI_CLIENT_ID"))
storage_account = os.getenv("STORAGE_ACCOUNT_NAME")
storage_container = os.getenv("STORAGE_CONTAINER_NAME")
file_name = os.getenv("FILE_NAME")
blob_client = BlobClient(
account_url=f"https://{storage_account}.blob.core.windows.net/",
container_name=storage_container,
blob_name=file_name,
credential=credential,
)
blob_contents = blob_client.download_blob().content_as_text()
logging.info(f"Blob contains: {blob_contents}")
def get_token_rest():
"""
Retrieve an access token via REST.
"""
access_token = None
msi_endpoint = os.environ.get("MSI_ENDPOINT", None)
msi_secret = os.environ.get("MSI_SECRET", None)
# If UAI_CLIENT_ID is provided then assume that endpoint was created with user assigned identity,
# # otherwise system assigned identity deployment.
client_id = os.environ.get("UAI_CLIENT_ID", None)
if client_id is not None:
token_url = (
msi_endpoint + f"?clientid={client_id}&resource=https://storage.azure.com/"
)
else:
token_url = msi_endpoint + f"?resource=https://storage.azure.com/"
logging.info("Trying to get identity token...")
headers = {"secret": msi_secret, "Metadata": "true"}
resp = requests.get(token_url, headers=headers)
resp.raise_for_status()
access_token = resp.json()["access_token"]
logging.info("Retrieved token successfully.")
return access_token
def access_blob_storage_rest():
"""
Access a blob via REST.
"""
logging.info("Trying to access blob storage...")
storage_account = os.environ.get("STORAGE_ACCOUNT_NAME")
storage_container = os.environ.get("STORAGE_CONTAINER_NAME")
file_name = os.environ.get("FILE_NAME")
logging.info(
f"storage_account: {storage_account}, container: {storage_container}, filename: {file_name}"
)
token = get_token_rest()
blob_url = f"https://{storage_account}.blob.core.windows.net/{storage_container}/{file_name}?api-version=2019-04-01"
auth_headers = {
"Authorization": f"Bearer {token}",
"x-ms-blob-type": "BlockBlob",
"x-ms-version": "2019-02-02",
}
resp = requests.get(blob_url, headers=auth_headers)
resp.raise_for_status()
logging.info(f"Blob contains: {resp.text}")
def init():
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# For multiple models, it points to the folder containing all deployed models (./azureml-models)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Model loaded")
# Access Azure resource (Blob storage) using system assigned identity token
access_blob_storage_rest()
access_blob_storage_sdk()
logging.info("Init complete")
# note you can pass in multiple rows for scoring
def run(raw_data):
logging.info("Request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Erstellen Sie eine Bereitstellung mit Ihrer Konfiguration
Diese Bereitstellung dauert etwa acht bis 14 Minuten – je nachdem, ob die zugrunde liegende Umgebung bzw. das zugrunde liegende Image zum ersten Mal erstellt wird. Nachfolgende Bereitstellungen mit der gleichen Umgebung sind schneller.
az ml online-deployment create --endpoint-name $ENDPOINT_NAME --all-traffic --name blue --file endpoints/online/managed/managed-identities/2-sai-deployment.yml --set environment_variables.STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME environment_variables.STORAGE_CONTAINER_NAME=$STORAGE_CONTAINER_NAME environment_variables.FILE_NAME=$FILE_NAME
Hinweis
Der Wert des --name-Arguments kann den name-Schlüssel in der YAML-Datei außer Kraft setzen.
Überprüfen Sie den Status der Bereitstellung.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Von der init-Methode im Bewertungsskript wird die Datei aus Ihrem Speicherkonto unter Verwendung des Tokens der systemseitig zugewiesenen verwalteten Identität gelesen.
Die Ausgabe der init-Methode kann im Bereitstellungsprotokoll mit dem folgenden Code überprüft werden.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
Hinweis
Der Wert des --name-Arguments kann den name-Schlüssel in der YAML-Datei außer Kraft setzen.
Sobald der Befehl ausgeführt wurde, können Sie den Status der Bereitstellung überprüfen.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Hinweis
Von der init-Methode im Bewertungsskript wird die Datei aus Ihrem Speicherkonto unter Verwendung des Tokens der benutzerseitig zugewiesenen verwalteten Identität gelesen.
Die Ausgabe der init-Methode kann im Bereitstellungsprotokoll mit dem folgenden Code überprüft werden.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Von der init-Methode im Bewertungsskript wird die Datei aus Ihrem Speicherkonto unter Verwendung des Tokens der systemseitig zugewiesenen verwalteten Identität gelesen.
Die Ausgabe der init-Methode kann im Bereitstellungsprotokoll mit dem folgenden Code überprüft werden.
Von der init-Methode im Bewertungsskript wird die Datei aus Ihrem Speicherkonto unter Verwendung des Tokens der benutzerseitig zugewiesenen verwalteten Identität gelesen.
Die Ausgabe der init-Methode kann im Bereitstellungsprotokoll mit dem folgenden Code überprüft werden.
Wenn Ihre Bereitstellung abgeschlossen ist, werden das Modell, die Umgebung und der Endpunkt in Ihrem Azure Machine Learning-Arbeitsbereich registriert.
Testen des Endpunkts
Sobald Ihr Onlineendpunkt bereitgestellt ist, testen und bestätigen Sie seinen Betrieb mit einer Anforderung. Details zum Rückschluss variieren von Modell zu Modell. Für diesen Leitfaden sehen die JSON-Abfrageparameter wie folgt aus:
Wenn Sie den bereitgestellten Onlineendpunkt und den Speicher nicht mehr benötigen, löschen Sie sie, um Kosten zu sparen. Durch das Löschen des Endpunkts werden auch alle zugeordneten Bereitstellungen gelöscht.