次の方法で共有


Web サービスとしてデプロイされたモデルの認証を構成する

適用対象:Python SDK azureml v1

Azure Machine Learning を使用すると、トレーニング済みの機械学習モデルを Web サービスとしてデプロイできます。 この記事では、これらのデプロイの認証を構成する方法について説明します。

Azure Machine Learning によって作成されたモデル デプロイは、次の 2 つの認証方法のいずれかを使用するように構成できます。

  • キーベース:静的キーを使用して、Web サービスに対する認証が行われます。

  • トークンベース: (Microsoft Entra ID を使用して) Azure Machine Learning ワークスペースから一時的なトークンを取得し、Web サービスに対する認証に使用する必要があります。 このトークンは、一定の時間が経過すると期限切れになり、Web サービスの操作を続行するには更新する必要があります。

    Note

    トークンベースの認証は、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 サービスとしてデプロイされたモデルのクライアントの作成に関するページを参照してください。