適用対象:Azure Machine Learning SDK v1 for Python
重要
この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は 2025 年 3 月 31 日の時点で非推奨となり、サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。
2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning Python SDK v2 と SDK v2 リファレンスとは」を参照してください。
Azure Machine Learning を使用すると、トレーニング済みの機械学習モデルを Web サービスとしてデプロイできます。 この記事では、これらのデプロイの認証を構成する方法について説明します。
Azure Machine Learning によって作成されたモデル デプロイは、次の 2 つの認証方法のいずれかを使用するように構成できます。
キーベース:静的キーを使用して、Web サービスに対する認証が行われます。
トークンベース: (Microsoft Entra ID を使用して) Azure Machine Learning ワークスペースから一時的なトークンを取得し、Web サービスに対する認証に使用する必要があります。 このトークンは、一定の時間が経過すると期限切れになり、Web サービスの操作を続行するには更新する必要があります。
注
トークンベースの認証は、Azure Kubernetes Service にデプロイする場合にのみ使用できます。
キーベースの認証
Azure Kubernetes Service (AKS) にデプロイされた Web サービスでは、キーベースの認証が既定で有効になっています。
Azure Container Instances (ACI) デプロイされたサービスでは、既定でキーベースの認証が 無効 になっていますが、ACI Web サービスの作成時に auth_enabled=True
を設定することで有効にできます。 キーベースの認証が有効になっている ACI デプロイ構成を作成するコードの例を次に示します。
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
auth_enabled=True)
次に、Model
クラスを使用して、デプロイでカスタム ACI 構成を使用できます。
from azureml.core.model import Model, InferenceConfig
inference_config = InferenceConfig(entry_script="score.py",
environment=myenv)
aci_service = Model.deploy(workspace=ws,
name="aci_service_sample",
models=[model],
inference_config=inference_config,
deployment_config=aci_config)
aci_service.wait_for_deployment(True)
認証キーをフェッチするには、aci_service.get_keys()
を使用します。 キーを再生成するには、regen_key()
関数を使用して、Primary または Secondary のいずれかを渡します。
aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")
トークンベースの認証
Web サービスのトークン認証を有効にする場合、ユーザーは、Web サービスにアクセスするために Azure Machine Learning JSON Web トークンを提示する必要があります。 トークンは、指定された期間後に期限切れとなり、呼び出しを続行するには更新する必要があります。
- Azure Kubernetes Service にデプロイする場合、トークン認証は既定で無効になります。
- Azure Container Instances にデプロイする場合、トークン認証はサポートされません。
- トークン認証は、キーベースの認証と同時に使用することはできません。
トークン認証を制御するには、デプロイの作成時や更新時に token_auth_enabled
パラメーターを使用します。
from azureml.core.webservice import AksWebservice
from azureml.core.model import Model, InferenceConfig
# Create the config
aks_config = AksWebservice.deploy_configuration()
# Enable token auth and disable (key) auth on the webservice
aks_config = AksWebservice.deploy_configuration(token_auth_enabled=True, auth_enabled=False)
aks_service_name ='aks-service-1'
# deploy the model
aks_service = Model.deploy(workspace=ws,
name=aks_service_name,
models=[model],
inference_config=inference_config,
deployment_config=aks_config,
deployment_target=aks_target)
aks_service.wait_for_deployment(show_output = True)
トークン認証が有効になっている場合は、get_token
メソッドを使用して、JSON Web トークン (JWT) とそのトークンの有効期限を取得できます。
ヒント
サービス プリンシパルを使用してトークンを取得し、トークンの取得に必要な最小限のアクセス権を付与する場合は、ワークスペースで閲覧者ロールに割り当てます。
token, refresh_by = aks_service.get_token()
print(token)
重要
トークンの refresh_by
時刻の後に新しいトークンを要求する必要があります。 Python SDK の外部でトークンを更新する必要がある場合は、前に説明したように、サービス プリンシパル認証で REST API を使用して定期的に service.get_token()
呼び出しを行う方法があります。
Azure Machine Learning ワークスペースは、ご利用の Azure Kubernetes Service クラスターと同じリージョンに作成することを強くお勧めします。
トークンを使って認証を行うため、Web サービスは、Azure Machine Learning ワークスペースが作成されているリージョンに対して呼び出しを行います。 ワークスペース リージョンが使用できない場合、クラスターがワークスペースとは異なるリージョンにある場合でも、Web サービスのトークンをフェッチすることはできません。 その結果、ワークスペースのリージョンが再び使用可能になるまで Microsoft Entra 認証は使用できなくなります。
また、クラスターのリージョンとワークスペース リージョンの間の距離が長いほど、トークンのフェッチにかかる時間が長くなります。
次のステップ
配置済みモデルに対する認証の詳細については、Web サービスとしてデプロイされたモデルのクライアントの作成に関するページを参照してください。