次の方法で共有


ユーザー割り当てマネージド ID を使用して、Azure にホストされている Java アプリを Azure リソースに認証する

他のAzure リソースに対してAzureホスト型アプリを認証するには、管理 ID を使用することをお勧めします。 ほとんどのAzure サービスでは、Azure App Service、Azure Container Apps、Azure 仮想マシンでホストされているアプリなど、このアプローチがサポートされています。 詳細については、「Azure マネージド ID をサポートするサービスとリソースの種類を参照してください。 さまざまな認証手法とアプローチの詳細については、「Azure Identity ライブラリを使用してAzure サービスにJava アプリを認証する」を参照してください。

次のセクションでは、以下について説明します。

  • マネージド ID の基本的な概念。
  • アプリのユーザー割り当てマネージド ID を作成する方法。
  • ユーザー割り当てマネージド ID にロールを割り当てる方法。
  • アプリ コードからユーザー割り当てマネージド ID を使用して認証する方法。

マネージド ID の基本的な概念

マネージド ID を使用すると、シークレット キーやその他のアプリケーション シークレットを使用せずに、アプリから他のAzure リソースに安全に接続できます。 内部的には、Azureは ID と接続先のリソースを追跡します。 Azureは、この情報を使用して、アプリが他のAzure リソースに接続できるように、アプリのMicrosoft Entra トークンを自動的に取得します。

ホストされているアプリを構成する際に考慮すべきマネージド ID には、次の 2 種類があります。

  • System-assigned マネージド ID は、Azure リソースで直接有効になり、そのライフ サイクルに関連付けられます。 リソースが削除されると、Azureは自動的に ID を削除します。 システム割り当て ID は、マネージド ID を使用するための最小限のアプローチを提供します。
  • ユーザー割り当てマネージド ID はスタンドアロン Azure リソースとして作成され、柔軟性と機能が向上します。 同じ ID とアクセス許可を共有する必要がある複数のAzure リソースを含むソリューションに最適です。 たとえば、複数の仮想マシンが同じ一連のAzure リソースにアクセスする必要がある場合、ユーザー割り当てマネージド ID は再利用性と最適化された管理を提供します。

ヒント

システム割り当てマネージド ID とユーザー割り当てマネージド ID の選択と管理の詳細については、 マネージド ID のベスト プラクティスに関する推奨事項 の記事を参照してください。

次のセクションでは、Azureホスト型アプリに対してユーザー割り当てマネージド ID を有効にして使用する手順について説明します。 システム割り当てマネージド ID を使用する必要がある場合は、Azure にホストされた Java アプリをシステム割り当てマネージド ID を使用して Azure リソースに認証する方法を参照してください。

ユーザー割り当てマネージド ID を作成する

ユーザー割り当てマネージド ID は、Azure ポータルまたはAzure CLIを使用して、Azure サブスクリプションにスタンドアロン リソースとして作成されます。 Azure CLIコマンドは、Azure Cloud Shell または Azure CLI がインストールされているワークステーションで実行できます。

  1. Azure ポータルで、メインの検索バーに「Managed ids」と入力し、Services セクションで一致する結果を選択します。

  2. [マネージド ID] ページで、 [+ 作成] を選択します。

    ユーザー割り当てマネージド ID を管理するページを示すスクリーンショット。

  3. [ ユーザー割り当てマネージド ID の作成] ページで、ユーザー割り当てマネージド ID のサブスクリプション、リソース グループ、リージョンを選択し、名前を指定します。

  4. [ 確認と作成 ] を選択して、入力を確認して検証します。

    ユーザー割り当てマネージド ID を作成するフォームを示すスクリーンショット。

  5. [ 作成] を選択して、ユーザー割り当てマネージド ID を作成します。

  6. ID が作成されたら、[ リソースに移動] を選択します。

  7. 新しい ID の [概要 ] ページで、後でアプリケーション コードを構成するときに使用する クライアント ID の値をコピーします。

マネージド ID をアプリに割り当てる

ユーザー割り当てマネージド ID は、1 つ以上のAzure リソースに関連付けることができます。 その ID を使用するすべてのリソースは、ID のロールを通じて適用されるアクセス許可を取得します。

  1. Azure ポータルで、Azure App ServiceやAzure Container Apps インスタンスなど、アプリ コードをホストするリソースに移動します。

  2. リソースの [概要] ページで、[設定] を展開し、ナビゲーションから [アイデンティティ] を選択します。

  3. [ID] ページで、[ユーザー割り当て済み] タブに切り替えます。

  4. [ + 追加] を選択して、[ ユーザー割り当てマネージド ID の追加] パネルを 開きます。

  5. [ ユーザー割り当てマネージド ID の追加 ] パネルで、[ サブスクリプション ] ドロップダウンを使用して、ID の検索結果をフィルター処理します。 ユーザー割り当てマネージド ID 検索ボックスを使用して、アプリをホストするAzure リソースに対して有効にしたユーザー割り当てマネージド ID を見つけます。

  6. ID を選択し、パネルの下部にある [追加 ] を選択して続行します。

    ユーザー割り当てマネージド ID をアプリに関連付ける方法を示すスクリーンショット。

マネージド ID にロールを割り当てる

次に、アプリで必要なロールを決定し、それらのロールをマネージド ID に割り当てます。 次のスコープで、マネージド ID にロールを割り当てることができます。

  • リソース: 割り当てられたロールは、その特定のリソースにのみ適用されます。
  • リソース グループ: 割り当てられたロールは、リソース グループに含まれるすべてのリソースに適用されます。
  • サブスクリプション: 割り当てられたロールは、サブスクリプションに含まれるすべてのリソースに適用されます。

次の例は、多くのアプリが 1 つのリソース グループを使用して関連するすべてのAzure リソースを管理するため、リソース グループ スコープでロールを割り当てる方法を示しています。

  1. ユーザー割り当てマネージド ID を持つアプリを含むリソース グループの [概要 ] ページに移動します。

  2. 左側のナビゲーションでアクセス制御 (IAM) を選択します。

  3. [アクセス制御 (IAM)] ページで、上部メニューの [+ の追加] を選択し、[ロールの割り当ての追加] 選択して、[ロールの割り当ての追加] ページに移動します。

    ID ロールの割り当てページにアクセスする方法を示すスクリーンショット。

  4. ロールの割り当ての追加 ページには、ID にロールを割り当てるタブ付きのマルチステップ ワークフローが表示されます。 最初の [ロール] タブで、上部にある検索ボックスを使用して、ID に割り当てるロールを見つけます。

  5. 検索結果からロールを選択し、[次へ] を選んで、メンバー タブに移動します。

  6. [ へのアクセスの割り当て] オプションで、マネージド ID を選択します。

  7. メンバー オプションで、+ メンバー選択 を選んで、マネージド ID の選択 パネルを開きます。

  8. Select managed identities パネルで、サブスクリプション と マネージド ID ドロップダウンを利用して、ID の検索結果をフィルタリングします。 Select 検索ボックスを使用して、アプリをホストしているAzure リソースに対して有効にしたユーザー割り当てマネージド ID を見つけます。

    マネージド ID の割り当てプロセスを示すスクリーンショット。

  9. ID を選択し、を選択した後、パネルの下部にある を選択して続行します。

  10. ページの下部にある [確認] と [割り当て] を選択します。

  11. 最終の レビュー+割り当て タブで、レビュー+割り当て を選択して、ワークフローを完了します。

アプリからAzure サービスに対する認証

Azure ID ライブラリでは、TokenCredential の実装として異なる資格情報が提供されます。 各実装では、さまざまなシナリオとMicrosoft Entra認証フローがサポートされています。 ユーザー割り当てマネージド ID の場合は、資格情報を構成するときに、ID のクライアント ID、リソース ID、またはオブジェクト ID を指定します。

コードを実装する

ファイルにの依存関係を追加します。

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

Azure SDK クライアント ライブラリの特殊なクライアント クラスを使用して、Azure サービスにアクセスします。 次のコード例では、ユーザー割り当てマネージド ID 認証の資格情報を構成する方法を示します。

DefaultAzureCredential の使用

DefaultAzureCredential を、Azureホストされているアプリの資格情報として使用します。 ユーザー割り当てマネージド ID の場合は、 メソッドを使用してクライアント ID を構成します。

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

// Configure DefaultAzureCredential with the user-assigned managed identity's client ID
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .managedIdentityClientId("<user-assigned-managed-identity-client-id>")
    .build();

// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

ManagedIdentityCredential を使用する

マネージド ID 資格情報を明示的に使用し、 での資格情報チェーンの参照を回避する場合は、 を直接使用します。 ユーザー割り当てマネージド ID の場合は、クライアント ID、リソース ID、またはオブジェクト ID を使用して ID を指定できます。

  • クライアント ID
  • リソース ID
  • オブジェクト ID

クライアント ID を使用して、その ID を使用して認証する必要があるアプリケーションまたはサービスを構成するときに、マネージド ID を識別します。

次のコマンドを使用して、ユーザー割り当てマネージド ID に割り当てられたクライアント ID を取得します。

az identity show \
    --resource-group <resource-group-name> \
    --name <identity-name> \
    --query clientId \
    --output tsv

クライアント ID を使用して を構成します。

import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

// Specify the client ID of the user-assigned managed identity
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
    .clientId("<user-assigned-managed-identity-client-id>")
    .build();

// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

次のステップ

この記事では、ユーザー割り当てマネージド ID を使用した認証について説明しました。 この形式の認証は、JavaのAzure SDKで認証できる複数の方法の 1 つです。 次の記事では、認証のその他の方法について説明します。

Azureホスト型アプリケーション認証に関連する問題が発生した場合は、「ホストされているアプリケーション認証Azureトラブルシューティングを参照してください。

認証を習得した後、Azure SDK の Java におけるログ記録の構成を参照して、SDK によって提供されるログ機能の詳細をご確認ください。