Microsoft Entra ID を使用した Azure Batch サービスの認証

Azure Batch では、Microsoft のマルチテナント クラウド ベースのディレクトリおよび ID 管理サービスである Microsoft Entra ID を使用した認証がサポートされています。 Azure では、Microsoft Entra ID を使用して、それ自体の顧客、サービス管理者、組織のユーザーを認証します。

Azure Batchアプリを認証する推奨される方法は、Azure ID クライアント ライブラリを使用することです。 トークンベースの認証クラス (DefaultAzureCredentialManagedIdentityCredentialClientSecretCredentialInteractiveBrowserCredential など) を提供します。このクラスは、アプリがローカル、Azure、またはオンプレミスのいずれで実行されるかに関係なく一貫して機能します。 推奨される認証戦略の概要については、以下を参照してください。

この記事では、Microsoft Entra IDを使用してAzure Batchを認証するための 2 つの一般的なシナリオについて説明します。

  • 統合 (対話型) 認証 は、アプリケーションと対話しているユーザーを認証します。 InteractiveBrowserCredentialDefaultAzureCredential などの資格情報を使用します (Azure CLI、Visual Studio、Visual Studio Codeなどの開発者ツールのサインインを介してチェーンできます)。

  • サービス プリンシパルまたはマネージド ID 認証 は、無人アプリケーションを認証します。 Azureでホストされているアプリには ManagedIdentityCredential、登録済みアプリケーションのシークレットまたは証明書で認証するアプリの場合は ClientSecretCredential / ClientCertificateCredential などの資格情報を使用します。

Microsoft Entra ID の詳細については、「Microsoft Entra ドキュメント」を参照してください。

認証のためにエンドポイントを収集する

Microsoft Entra ID で Batch アプリケーションを認証するには、Microsoft Entra エンドポイントと Batch リソース エンドポイントをコードに含める必要があります。

Microsoft Entra エンドポイント

基本の Microsoft Entra 機関エンドポイントが https://login.microsoftonline.com/ です。 Microsoft Entra ID で認証するには、認証に使用する Microsoft Entra テナントを識別する テナント ID を指定して、このエンドポイントを使用します:

https://login.microsoftonline.com/<tenant-id>

テナント ID は、Azure portal の メイン Microsoft Entra ID ページから取得できます。 左側のナビゲーションで [プロパティ] を選んで、[プロパティ] ページに [テナント ID] を表示することもできます。

Azure portal でのテナント ID のスクリーンショット。

重要

  • サービス プリンシパルを使用して認証する場合は、テナント固有の Microsoft Entra エンドポイントが必要です。

  • 統合認証を使用して認証する場合は、テナント固有のエンドポイントをお勧めしますが、必須ではありません。 また、特定のテナントが指定されていない場合に、Microsoft Entra 共通エンドポイントを使用して、汎用的な資格情報収集インターフェイスを提供することもできます。 共通のエンドポイントは、https://login.microsoftonline.com/common です。

Azure AD エンドポイントの詳細については、「認証と認可」を参照してください。

バッチ リソース エンドポイント

Batch リソース エンドポイント https://batch.core.windows.net/ を使用して、Batch サービスへの要求を認証するためのトークンを取得します。

アプリケーションをテナントに登録する

Microsoft Entra 認証を使用する際の最初の手順は、Microsoft Entra テナントにアプリケーションを登録することです。 アプリケーションが登録されたら、コードから Azure ID ライブラリ資格情報を使用して、Batch サービスのMicrosoft Entra トークンを取得できます。 アプリケーションの登録は、機密クライアント (サービス プリンシパル) フローと、テナント固有のアプリ登録を必要とする対話型フローに必要です。

Tip

コードで DefaultAzureCredential を使用し、開発者ツール (Azure CLI、Azure PowerShell、Visual Studio、またはVisual Studio Code) またはマネージド ID を使用してサインインする場合、別のアプリケーションを登録する必要はありません。資格情報は、その環境で既に構成されている ID を使用します。

アプリケーションの登録では、使用するアプリケーションに関する情報を Microsoft Entra ID に提供します。 Microsoft Entra ID は、実行時にアプリケーションを Microsoft Entra ID に関連付けるために使用する、アプリケーション ID (クライアント ID とも呼ばれます) を提供します。 アプリケーション ID の詳細については、「Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。

Batch アプリケーションを登録するには、「アプリケーションを登録する」の手順に従います。

アプリケーションを登録すると、アプリケーションの [概要] ページでアプリケーション (クライアント) ID を確認できます。

Azure portal に表示されているアプリケーション ID のスクリーンショット。

統合認証を構成する

統合認証で認証するには、Batch サービス API に接続するためのアクセス許可をアプリケーションに付与する必要があります。 この手順により、アプリケーションで Microsoft Entra ID を使用して Batch サービス API の呼び出しを認証できるようになります。

アプリケーションを登録したら、次の手順に従って、アプリケーションに Batch サービスへのアクセス権を付与します。

  1. Azure portal で、[アプリの登録] を検索し、選びます。
  2. [アプリの登録] ページで、お使いのアプリケーションを選びます。
  3. お使いのアプリケーションのページで、左側のナビゲーションから [API permissions] (API のアクセス許可) を選びます。
  4. [API のアクセス許可] ページで、 [アクセス許可の追加] を選択します。
  5. [Request API permissions] (API のアクセス許可の要求) ページで、[Azure Batch] を選びます。
  6. [Azure Batch] ページの [アクセス許可の選択] で、user_impersonation の横にあるチェック ボックスをオンにし、[アクセス許可の追加] を選びます。

これで、「API のアクセス許可」 ページに、Microsoft Entra アプリケーションから Microsoft GraphAzure Batch の両方にアクセスできることが示されます。 アプリを Microsoft Entra ID に登録する際に、Microsoft Graph へのアクセス許可が自動的に付与されます。

サービス プリンシパルを構成する

無人で実行するアプリケーションを認証するには、サービス プリンシパルを使用します。 アプリケーションではサービス プリンシパルを使用して認証するときに、アプリケーション ID と秘密鍵の両方を Microsoft Entra ID に送信します。

アプリケーションを登録した後、Azure portal で次の手順に従って、サービス プリンシパルを構成します。

  1. アプリケーションのシークレットを要求します。
  2. アプリケーションに Azure ロールベースのアクセス制御 (Azure RBAC) を割り当てます。

アプリケーションのシークレットを要求する

次の手順に従って、コードで使用する秘密鍵を作成し、コピーします。

  1. Azure portal で、[アプリの登録] を検索し、選びます。
  2. [アプリの登録] ページで、お使いのアプリケーションを選びます。
  3. お使いのアプリケーションのページで、左側のナビゲーションから [証明書とシークレット] を選びます。
  4. [証明書とシークレット] ページで、[新しいクライアント シークレット] を選びます。
  5. [Add a client secret] (クライアント シークレットの追加) ページで、説明を入力し、シークレットの有効期限を選びます。
  6. [追加] を選んで、シークレットを作成し、[証明書とシークレット] ページに表示します。
  7. シークレットのは、このページを離れると再度アクセスできなくなるため、安全な場所にコピーします。 キーにアクセスできなくなった場合は、新しいものを生成できます。

アプリケーションに Azure RBAC を割り当てる

アプリケーションに Azure RBAC ロールを割り当てるには、次の手順に従います。 詳細については、「Azure Batch サービスのロールベースのアクセス制御」を参照してください。

  1. Azure portal で、アプリケーションで使用する Batch アカウントに移動します。
  2. 左側のナビゲーションから [アクセス制御 (IAM)] を選択します。
  3. [アクセス制御 (IAM)] ページで、[ロールの割り当てを追加] を選択します。
  4. [ロールの割り当ての追加] ページ上で、[ロール] タブを選択してから、アプリのロールに「Azure Batch 組み込み RBAC ロール」のいずれかを選択します。
  5. [メンバー] タブを選び、[メンバー][メンバーを選択する] を選びます。
  6. [メンバーを選択する] 画面で、アプリケーションを検索して選んでから、[選択] を選びます。
  7. [ロールの割り当てを追加] ページで、[レビューと割り当て] を選びます。

これで、Batch アカウントの [Access control (IAM)] (アクセス制御 (IAM)) ページの [ロールの割り当て] タブにアプリケーションが表示されます。

コード例

このセクションのコード例では、Azure ID ライブラリの資格情報を使用して、Microsoft Entra IDを使用してAzure Batchを認証する方法を示します。 例では.NETとPythonを使用していますが、他のAzure SDK言語にも同じパターンが適用されます。

注意

Microsoft Entra 認証トークンは 1 時間に期限が切れます。 有効期間の長い BatchClient オブジェクトを使用する場合、Azure IdentityTokenCredentialは透過的にキャッシュしてトークンを更新するため、必要な場合にのみ新しいトークンがMicrosoft Entra IDから取得されます。 Microsoft Entra ID のトークンの詳細については、「セキュリティ トークン」を参照してください。

Tip

ほとんどのシナリオでは、 DefaultAzureCredentialを使用します。 複数の認証方法 (マネージド ID、環境変数、開発者ツールのサインインなど) が自動的に試行されるため、開発中、Azure、オンプレミスのどちらでアプリをローカルで実行するかに関係なく、同じコードが機能します。 適切な資格情報の選択に関するガイダンスについては、「Authenticate .NET apps および Authenticate Python apps を参照してください。

コード例: .NETからAzure Batchに対する認証

この例では、Azure.Identity ライブラリと共に Azure.Compute.Batch を使用します。

  1. Azure.Compute.Batch および Azure.Identity NuGet パッケージをインストールします。

  2. コードで次の using ステートメントを宣言します。

    using Azure.Compute.Batch;
    using Azure.Core;
    using Azure.Identity;
    
  3. Batch アカウントのエンドポイントを参照してください。

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  4. 資格情報を作成し、 BatchClient コンストラクターに渡します。 Batch サービスに対する後続の操作には、クライアントを使用します。

    Recommended: DefaultAzureCredential — 開発者ツールのサインイン (Azure CLI、Visual Studio、Visual Studio Code) でローカルに動作し、アプリがAzureで実行されたときにマネージド ID を自動的に使用します。

    TokenCredential credential = new DefaultAzureCredential();
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    
    await foreach (BatchJob job in client.GetJobsAsync())
    {
        Console.WriteLine(job.Id);
    }
    

    対話型 (統合) サインイン - システム ブラウザーを使用してサインインするようにユーザーに求めます。 これは、アプリで特定のユーザーを対話形式で認証する必要がある場合に使用します。

    TokenCredential credential = new InteractiveBrowserCredential(
        new InteractiveBrowserCredentialOptions
        {
            TenantId = "<tenant-id>",
            ClientId = "<application-id>",      // optional; required only if you registered your own app
            RedirectUri = new Uri("http://localhost")
        });
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

    サービス プリンシパル (クライアント シークレット) - アプリ登録シークレットで認証する無人アプリに使用します。

    TokenCredential credential = new ClientSecretCredential(
        tenantId: "<tenant-id>",
        clientId: "<application-id>",
        clientSecret: "<client-secret>");
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

    管理 ID — システム割り当てマネージド ID またはユーザー割り当てマネージド ID を持つAzure リソース (VM、App Service、コンテナー アプリなど) でアプリを実行するときに使用します。

    // System-assigned managed identity
    TokenCredential credential = new ManagedIdentityCredential();
    
    // Or, user-assigned managed identity
    // TokenCredential credential = new ManagedIdentityCredential(clientId: "<user-assigned-client-id>");
    
    BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
    

コード例: PythonからAzure Batchに対する認証

この例では、 azure-batch クライアントと azure-identity ライブラリの資格情報を使用します。 レガシ azure.common.credentials.ServicePrincipalCredentials クラスは非推奨です。代わりに azure-identity 資格情報を使用してください。

  1. 必要なパッケージをインストールします。

    pip install azure-batch azure-identity
    
  2. Batch アカウント エンドポイントと Batch リソース スコープを参照します。

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    BATCH_SCOPE = "https://batch.core.windows.net/.default"
    
  3. 資格情報を作成し、 BatchServiceClientに渡します。

    推奨: DefaultAzureCredential — 開発者ツールへのサインインでローカルで動作し、Azure で実行時にはマネージド ID を自動的に使用します。

    from azure.batch import BatchServiceClient
    from azure.identity import DefaultAzureCredential
    
    credential = DefaultAzureCredential()
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    対話型 (統合) サインイン - システム ブラウザーを使用してサインインするようにユーザーに求めます。

    from azure.batch import BatchServiceClient
    from azure.identity import InteractiveBrowserCredential
    
    credential = InteractiveBrowserCredential(
        tenant_id="<tenant-id>",
        client_id="<application-id>",  # optional; required only if you registered your own app
    )
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    サービス プリンシパル (クライアント シークレット) - 無人アプリに使用します。

    from azure.batch import BatchServiceClient
    from azure.identity import ClientSecretCredential
    
    credential = ClientSecretCredential(
        tenant_id="<tenant-id>",
        client_id="<application-id>",
        client_secret="<client-secret>",
    )
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

    管理 ID — マネージド ID を持つAzure リソースでアプリを実行するときに使用します。

    from azure.batch import BatchServiceClient
    from azure.identity import ManagedIdentityCredential
    
    # System-assigned managed identity
    credential = ManagedIdentityCredential()
    
    # Or, user-assigned managed identity
    # credential = ManagedIdentityCredential(client_id="<user-assigned-client-id>")
    
    batch_client = BatchServiceClient(
        credentials=credential,
        batch_url=BATCH_ACCOUNT_URL,
    )
    

次のステップ