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

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

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

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

  • 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 ワークスペースへのアクセスの管理」を参照してください。

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

前提条件

重要

この記事の Azure CLI コマンドでは、Azure Machine Learning 用に 、つまり v1 の拡張機能が必要になります。 ml 拡張機能を使用する拡張 v2 CLI には、v2 (現行) を選択することをお勧めします。 詳細については、「Machine Learning CLI (v1)」を参照してください。

Azure Active Directory

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

Azure AD の詳細については、「Azure Active Directory 認証とは」を参照してください。

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

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

サービス プリンシパル (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 --sdk-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    出力は次のような 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 コンピューティング クラスターを使用して使用する場合のみサポートされています。 コンピューティング クラスターでのマネージド ID の使用は、現在プレビュー段階です。

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

    Add role assignment page in Azure portal.

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

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

対話型認証の使用

重要

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

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

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

    適用対象:Python SDK azureml v1

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

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

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

    適用対象:Python SDK azureml v1

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

ヒント

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

適用対象:Python SDK azureml v1

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 クラスで、ワークスペースに認証できます。

適用対象:Python SDK azureml v1

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 にマップされます。

適用対象:Python SDK azureml v1

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 リポジトリにチェックインされるのを防ぐことができます。

適用対象:Python SDK azureml v1

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 オブジェクトを使用してワークスペースに対して認証を行います。

適用対象:Python SDK azureml v1

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()

Azure CLI からのサービス プリンシパルの使用

サービス プリンシパルは Azure CLI コマンドに使用できます。 詳細については、「サービス プリンシパルを使用したサインイン」を参照してください。

REST API でのサービス プリンシパルの使用 (プレビュー)

サービス プリンシパルを使用して、Azure Machine Learning REST API (プレビュー) に対する認証を行うこともできます。 Azure Active Directory のクライアント資格情報付与フローを使用します。これにより、自動化されたワークフローでヘッドレス認証に対するサービス間の呼び出しが許可されます。

重要

資格情報を取得するために Azure Active Directory 認証ライブラリ (ADAL) を現在使用している場合は、Microsoft Authentication Library (MSAL) に移行することをお勧めします。 ADAL のサポートは、2022 年 6 月 30 日に終了する予定です。

MSAL での認証の詳細とサンプルについては、次の記事を参照してください。

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

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

適用対象:Python SDK azureml v1

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
                )

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

管理者は、ワークスペースにユーザーがサインインするための サインイン Azure AD 条件付きアクセス ポリシーを適用できます。 たとえば、2 要素認証を要求したり、マネージド デバイスからのサインインのみを許可したりできます。 Azure Machine Learning ワークスペースに条件付きアクセスを具体的に使用するには、機械学習クラウド アプリに条件付きアクセス ポリシーを割り当てる必要があります。

次のステップ