次の方法で共有


Azure Machine Learning CLI v1 でマネージド ID を使用する

適用対象: Python SDK azureml v1

適用対象: Azure CLI ml 拡張機能 v1

マネージド ID を使用すると、"リソースへのアクセスに必要な最低限のアクセス許可" でワークスペースを構成できます。

Azure Machine Learning ワークスペースを信頼できる方法で構成する場合、ワークスペースに関連付けられているさまざまなサービスのアクセス レベルが適切であることを確認することが重要です。 たとえば機械学習ワークフロー時に、ワークスペースでは、Docker イメージ用に Azure Container Registry (ACR) と、トレーニング データ用にストレージ アカウントへのアクセスが必要です。

さらにマネージド ID を使用すると、アクセス許可をきめ細かく制御できます。たとえば、特定のコンピューティング リソースからの特定の ACR へのアクセスを許可する、または取り消すことができます。

この記事では、マネージド ID を使用して次のことを行う方法について説明します。

  • ACR への管理者ユーザーのアクセスを有効にせずに、Azure Machine Learning ワークスペース用に ACR を構成して使用します。
  • ワークスペースの外部のプライベート ACR にアクセスして、トレーニングまたは推論用のベース イメージをプルします。
  • 関連付けられているリソースにアクセスするために、ユーザー割り当てのマネージド ID を使用してワークスペースを作成します。

前提条件

  • Azure Machine Learning ワークスペース。 詳細については、ワークスペース リソースの作成に関するページを参照してください。

  • Machine Learning service 用 Azure CLI 拡張機能

    重要

    この記事の Azure CLI コマンドの一部では、Azure Machine Learning 用に azure-cli-ml、つまり v1 の拡張機能を使用しています。 v1 拡張機能のサポートは、2025 年 9 月 30 日に終了します。 その日付まで、v1 拡張機能をインストールして使用できます。

    2025 年 9 月 30 日より前に、ml (v2) 拡張機能に移行することをお勧めします。 v2 拡張機能の詳細については、Azure ML CLI 拡張機能と Python SDK v2 に関するページを参照してください。

  • Azure Machine Learning Python SDK

  • ロールを割り当てるには、Azure サブスクリプションのログインにマネージド ID オペレーター ロール、または必要なアクション (所有者など) を付与するその他のロールが含まれている必要があります。

  • マネージド ID の作成と操作に慣れている必要があります。

マネージド ID の構成

場合によっては、Azure Container Registry への管理者ユーザーのアクセスを禁止する必要があります。 たとえば、ACR が共有可能な場合に、他のユーザーによる管理者のアクセスを禁止する必要がある場合などです。 または、管理者ユーザーが有効になっている ACR の作成が、サブスクリプション レベルのポリシーで許可されていない場合です。

重要

Azure Container Instance (ACI) での推論に Azure Machine Learning を使用する場合、ACR への管理者ユーザー アクセスが必要です。 推論のために ACI にモデルをデプロイする予定の場合は、無効にしないでください。

管理者ユーザーのアクセスを有効にせずに ACR を作成した場合、マネージド ID を使用して ACR にアクセスし、Docker イメージをビルドおよびプルします。

ワークスペースの作成時に、管理者ユーザーが無効になっている独自の ACR を使用できます。 または、Azure Machine Learning でワークスペース ACR を作成し、後で管理者ユーザーを無効にすることもできます。

独自の ACR を使用する

ACR 管理者ユーザーがサブスクリプション ポリシーによって禁止されている場合は、まず管理者ユーザーなしで ACR を作成し、それをワークスペースに関連付けます。 また、管理者ユーザーが無効になっている既存の ACR がある場合は、それをワークスペースにアタッチすることもできます。

--admin-enabled 引数を設定せずに Azure CLI から ACR を作成するか、管理者ユーザーを有効にせずに Azure portal から ACR を作成します。 次に、Azure Machine Learning ワークスペースを作成するときに、ACR の Azure リソース ID を指定します。 次の例は、既存の ACR を使用する新しい Azure Machine Learning ワークスペースを作成する方法を示しています。

ヒント

--container-registry パラメーターの値を取得するには、az acr show コマンドを使用して ACR の情報を表示します。 id フィールドに、ACR のリソース ID が表示されます。

az ml workspace create -w <workspace name> \
-g <workspace resource group> \
-l <region> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>

Azure Machine Learning サービスでワークスペース ACR を作成する

独自の ACR を使用しない場合、それを必要とする操作を実行したときに Azure Machine Learning サービスによってそれが作成されます。 たとえば、トレーニングの実行を Machine Learning コンピューティングに送信したり、環境をビルドしたり、Web サービス エンドポイントをデプロイしたときです。 ワークスペースによって作成された ACR では管理者ユーザーが有効になるため、管理者ユーザーを手動で無効にする必要があります。

  1. 新しいワークスペースを作成する

    az ml workspace show -n <my workspace> -g <my resource group>
    
  2. ACR を必要とするアクションを実行します。 たとえば、モデルのトレーニングに関するチュートリアルがあります。

  3. クラスターによって作成された ACR 名を取得します。

    az ml workspace show -w <my workspace> \
    -g <my resource group>
    --query containerRegistry
    

    このコマンドにより、次のテキストのような値が返されます。 テキストの最後の部分 (ACR インスタンス名) のみが必要です。

    /subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>
    
  4. ACR を更新して、管理者ユーザーを無効にします。

    az acr update --name <ACR instance name> --admin-enabled false
    

マネージド ID 付きのコンピューティングを作成し、トレーニング用の Docker イメージにアクセスする

ワークスペース ACR にアクセスするには、システム割り当てマネージド ID が有効になっている機械学習コンピューティング クラスターを作成します。 コンピューティングの作成時に Azure portal または Studio から、または以下を使用して Azure CLI から、ID を有効にできます。 詳細については、コンピューティング クラスターでのマネージド ID の使用に関するページを参照してください。

AmlComputeProvisioningConfiguration でコンピューティング クラスターを作成する場合は、identity_type パラメーターを使用してマネージド ID の種類を設定します。

マネージド ID には、トレーニング用の Docker イメージのプルを有効にするために、ワークスペース ACR の ACRPull ロールが自動的に付与されます。

注意

ワークスペース ACR を作成する前に、最初にコンピューティングを作成する場合は、ACRPull ロールを手動で割り当てる必要があります。

プライベート ACR からベース イメージにアクセスする

既定では、Azure Machine Learning では、Microsoft によって管理されるパブリック リポジトリから取得した Docker ベース イメージが使用されます。 次に、そのイメージ上にトレーニング環境または推論環境が構築されます。 詳細については、ML 環境とはに関するページを参照してください。

ACR 自社内のカスタム ベース イメージを使用するために、マネージド ID を使用してプライベート ACR にアクセスできます。 次の 2 つのユース ケースがあります。

  • トレーニングにベース イメージをそのまま使用します。
  • カスタム イメージをベースとして使用して、Azure Machine Learning マネージド イメージをビルドします。

機械学習コンピューティング クラスターに Docker ベース イメージをプルして、そのままトレーニングを行う

上記で説明したように、システム割り当てマネージド ID が有効になっている機械学習コンピューティング クラスターを作成します。 次に、マネージド ID のプリンシパル ID を決定します。

適用対象: Azure CLI ml extension v1

az ml computetarget amlcompute identity show --name <cluster name> -w <workspace> -g <resource group>

必要に応じて、コンピューティング クラスターを更新して、ユーザー割り当てマネージド ID を割り当てることができます。

適用対象: Azure CLI ml extension v1

az ml computetarget amlcompute identity assign --name <cluster name> \
-w $mlws -g $mlrg --identities <my-identity-id>

コンピューティング クラスターでベース イメージをプルできるようにするには、マネージド サービス ID にプライベート ACR の ACRPull ロールを付与します。

az role assignment create --assignee <principal ID> \
--role acrpull \
--scope "/subscriptions/<subscription ID>/resourceGroups/<private ACR resource group>/providers/Microsoft.ContainerRegistry/registries/<private ACR name>"

最後に、トレーニングの実行を送信するときに、環境定義でベース イメージの場所を指定します。

適用対象: Python SDK azureml v1

from azureml.core import Environment
env = Environment(name="private-acr")
env.docker.base_image = "<ACR name>.azurecr.io/<base image repository>/<base image version>"
env.python.user_managed_dependencies = True

重要

ベース イメージがコンピューティング リソースに直接プルされるようにするには、user_managed_dependencies = True を設定し、Dockerfile を指定しません。 そうしなければ、Azure Machine Learning サービスによって新しい Docker イメージの作成が試みられ、失敗します。これは、コンピューティング クラスターだけが ACR からベース イメージをプルするためのアクセス権を持っているためです。

トレーニングまたは推論用に、プライベート ACR からベース イメージに Azure Machine Learning マネージド環境をビルドする

適用対象: Azure CLI ml extension v1

このシナリオでは、Azure Machine Learning サービスによって、プライベート ACR から提供するベース イメージ上にトレーニングまたは推論環境がビルドされます。 イメージのビルド タスクは、ワークスペース ACR 上で ACR タスクを使用して実行されるため、アクセスを許可するためにその他の手順を実行する必要があります。

  1. ユーザー割り当てマネージド ID を作成し、ID にプライベート ACR への ACRPull アクセス権を付与します。

  2. ワークスペースのシステム割り当てマネージド ID に、前の手順のユーザー割り当てマネージド ID のマネージド ID オペレーター ロールを付与します。 このロールによってワークスペースでは、マネージド環境をビルドするために、ユーザー割り当てマネージド ID を ACR タスクに割り当てることができるようになります。

    1. ワークスペースのシステム割り当て マネージド ID のプリンシパル ID を取得します。

      az ml workspace show -w <workspace name> -g <resource group> --query identityPrincipalId
      
    2. マネージド ID オペレーター ロールを付与します。

      az role assignment create --assignee <principal ID> --role managedidentityoperator --scope <user-assigned managed identity resource ID>
      

      ユーザー割り当てマネージド ID リソース ID は、ユーザー割り当て ID の Azure リソース ID で、/subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned managed identity name> の形式です。

  3. Workspace.set_connection メソッドを使用して、ワークスペース接続の外部 ACR とユーザー割り当てマネージド ID のクライアント ID を指定します。

    適用対象: Python SDK azureml v1

    workspace.set_connection(
        name="privateAcr", 
        category="ACR", 
        target = "<acr url>", 
        authType = "RegistryConnection", 
        value={"ResourceId": "<user-assigned managed identity resource id>", "ClientId": "<user-assigned managed identity client ID>"})
    
  4. 構成が完了したら、トレーニングまたは推論用の環境のビルド時に、プライベート ACR のベース イメージを使用できるようになります。 次のコード スニペットは、環境定義内でベース イメージ ACR とイメージ名を指定する方法を示しています。

    適用対象: Python SDK azureml v1

    from azureml.core import Environment
    
    env = Environment(name="my-env")
    env.docker.base_image = "<acr url>/my-repo/my-image:latest"
    

    必要に応じて RegistryIdentity を使用することで、環境定義自体でマネージド ID リソース URL とクライアント ID を指定できます。 レジストリ ID を明示的に使用すると、それ以前に指定したワークスペースの接続がオーバーライドされます。

    適用対象: Python SDK azureml v1

    from azureml.core.container_registry import RegistryIdentity
    
    identity = RegistryIdentity()
    identity.resource_id= "<user-assigned managed identity resource ID>"
    identity.client_id="<user-assigned managed identity client ID>"
    env.docker.base_image_registry.registry_identity=identity
    env.docker.base_image = "my-acr.azurecr.io/my-repo/my-image:latest"
    

推論に Docker イメージを使用する

前述のように管理者ユーザーなしで ACR を構成した後は、Azure Kubernetes Service (AKS) から管理者キーを使用せずに、推論用の Docker イメージにアクセスできます。 AKS をワークスペースで作成、またはワークスペースにアタッチすると、クラスターのサービス プリンシパルに、ワークスペース ACR への ACRPull アクセスが自動的に割り当てられます。

注意

独自の AKS クラスターを使用する場合は、マネージド ID の代わりにサービス プリンシパルがクラスターで有効になっている必要があります。

ユーザー割り当てのマネージド ID を使用してワークスペースを作成する

ワークスペースを作成する際は、関連付けられているリソース (ACR、KeyVault、Storage、App Insights) にアクセスするために使用される、独自のユーザー割り当てマネージド ID を使用できます。

重要

ユーザー割り当てマネージド ID を使用してワークスペースを作成する場合は、関連付けられているリソースを自分で作成し、それらのリソースにマネージド ID のロールを付与する必要があります。 割り当てを行うには、ロール割り当て ARM テンプレートを使用します。

Azure CLI または Python SDK を使用してワークスペースを作成します。 CLI を使用する場合は、--primary-user-assigned-identity パラメーターを使用して ID を指定します。 SDK を使用する場合は、primary_user_assigned_identity を使用します。 次に、これらのパラメーターを使用して新しいワークスペースを作成するための Azure CLI と Python の使用例を示します。

Azure CLI

適用対象: Azure CLI ml extension v1

az ml workspace create -w <workspace name> -g <resource group> --primary-user-assigned-identity <managed identity ARM ID>

Python

適用対象: Python SDK azureml v1

from azureml.core import Workspace

ws = Workspace.create(name="workspace name", 
    subscription_id="subscription id", 
    resource_group="resource group name",
    primary_user_assigned_identity="managed identity ARM ID")

また、ARM テンプレートを使用して、ユーザー割り当てのマネージド ID を持つワークスペースを作成することもできます。

暗号化のためのカスタマー マネージド キーを持つワークスペースの場合、ストレージから Key Vault への認証のために、ユーザーに割り当てられたマネージド ID を渡すことができます。 引数 user-assigned-identity-for-cmk-encryption (CLI) または user_assigned_identity_for_cmk_encryption (SDK) を使用して、マネージド ID を渡します。 このマネージド ID は、ワークスペースのプライマリ ユーザー割り当てのマネージド ID と同じであることも異なることもあります。

次のステップ