オンライン エンドポイントのクライアントを認証する
[アーティクル] 2024/09/03
9 人の共同作成者
フィードバック
この記事の内容
前提条件
ユーザー ID を準備する
ID にアクセス許可を割り当てる
コントロール プレーン操作用の Microsoft Entra トークンを取得する
エンドポイントの作成
デプロイの作成
エンドポイントのスコアリング URI を取得する
データ プレーン操作用のキーまたはトークンを取得する
キーまたはトークンを使用してデータにスコアを付ける
トラフィックのログと監視
関連するコンテンツ
さらに 7 個を表示
適用対象: Azure CLI ml extension v2 (現行) Python SDK azure-ai-ml v2 (現行)
この記事では、オンライン エンドポイントでコントロール プレーンおよびデータ プレーンの操作を実行するためにクライアントを認証する方法について説明します。
"コントロール プレーン操作" により、エンドポイントの制御と変更を行います。 コントロール プレーン操作には、オンライン エンドポイントとオンライン デプロイの作成、読み取り、更新、削除 (CRUD) 操作が含まれます。
"データ プレーン操作" では、エンドポイントを変更せずに、データを使用してオンライン エンドポイントと対話します。 たとえば、データ プレーン操作を、オンライン エンドポイントへのスコアリング要求の送信と応答の取得で構成することができます。
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
オンライン エンドポイントでコントロール プレーン操作 (つまり、CRUD 操作) およびデータ プレーン操作 (つまり、スコアリング要求の送信) を実行するには、ユーザー ID が必要です。 コントロール プレーン操作とデータ プレーン操作に同じユーザー ID を使用することも、異なるユーザー ID を使用することもできます。 この記事では、コントロール プレーン操作とデータ プレーン操作の両方に同じユーザー ID を使用します。
Microsoft Entra ID の下にユーザー ID を作成するには、「認証の設定 」を参照してください。 ID は後で必要になります。
このセクションでは、エンドポイントとの対話に使用するユーザー ID にアクセス許可を割り当てます。 まず、組み込みロールを使用するか、カスタム役割を作成します。 その後、ロールをユーザー ID に割り当てます。
AzureML Data Scientist
組み込みロール を使うと、エンドポイントとデプロイを管理して使用できます。ここでは、次の "コントロール プレーン" RBAC アクションを含めるためにワイルドカードを使用します。
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action
"データ プレーン" の次の RBAC アクションを含めます。
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action
必要に応じて、Azure Machine Learning Workspace Connection Secrets Reader
組み込みロールを使ってワークスペース接続からシークレットにアクセスできます。これには、次の "コントロール プレーン" RBAC アクションが含まれます。
Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action
Microsoft.MachineLearningServices/workspaces/metadata/secrets/read
これらの組み込みロールを使用する場合、この手順で必要なアクションはありません。
組み込みロールまたは他の事前に作成されたカスタム役割を使用する場合は、この手順をスキップできます。
ロールの JSON 定義を作成して、カスタム役割のスコープとアクションを定義します。 たとえば、次のロールの定義を使用すると、ユーザーは、指定したワークスペースでオンライン エンドポイントの CRUD を実行できます。
custom-role-for-control-plane.json :
{
"Name": "Custom role for control plane operations - online endpoint",
"IsCustom": true,
"Description": "Can CRUD against online endpoints.",
"Actions": [
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write",
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete",
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read",
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action",
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action",
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
]
}
次のロールの定義を使用すると、ユーザーは、指定したワークスペースでオンライン エンドポイントにスコアリング要求を送信できます。
custom-role-for-scoring.json :
{
"Name": "Custom role for scoring - online endpoint",
"IsCustom": true,
"Description": "Can score against online endpoints.",
"Actions": [
"Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
]
}
JSON 定義を使用してカスタム役割を作成します。
az role definition create --role-definition custom-role-for-control-plane.json --subscription <subscriptionId>
az role definition create --role-definition custom-role-for-scoring.json --subscription <subscriptionId>
Note
カスタム役割を作成するには、次の 3 つのロールのいずれかが必要です。
owner
ユーザー アクセス管理者
Microsoft.Authorization/roleDefinitions/write
アクセス許可 (カスタム役割の作成、更新、削除) と、Microsoft.Authorization/roleDefinitions/read
アクセス許可 (カスタム役割の表示) を持つカスタム役割。
カスタム ロールの作成の詳細については、「Azure カスタム ロール 」を参照してください。
ロールの定義を確認します。
az role definition list --custom-role-only -o table
az role definition list -n "Custom role for control plane operations - online endpoint"
az role definition list -n "Custom role for scoring - online endpoint"
export role_definition_id1=`(az role definition list -n "Custom role for control plane operations - online endpoint" --query "[0].id" | tr -d '"')`
export role_definition_id2=`(az role definition list -n "Custom role for scoring - online endpoint" --query "[0].id" | tr -d '"')`
AzureML Data Scientist
組み込みロールを使用している場合、次のコードを使用して、ロールをユーザー ID に割り当てます。
az role assignment create --assignee <identityId> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
必要に応じて、Azure Machine Learning Workspace Connection Secrets Reader
組み込みロールを使っている場合、次のコードを使って、ロールをユーザー ID に割り当てます。
az role assignment create --assignee <identityId> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
カスタム役割を使用している場合は、次のコードを使用して、ロールをユーザー ID に割り当てます。
az role assignment create --assignee <identityId> --role "Custom role for control plane operations - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
az role assignment create --assignee <identityId> --role "Custom role for scoring - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Note
カスタム役割をユーザー ID に割り当てるには、次の 3 つのロールのいずれかが必要です。
owner
ユーザー アクセス管理者
Microsoft.Authorization/roleAssignments/write
アクセス許可 (カスタム役割の割り当て) と、Microsoft.Authorization/roleAssignments/read
(ロールの割り当ての表示) を許可するカスタム役割。
さまざまな Azure ロールとそのアクセス許可の詳細については、「Azure ロール 」およびAzure portal を使用した Azure ロールの割り当て に関するページを参照してください。
ロールの割り当てを確認します。
az role assignment list --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
コントロール プレーン操作用の Microsoft Entra トークンを取得する
トークンを直接使用する REST API を使用してコントロール プレーン操作を実行する予定の場合 、この手順を行います。
Azure Machine Learning CLI (v2)、Python SDK (v2)、Azure Machine Learning スタジオなどの他の方法を使用する予定の場合、Microsoft Entra トークンを手動で取得する必要はありません。 サインイン時に、ユーザー ID は既に認証されており、トークンは自動的に取得されて渡されます。
"コントロール" プレーン操作用の Microsoft Entra トークンは、Azure リソース エンドポイント (https://management.azure.com
) から取得できます。
Azureにログインします。
az login
特定の ID を使用する場合は、次のコードを使用して、その ID でサインインします。
az login --identity --username <identityId>
次のコンテキストを使用してトークンを取得します。
export CONTROL_PLANE_TOKEN=`(az account get-access-token --resource https://management.azure.com --query accessToken | tr -d '"')`
Azure 仮想マシンから
Azure VM のマネージド ID に基づいてトークンを取得できます (VM でマネージド ID が有効になっている場合)。
Azure VM 上のコントロール プレーン操作用の Microsoft Entra トークン (aad_token
) を取得するには、Azure リソース エンドポイント management.azure.com
の Azure Instance Metadata Service (IMDS) エンドポイントに要求を送信します。
export CONTROL_PLANE_TOKEN=`(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s | jq -r '.access_token' )`
ヒント
JSON 出力からトークンを抽出するために、例として jq
ユーティリティが使用されています。 ただし、この目的に適した任意のツールを使用できます。
マネージド ID に基づいてトークンを取得する方法の詳細については、「HTTP を使用してトークンを取得する 」を参照してください。
コンピューティング インスタンスから
Azure Machine Learning ワークスペースのコンピューティング インスタンスを使用する場合は、トークンを取得できます。 トークンを取得するには、クライアント ID と、コンピューティング インスタンスのマネージド ID のシークレットを、コンピューティング インスタンスでローカルに構成されているマネージド システム ID (MSI) エンドポイントに渡す必要があります。 MSI エンドポイント、クライアント ID、シークレットはそれぞれ、環境変数 MSI_ENDPOINT
、DEFAULT_IDENTITY_CLIENT_ID
、MSI_SECRET
から取得できます。 これらの変数は、コンピューティング インスタンスのマネージド ID を有効にすると自動的に設定されます。
ワークスペースのコンピューティング インスタンスから Azure リソース エンドポイント management.azure.com
のトークンを取得します。
export CONTROL_PLANE_TOKEN=`(curl $MSI_ENDPOINT'?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F&clientid='$DEFAULT_IDENTITY_CLIENT_ID -H Metadata:true -H Secret:$MSI_SECRET -s | jq -r '.access_token' )`
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
try:
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
access_token = credential.get_token("https://management.azure.com/.default")
print(access_token)
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
# This will open a browser page for
credential = InteractiveBrowserCredential()
詳細については、「Azure ID クライアント ライブラリを使用してトークンを取得する 」を参照してください。
スタジオでは、コントロール プレーン操作用の Microsoft Entra トークンは公開されません。
(省略可能) Microsoft Entra トークンのリソース エンドポイントとクライアント ID を確認する
Microsoft Entra トークンを取得した後、jwt.ms を介してトークンをデコードすると、次の情報を含む json 応答が返され、そのトークンが適切な Azure リソース エンドポイント management.azure.com
および適切なクライアント ID 用であることを確認できます。
{
"aud": "https://management.azure.com",
"oid": "<your-object-id>"
}
次の例では、エンドポイント ID としてシステム割り当て ID (SAI) を使用してエンドポイントを作成します。 SAI は、エンドポイント用マネージド ID の既定の ID の種類です。 SAI には、一部の基本ロールが自動的に割り当てられます。 システム割り当て ID のロールの割り当ての詳細については、「エンドポイント ID のロールの自動割り当て 」を参照してください。
CLI では、コントロール プレーン トークンを明示的に指定する必要はありません。 代わりに、CLI az login
がサインインの間にユーザーの認証を行い、トークンが自動的に取得されてユーザーに渡されます。
エンドポイント定義 YAML ファイルを作成します。
endpoint.yml :
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: aad_token
auth_mode
は、キー認証の場合はkey
に、Azure Machine Learning トークン認証の場合は aml_token
に置き換えることができます。この例では、Microsoft Entra トークン認証に aad_token
を使用しています。
az ml online-endpoint create -f endpoint.yml
エンドポイントの状態を確認します。
az ml online-endpoint show -n my-endpoint
エンドポイントの作成時に auth_mode
を (たとえば、aad_token
に) オーバーライドする場合は、次のコードを実行します。
az ml online-endpoint create -n my-endpoint --auth_mode aad_token
既存のエンドポイントを作成更新し、auth_mode
を (たとえば、aad_token
に) 指定する場合、次のコードを実行します。
az ml online-endpoint update -n my-endpoint --set auth_mode=aad_token
REST API 呼び出しでは、コントロール プレーン トークンを明示的に指定する必要があります。 前に取得したコントロール プレーン トークンを使用します。
エンドポイントを作成または更新します。
export SUBSCRIPTION_ID=<SUBSCRIPTION_ID>
export RESOURCE_GROUP=<RESOURCE_GROUP>
export WORKSPACE=<AML_WORKSPACE_NAME>
export ENDPOINT_NAME=<ENDPOINT_NAME>
export LOCATION=<LOCATION_NAME>
export API_VERSION=2023-04-01
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $CONTROL_PLANE_TOKEN" \
--data-raw "{
\"identity\": {
\"type\": \"systemAssigned\"
},
\"properties\": {
\"authMode\": \"AADToken\"
},
\"location\": \"$LOCATION\"
}")
echo $response
authMode
は、キー認証の場合はkey
に、Azure Machine Learning トークン認証の場合は AMLToken
に置き換えることができます。この例では、Microsoft Entra トークン認証に AADToken
を使用しています。
オンライン エンドポイントの現在の状態を取得します。
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $CONTROL_PLANE_TOKEN" \
)
echo $response
Python SDK では、コントロール プレーン トークンを明示的に指定する必要はありません。 代わりに、SDK MLClient
がサインインの間にユーザーの認証を行い、トークンが自動的に取得されてユーザーに渡されます。
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
endpoint = ManagedOnlineEndpoint(
name="my-endpoint",
description="this is a sample online endpoint",
auth_mode="aad_token",
tags={"foo": "bar"},
)
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
auth_mode
は、キー認証の場合はkey
に、Azure Machine Learning トークン認証の場合は aml_token
に置き換えることができます。この例では、Microsoft Entra トークン認証に aad_token
を使用しています。
デプロイを作成するには、「オンライン エンドポイントを使用して ML モデルをデプロイする 」または「REST を使用してオンライン エンドポイントとしてモデルをデプロイする 」を参照してください。 さまざまな認証モードのデプロイの作成方法に違いはありません。
次のコードは、デプロイを作成する方法の例です。 オンライン エンドポイントのデプロイの詳細については、「オンライン エンドポイントを使用して ML モデルをデプロイする (CLI を使用) 」を参照してください
デプロイ定義 YAML ファイルを作成します。
blue-deployment.yml :
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-aad-auth-endp1
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
YAML ファイルを使用してデプロイを作成します。 この例では、すべてのトラフィックを新しいデプロイに設定します。
az ml online-deployment create -f blue-deployment.yml --all-traffic
CLI を使用してエンドポイントを呼び出す予定の場合、スコアリング URI は CLI によって自動的に処理されるため、明示的に取得する必要はありません。 ただし、REST API などの他のチャネルで使用できるようにするために、CLI を使用してスコアリング URI を取得することはできます。
scoringUri=$(az ml online-endpoint show -n my-endpoint --query "scoring_uri")
export SUBSCRIPTION_ID=<SUBSCRIPTION_ID>
export RESOURCE_GROUP=<RESOURCE_GROUP>
export WORKSPACE=<AML_WORKSPACE_NAME>
export ENDPOINT_NAME=<ENDPOINT_NAME>
export API_VERSION=2023-04-01
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $CONTROL_PLANE_TOKEN")
scoringUri=$(echo $response | jq -r '.properties' | jq -r '.scoringUri')
echo $response
echo $scoringUri
Python SDK を使用してエンドポイントを呼び出す予定の場合、スコアリング URI は SDK によって自動的に処理されるため、明示的に取得する必要はありません。 ただし、REST API などの他のチャネルで使用できるようにするために、SDK を使用してスコアリング URI を取得することはできます。
scoring_uri = ml_client.online_endpoints.get(name=endpoint_name).scoring_uri
スタジオを使用してエンドポイントを呼び出す予定の場合、スコアリング URI はスタジオによって自動的に処理されるため、明示的に取得する必要はありません。 ただし、REST API などの他のチャネルで使用できるようにするために、スタジオを使用してスコアリング URI を取得することはできます。
スコアリング URI は、エンドポイントのページの [詳細] タブで確認できます。
データ プレーン操作用のキーまたはトークンを取得する
キーまたはトークンを取得するプロセスがコントロール プレーン操作であっても、そのキーまたはトークンをデータ プレーン操作に使用できます。 つまり、コントロール プレーン トークンを使用してキーまたはトークンを取得し、それを、後でデータ プレーン操作を実行するために使用することができます。
"キー" または "Azure Machine Learning トークン" を取得するには、「コントロール プレーン操作の認証 」 で説明されているように、それを要求しているユーザー ID に適切なロールが割り当てられている必要があります。
"Microsoft Entra トークン" を取得するために、ユーザー ID にそれ以外のロールは必要ありません。
CLI を使ってエンドポイントを呼び出す場合、データ プレーン操作のためのキーまたはトークンは CLI によって自動的に処理されるため、ユーザーがそれを明示的に取得する必要はありません。 ただし、REST API などの他のチャネルで使用できるよう、CLI を使ってデータ プレーン操作のためのキーまたはトークンを取得することはできます。
データ プレーン操作用のキーまたはトークンを取得するには、az ml online-endpoint get-credentials コマンドを使います。 このコマンドは、キー、トークン、その他の情報を含む JSON 出力を返します。
ヒント
JSON 出力から特定の情報を抽出するため、CLI コマンドの --query
パラメーターを例として使います。 ただし、この目的に適した任意のツールを使用できます。
エンドポイントの auth_mode
が key
のとき
キーは primaryKey
と secondaryKey
フィールドで返されます。
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query primaryKey)
export DATA_PLANE_TOKEN2=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query secondaryKey)
エンドポイントの auth_mode
が aml_token
のとき
トークンは accessToken
フィールドで返されます。
トークンの有効期限は expiryTimeUtc
フィールドで返されます。
トークンの更新日時は refreshAfterTimeUtc
フィールドで返されます。
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)
export REFRESH_AFTER_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query refreshAfterTimeUtc)
エンドポイントの auth_mode
が aad_token
のとき
トークンは accessToken
フィールドで返されます。
トークンの有効期限は expiryTimeUtc
フィールドで返されます。
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)
データ プレーン操作用のキーまたはトークンを取得するには、エンドポイントの auth_mode
に応じて適切な API を選びます。 API は、キーとトークンを含む JSON 出力を返します。
ヒント
jq
ユーティリティを使って、JSON 出力から特定の情報を抽出する方法を示します。 ただし、この目的に適した任意のツールを使用できます。
エンドポイントの auth_mode
が key
のとき
listkeys
API を使います。
キーは primaryKey
と secondaryKey
フィールドで返されます。
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/listkeys?api-version=$API_VERSION" \
--header "Authorization: Bearer $CONTROL_PLANE_TOKEN")
export DATA_PLANE_TOKEN=$(echo $response | jq -r '.primaryKey')
エンドポイントの auth_mode
が aml_token
のとき
token
API を使います。
トークンは accessToken
フィールドで返されます。
トークンの有効期限は expiryTimeUtc
フィールドで返されます
トークンの更新日時は refreshAfterTimeUtc
フィールドで返されます
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $CONTROL_PLANE_TOKEN")
export DATA_PLANE_TOKEN=$(echo $response | jq -r '.accessToken')
export EXPIRY_TIME_UTC=$(echo $response | jq -r '.expiryTimeUtc')
export REFRESH_AFTER_TIME_UTC=$(echo $response | jq -r '.refreshAfterTimeUtc')
エンドポイントの auth_mode
が aad_token
のとき
トークンを要求する場所に応じて、IMDS エンドポイントまたは MSI エンドポイントを使います。
トークンは accessToken
フィールドで返されます。
トークンの有効期限は expiryTimeUtc
フィールドで返されます
Azure 仮想マシンから
Azure VM のマネージド ID に基づいてトークンを取得できます (VM でマネージド ID が有効になっている場合)。
Azure VM 上の "データ プレーン" 操作用の Microsoft Entra トークン (aad_token
) を取得するには、Azure リソース エンドポイント ml.azure.com
の Azure Instance Metadata Service (IMDS) エンドポイントに要求を送信します。
export DATA_PLANE_TOKEN=`(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fml.azure.com%2F' -H Metadata:true -s | jq -r '.access_token' )`
export EXPIRY_TIME_UTC=`(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fml.azure.com%2F' -H Metadata:true -s | jq -r '.expiryTimeUtc' )`
マネージド ID に基づいてトークンを取得する方法の詳細については、「HTTP を使用してトークンを取得する 」を参照してください。
コンピューティング インスタンスから
Azure Machine Learning ワークスペースのコンピューティング インスタンスを使用する場合は、トークンを取得できます。 トークンを取得するには、クライアント ID と、コンピューティング インスタンスのマネージド ID のシークレットを、コンピューティング インスタンスでローカルに構成されているマネージド システム ID (MSI) エンドポイントに渡す必要があります。 MSI エンドポイント、クライアント ID、シークレットはそれぞれ、環境変数 MSI_ENDPOINT
、DEFAULT_IDENTITY_CLIENT_ID
、MSI_SECRET
から取得できます。 これらの変数は、コンピューティング インスタンスのマネージド ID を有効にすると自動的に設定されます。
ワークスペースのコンピューティング インスタンスから Azure リソース エンドポイント ml.azure.com
のトークンを取得します。
export DATA_PLANE_TOKEN=`(curl $MSI_ENDPOINT'?api-version=2018-02-01&resource=https%3A%2F%2Fml.azure.com%2F&clientid='$DEFAULT_IDENTITY_CLIENT_ID -H Metadata:true -H Secret:$MSI_SECRET -s | jq -r '.access_token' )`
export EXPIRY_TIME_UTC=`(curl $MSI_ENDPOINT'?api-version=2018-02-01&resource=https%3A%2F%2Fml.azure.com%2F&clientid='$DEFAULT_IDENTITY_CLIENT_ID -H Metadata:true -H Secret:$MSI_SECRET -s | jq -r '.expiryTimeUtc' )`
重要
management.azure.com
から取得されるコントロール プレーン操作用の Microsoft Entra トークンとは異なり、データ プレーン操作用の Microsoft Entra トークンは Azure リソース エンドポイント ml.azure.com
から取得されます。
SDK を使ってエンドポイントを呼び出す場合、データ プレーン操作のためのキーまたはトークンは SDK によって自動的に処理されるため、ユーザーがそれを明示的に取得する必要はありません。 ただし、REST API などの他のチャネルで使用できるよう、SDK を使ってデータ プレーン操作のためのキーまたはトークンを取得することはできます。
データ プレーン操作のためのキーまたはトークンを取得するには、OnlineEndpointOperations
クラスの get_keys メソッドを使います。 このメソッドは、キーとトークンを含むオブジェクトを返します。
エンドポイントの auth_mode
が key
のとき
キーは primary_key
と secondary_key
フィールドで返されます。
DATA_PLANE_TOKEN = ml_client.online_endpoints.get_keys(name=endpoint_name).primary_key
DATA_PLANE_TOKEN2 = ml_client.online_endpoints.get_keys(name=endpoint_name).secondary_key
エンドポイントの auth_mode
が aml_token
のとき
トークンは access_token
フィールドで返されます。
トークンの有効期限は expiry_time_utc
フィールドで返されます。
トークンの更新日時は refresh_after_time_utc
フィールドで返されます。
DATA_PLANE_TOKEN = ml_client.online_endpoints.get_keys(name=endpoint_name).access_token
EXPIRY_TIME_UTC = ml_client.online_endpoints.get_keys(name=endpoint_name).expiry_time_utc
REFRESH_AFTER_TIME_UTC = ml_client.online_endpoints.get_keys(name=endpoint_name).refresh_after_time_utc
エンドポイントの auth_mode
が aad_token
のとき
トークンは access_token
フィールドで返されます。
トークンの有効期限は expiry_time_utc
フィールドで返されます。
DATA_PLANE_TOKEN = ml_client.online_endpoints.get_keys(name=endpoint_name).access_token
EXPIRY_TIME_UTC = ml_client.online_endpoints.get_keys(name=endpoint_name).expiry_time_utc
詳細については、「Azure ID クライアント ライブラリを使用してトークンを取得する 」を参照してください。
キー、Azure Machine Learning トークン、または Microsoft Entra トークンは、エンドポイントのページの [消費] タブで確認できます。
Microsoft Entra トークンのリソース エンドポイントとクライアント ID を確認する
Microsoft Entra トークンを取得した後、jwt.ms を介してトークンをデコードすると、次の情報を含む json 応答が返され、そのトークンが適切な Azure リソース エンドポイント ml.azure.com
および適切なクライアント ID 用であることを確認できます。
{
"aud": "https://ml.azure.com",
"oid": "<your-object-id>"
}
キーまたはトークンを使用してデータにスコアを付ける
キー、Azure Machine Learning トークン、または Microsoft Entra トークンを使うエンドポイントの場合、az ml online-endpoint invoke
を使用できます。 キーまたはトークンは CLI によって自動的に処理されるため、ユーザーがそれを明示的に渡す必要はありません。
az ml online-endpoint invoke -n my-endpoint -r request.json
スコアを付けるためにオンライン エンドポイントを呼び出す場合、Authorization ヘッダーでキー、Azure Machine Learning トークン、または Microsoft Entra トークンを渡します。 次のコードは、curl ユーティリティを使用して、キーまたはトークンを使用してオンライン エンドポイントを呼び出す方法を示しています。
curl --request POST "$scoringUri" --header "Authorization: Bearer $DATA_PLANE_TOKEN" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
キー、Azure Machine Learning トークン、Microsoft Entra トークンでは、ml_client.online_endpoints.invoke()
を使う Azure Machine Learning SDK がサポートされています。
Azure Machine Learning SDK の使用に加えて、汎用 Python SDK を使用して、POST 要求をスコアリング URI に送信することもできます。
スコアリングのためにオンライン エンドポイントを呼び出すときは、Authorization ヘッダーでキーまたはトークンを渡します。 次のコードは、汎用 Python SDK を使用して、キーまたはトークンを使用してオンライン エンドポイントを呼び出す方法を示しています。 このコードで、api_key
変数をキーまたはトークンに置き換えます。
import urllib.request
import json
import os
data = {"data": [
[1,2,3,4,5,6,7,8,9,10],
[10,9,8,7,6,5,4,3,2,1]
]}
body = str.encode(json.dumps(data))
url = '<scoring URI as retrieved earlier>'
api_key = '<key or token as retrieved earlier>'
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
req = urllib.request.Request(url, body, headers)
try:
response = urllib.request.urlopen(req)
result = response.read()
print(result)
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
print(error.info())
print(error.read().decode("utf8", 'ignore'))
キーまたは Azure Machine Learning トークン
デプロイの詳細ページの [テスト] タブでは、キー、Azure Machine Learning トークン、または Microsoft Entra トークンの認証を使うエンドポイントのスコアリングがサポートされています。
エンドポイントの診断設定でトラフィックのログを有効にするには、「ログを有効または無効にする方法 」の手順に従います。
診断設定が有効になっている場合、AmlOnlineEndpointTrafficLogs
テーブルを調べて認証モードとユーザー ID を確認できます。