次の方法で共有


SDK v1 を使って Azure Machine Learning のリソースとワークフローの認証を設定する

適用対象: Python SDK azureml v1

お使いの Azure Machine Learning のワークスペースに認証を設定する方法について説明します。 お使いの Azure Machine Learning ワークスペースには、多くの場合、Microsoft Entra ID を使用して認証されます。 ワークスペースに接続するときに使用できる認証ワークフローには、一般に次の 4 つがあります。

  • インタラクティブ: Microsoft Entra ID でアカウントを使用して、直接認証するか、認証に使用されるトークンを取得します。 対話型認証は、"実験および反復開発" 時に使用します。 対話型認証では、(Web サービスなどの) リソースへのアクセスを、ユーザーごとに制御できます。

  • サービス プリンシパル: Microsoft Entra ID でサービス プリンシパル アカウントを作成し、それを使用して認証を行うか、トークンを取得します。 サービス プリンシパルは、ユーザーが操作をせず、サービスに "自動認証されるプロセス" が必要な場合に使用します。 たとえば、トレーニング コードが変更されるたびにモデルをトレーニングおよびテストする継続的インテグレーションとデプロイ スクリプトです。

  • Azure CLIセッション: アクティブな Azure CLI セッションを使用して認証します。 Azure CLI 認証は、実験および反復開発中に使用されます。または、事前に認証されたセッションを使用してサービスに対する認証を自動化するプロセスが必要な場合に使用されます。 Python コードに資格情報を格納したり、ユーザーに認証を求めることなく、ローカル ワークステーションの Azure CLI を使用して Azure にログインできます。 同様に、継続的インテグレーションとデプロイ パイプラインの一部として同じスクリプトを再利用しながら、サービス プリンシパル ID で Azure CLI を認証できます。

  • マネージド ID:Azure Machine Learning SDK を "Azure 仮想マシンで" 使用する場合は Azure のマネージド ID を使用できます。 このワークフローでは、Python コードに資格情報を保存したり、ユーザーに認証を求めずに、マネージド ID を使用して VM をワークスペースに接続したりすることが許可されます。 "モデルのトレーニング時" に、Azure Machine Learning のコンピューティング クラスターとコンピューティング インスタンスをマネージド ID を使用してワークスペースにアクセスするように構成することもできます。

Azure ロールベースのアクセス制御 (Azure RBAC) は、使用する認証のワークフローに関係なく、リソースに対して許可するアクセス レベル (認証) の範囲の設定に使用します。 たとえば、管理者または自動化プロセスには、コンピューティング インスタンスを作成するアクセス権は持っていても、それを使用できない場合があり、それを使用できるデータ サイエンティストが、それを削除または作成できない場合があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

Microsoft Entra 条件付きアクセスを使用して、各認証ワークフローのワークスペースへのアクセスをさらに制御または制限できます。 たとえば、管理者はマネージド デバイスからのワークスペース アクセスのみを許可できます。

前提条件

Microsoft Entra ID

お使いのワークスペースのすべての認証ワークフローは、Microsoft Entra ID に依存しています。 ユーザーに個人アカウントを使用して認証させる場合、自分の Microsoft Entra ID にアカウントが必要です。 サービス プリンシパルを使用する場合は、それらが自分の Microsoft Entra ID にある必要があります。 マネージド ID は Microsoft Entra ID の機能でもあります。

Microsoft Entra ID の詳細については、「Microsoft Entra 認証とは」を参照してください。

Microsoft Entra アカウントを作成したら、ワークスペースにアクセスする方法および Azure Machine Learning でのその他の操作に関する情報を、「Azure Machine Learning ワークスペースへのアクセスの管理」でご確認ください。

サービス プリンシパルの構成

サービス プリンシパル (SP) を使用するには、最初に SP を作成する必要があります。 次に、お使いのワークスペースへのアクセス権を SP に付与します。 既に説明したように、Azure のロールベースのアクセス制御 (Azure RBAC) を使用してアクセスを制御するため、SP に付与するアクセス権も決定する必要があります。

重要

サービス プリンシパルを使用する場合は、使用するタスクに必要な最小限のアクセス権を付与します。 たとえば、サービス プリンシパルが Web デプロイのアクセス トークンを読み取るためにのみ使用される場合は、所有者または共同作成者のアクセス権は付与しません。

最小限のアクセス権を付与する理由は、サービス プリンシパルがパスワードを使用して認証を行うためであり、パスワードがオートメーション スクリプトの一部として格納される可能性があるからです。 パスワードが漏洩した場合、特定のタスクに必要な最小限のアクセス権のみを保持しているため、SP が悪意を持って使用される可能性が最小限に抑えられます。

サービス プリンシパルのパスワードなどのシークレットは、定期的にローテーションする必要があります。

SP を作成し、ワークスペースへのアクセス権を付与する最も簡単な方法は、Azure CLIを使用することです。 サービス プリンシパルを作成して、ワークスペースへのアクセス権を付与するには、次の手順に従います。

注意

これらのすべての手順を実行するには、サブスクリプションの管理者である必要があります。

  1. Azure サブスクリプションに対して認証を行います。

    az login
    

    CLI で既定のブラウザーを開くことができる場合、開いたブラウザにサインイン ページが読み込まれます。 それ以外の場合は、ブラウザーを開き、コマンド ラインの指示に従う必要があります。 この手順では、https://aka.ms/devicelogin にアクセスして認証コードを入力する必要があります。

    Azure のサブスクリプションが複数ある場合、az account set -s <subscription name or ID> コマンドを使用してサブスクリプションを設定できます。 詳しくは、「Use multiple Azure subscriptions (複数の Azure サブスクリプションを使用する)」をご覧ください。

    その他の認証方法については、「Azure CLI を使用してサインインする」を参照してください。

  2. サービス プリンシパルを作成します。 次の例では、ml auth という名前の SP が作成されます。

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    --json-auth パラメーターは、Azure CLI バージョン 2.51.0 以降で使用できます。 これよりも前のバージョンでは --sdk-auth を使用します。

    出力は次のような JSON になります。 この記事の他の手順で必要になるため、clientIdclientSecrettenantId の各フィールドをメモしておきます。

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. 前の手順で返された clientId 値を使用して、サービス プリンシパルの詳細を取得します。

    az ad sp show --id your-client-id
    

    次の JSON は、コマンドからの出力を簡略化した例です。 次の手順で値が必要になるため、objectId フィールドをメモしておきます。

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Azure Machine Learning によって使用されるワークスペースやその他のリソースへのアクセス権を付与するには、次の記事の情報を使用します。

    重要

    所有者アクセスを使用すると、サービス プリンシパルは、ワークスペースでほぼすべての操作を実行できます。 このドキュメントでは、アクセス権を付与する方法を説明するために使用されています。運用環境では、目的のロールを実行するために必要な最小限のアクセス権をサービス プリンシパルに付与することをお勧めします。 自分のシナリオに必要なアクセス権を持つカスタム ロールの作成に関する情報については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

マネージド ID の構成

重要

マネージド ID は、Azure Machine Learning SDK を Azure Virtual Machine から、または Azure Machine Learning のコンピューティング クラスターまたはコンピューティング インスタンスを使用して使用する場合のみサポートされています。

VM でのマネージド ID

  1. VM 上の Azure リソースに対して、システムで割り当てられたマネージド ID を有効にしてください

  2. Azure portal でワークスペースを選択し、 [Access Control (IAM)](アクセス制御 (IAM)) をクリックします。

  3. [Add](追加)[Add Role Assignment](ロールの割り当ての追加) を順にクリックし、 [Add role assignmen](ロールの割り当ての追加) ページを開きます。

  4. 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    Role 割り当てるロール。
    アクセスの割り当て先 マネージド ID
    メンバー 作成済みのマネージド ID

    Azure portal でロール割り当てページを追加します。

コンピューティング クラスターでのマネージド ID

詳細については、コンピューティング クラスターでのマネージド ID の設定に関する説明を参照してください。

対話型認証の使用

重要

対話型認証では、ブラウザーが使用され、Cookie (サードパーティの Cookie を含む) が必要です。 Cookie を無効にしている場合は、"サインインできませんでした" などのエラーを受け取る場合があります。このエラーは、Microsoft Entra 多要素認証を有効にしている場合にも発生する場合があります。

ドキュメントとサンプルのほとんどの例では、対話型認証が使用されています。 たとえば、SDK を使用する場合は、UI ベースの認証フローを使用して自動的に入力を求める関数呼び出しが 2 つあります。

  • from_config() 関数を呼び出すと、プロンプトが表示されます。

    from azureml.core import Workspace
    ws = Workspace.from_config()
    

    from_config() 関数は、ワークスペースの接続情報を含む JSON ファイルを検索します。

  • Workspace コンストラクターを使用して、サブスクリプション、リソース グループ、およびワークスペースの情報を指定する場合も、対話型認証が求められます。

    ws = Workspace(subscription_id="your-sub-id",
                  resource_group="your-resource-group-id",
                  workspace_name="your-workspace-name"
                  )
    

ヒント

複数のテナントにアクセスできる場合は、クラスをインポートし、ターゲットとするテナントを明示的に定義する必要があります。 InteractiveLoginAuthentication のコンストラクターを呼び出すと、上記の呼び出しと同様にログインするよう求められます。

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="your-tenant-id")

Azure CLI を使用する場合、CLI セッションの認証には az login コマンドを使用します。 詳細については、Azure CLI の概要に関するページをご覧ください。

ヒント

以前 Azure CLI を使用して対話的に認証した環境から SDK を使用している場合は、CLI にキャッシュされた資格情報を使用して AzureCliAuthentication クラスで、ワークスペースに認証できます。

from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="your-sub-id",
               resource_group="your-resource-group-id",
               workspace_name="your-workspace-name",
               auth=cli_auth
               )

サービス プリンシパル認証を使用する

サービス プリンシパルを使用して SDK からお使いのワークスペースに認証するには、ServicePrincipalAuthentication クラス コンストラクターを使用します。 サービス プロバイダーの作成時に取得した値をパラメーターとして使用します。 tenant_id パラメーターは上記の tenantId にマップされ、service_principal_idclientId にマップされ、service_principal_passwordclientSecret にマップされます。

from azureml.core.authentication import ServicePrincipalAuthentication

sp = ServicePrincipalAuthentication(tenant_id="your-tenant-id", # tenantID
                                    service_principal_id="your-client-id", # clientId
                                    service_principal_password="your-client-secret") # clientSecret

sp 変数は、SDK で直接使用する認証オブジェクトを保持するようになりました。 一般に、次のコードに示すように、上記で使用した ID やシークレットを環境変数に格納することをお勧めします。 環境変数に格納すると、情報が誤って GitHub リポジトリにチェックインされるのを防ぐことができます。

import os

sp = ServicePrincipalAuthentication(tenant_id=os.environ['AML_TENANT_ID'],
                                    service_principal_id=os.environ['AML_PRINCIPAL_ID'],
                                    service_principal_password=os.environ['AML_PRINCIPAL_PASS'])

Python で実行され、SDK を主に使用する自動化されたワークフローの場合は、ほとんどの場合、このオブジェクトをそのまま使用して認証を行うことができます。 次のコードでは、作成した auth オブジェクトを使用してワークスペースに対して認証を行います。

from azureml.core import Workspace

ws = Workspace.get(name="ml-example",
                   auth=sp,
                   subscription_id="your-sub-id",
                   resource_group="your-rg-name")
ws.get_details()

マネージド ID 認証を使用する

マネージド ID を使用して構成されている VM、コンピューティング クラスター、またはコンピューティング インスタンスからワークスペースに認証するには、MsiAuthentication クラスを使用します。 次の例は、このクラスを使用してワークスペースに対して認証する方法を示しています。

from azureml.core.authentication import MsiAuthentication

msi_auth = MsiAuthentication()

ws = Workspace(subscription_id="your-sub-id",
                resource_group="your-resource-group-id",
                workspace_name="your-workspace-name",
                auth=msi_auth
                )

条件付きアクセスを使用する

管理者は、ワークスペースにユーザーがサインインするためのサインイン Microsoft Entra 条件付きアクセス ポリシーを適用できます。 たとえば、2 要素認証を要求したり、マネージド デバイスからのサインインのみを許可したりできます。 Azure Machine Learning ワークスペースに特定して条件付きアクセスを使用するには、Azure Machine Learning という名前のアプリに条件付きアクセス ポリシーを割り当てる必要があります。 アプリ ID は 0736f41a-0425-bdb5-1563eff02385 です。

次のステップ