Microsoft Entra ID を使用して Batch 管理ソリューションを認証する

Azure Batch管理サービスを呼び出すアプリケーションは、Microsoftのマルチテナント クラウド ベースのディレクトリと ID 管理サービスMicrosoft Entra IDで認証されます。 Azure自体は、Microsoft Entra IDを使用して、顧客、サービス管理者、および組織のユーザーを認証します。

Batch 管理アプリを認証するための推奨される方法は、Azure Identity クライアント ライブラリAzure.ResourceManager.Batch 管理ライブラリを一緒に使用することです。 Azure ID ライブラリには、アプリがローカル、Azure、またはオンプレミスのどちらで実行されるかに関係なく一貫して動作するトークンベースの資格情報クラス (DefaultAzureCredentialManagedIdentityCredentialClientSecretCredentialInteractiveBrowserCredentialなど) が用意されています。 推奨される認証方法の概要については、「Azure ID ライブラリを使用してサービスをAzureするための.NET アプリの認証」を参照してください。

Azure.ResourceManager.Batch ライブラリは、Batch アカウント、アカウント キー、アプリケーション、およびアプリケーション パッケージを管理するための型を公開します。 Azure リソース プロバイダー クライアントであり、Azure Resource Managerと連携してこれらのリソースをプログラムで管理します。 Microsoft Entra IDは、このライブラリを含む任意のAzure リソース プロバイダー クライアントを介して行われた要求を認証するために必要です。

Note

レガシ Microsoft.Azure.Management.Batch パッケージと ADAL ベースのコード パターン (AuthenticationContext.AcquireToken) は非推奨です。 新しいコードでは、Azure.ResourceManager.BatchAzure.Identity の資格情報を使用する必要があります。

Batch 管理.NET ライブラリの使用の詳細については、「.NET用 Batch 管理クライアント ライブラリを使用して Batch アカウントとクォータを管理する」を参照してください。

アプリケーションを登録する (省略可能)

別のMicrosoft Entra アプリケーションを登録する必要があるかどうかは、使用する資格情報の種類によって異なります。

  • DefaultAzureCredentialを使用して開発者ツール (Azure CLI、Azure PowerShell、Visual Studio、またはVisual Studio Code) を使用してサインインする場合、またはマネージド ID を持つAzure リソースでアプリを実行する場合は、別のアプリケーションを登録する必要はありません。 資格情報は、その環境で既に構成されている ID を使用します。
  • アプリがサービス プリンシパルとして認証される場合 (ClientSecretCredentialClientCertificateCredentialなど)、Microsoft Entra テナントにアプリケーションを登録する必要があります。

アプリケーションを登録するには、「クイック スタート: アプリケーションをMicrosoft ID プラットフォームに登録する」の手順に従います。 登録後、Microsoft Entra IDは実行時に使用するアプリケーション (クライアント) ID を提供します。 詳細については、「 Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。

Azure RBAC のアクセス許可の割り当て

アプリで使用する ID (開発者アカウント、マネージド ID、またはサービス プリンシパル) を決定したら、その ID に、Batch アカウントを管理するリソース グループまたはサブスクリプションに必要なAzureロールベースのアクセス制御 (RBAC) アクセス許可を割り当てます。 一般的な組み込みロールには、共同作成者Azure Batch アカウント共同作成者閲覧者が含まれます。

手順については、「Azure ポータルを使用してAzureロールを割り当てる」を参照してください。

Azure ID ライブラリを使用して認証する

Azure.IdentityAzure.ResourceManager.Batchでは、Microsoft Entraエンドポイント、リソース URI、またはリダイレクト URI を手動で参照する必要はありません。資格情報はトークンの取得、キャッシュ、更新を自動的に処理します。

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

    dotnet add package Azure.Identity
    dotnet add package Azure.ResourceManager.Batch
    
  2. 次の using ステートメントをコードに追加します。

    using Azure.Identity;
    using Azure.ResourceManager;
    using Azure.ResourceManager.Batch;
    
  3. 資格情報を作成し、 ArmClientに渡します。 クライアントを使用して Batch アカウントを列挙または管理します。

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

    ArmClient arm = new ArmClient(new DefaultAzureCredential());
    
    SubscriptionResource subscription = await arm.GetDefaultSubscriptionAsync();
    await foreach (BatchAccountResource account in subscription.GetBatchAccountsAsync())
    {
        Console.WriteLine(account.Data.Name);
    }
    

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

    var 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")
        });
    
    ArmClient arm = new ArmClient(credential);
    

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

    var credential = new ClientSecretCredential(
        tenantId: "<tenant-id>",
        clientId: "<application-id>",
        clientSecret: "<client-secret>");
    
    ArmClient arm = new ArmClient(credential);
    

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

    // System-assigned managed identity
    var credential = new ManagedIdentityCredential();
    
    // Or, user-assigned managed identity
    // var credential = new ManagedIdentityCredential(clientId: "<user-assigned-client-id>");
    
    ArmClient arm = new ArmClient(credential);
    

資格情報によってトークンが透過的にキャッシュおよび更新されるため、アプリの有効期間中、 ArmClient および Batch 管理リソースを維持できます。

次のステップ