この記事では、Azure でホストされているアプリケーションの Microsoft Entra トークン認証が、Azure Identity ライブラリによってどのようにサポートされているかについて説明します。 このサポートは、この記事で説明する一連の TokenCredential 実装によって可能になります。
この記事に含まれるサブジェクトは次のとおりです。
Azure でホストされるアプリケーションに関連する認証の問題のトラブルシューティングについては、「Azure でホストされるアプリケーション認証のトラブルシューティング」を参照してください。
DefaultAzureCredential
DefaultAzureCredential は、デプロイ時に認証によく使用される資格情報と、開発環境での認証に使用される資格情報を組み合わせたものです。 詳細については、「DefaultAzureCredential の概要」を参照してください。
DefaultAzureCredential を構成する
DefaultAzureCredential は、DefaultAzureCredentialBuilder のセッターまたは環境変数による一連の構成をサポートしています。
-
AZURE_CLIENT_IDで定義されているように環境変数AZURE_CLIENT_SECRET、AZURE_TENANT_ID、および を設定することで、それらの値によって指定されたサービス プリンシパルとして認証するようにDefaultAzureCredentialが構成されます。 - ビルダーまたは環境変数
.managedIdentityClientId(String)の設定AZURE_CLIENT_IDは、ユーザー割り当てマネージド ID として認証するように構成DefaultAzureCredentialしますが、空のままにすると、システム割り当てマネージド ID として認証するように構成されます。 - ビルダーまたは環境変数
.tenantId(String)の設定AZURE_TENANT_IDは、共有トークン キャッシュまたは IntelliJ IDEA のいずれかの特定のテナントに対して認証するように構成DefaultAzureCredentialします。 - 環境変数
AZURE_USERNAMEを設定すると、DefaultAzureCredentialは、共有トークンキャッシュから対応するキャッシュされたトークンを選択するように構成されます。
DefaultAzureCredential を使用して認証する
次の例では、次を使用して SecretClient azure-security-keyvault-secrets クライアント ライブラリから認証する方法をDefaultAzureCredential示します。
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
DefaultAzureCredential を使用してユーザー割り当てマネージド ID を認証する
次の例は、ユーザー割り当てマネージド ID が構成された Azure リソースにデプロイされた SecretClient を使用する azure-security-keyvault-secrets クライアントから DefaultAzureCredential を認証することを示しています。
/**
* DefaultAzureCredential uses the user-assigned managed identity with the specified client ID.
*/
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId("<CLIENT_ID>")
.build();
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(credential)
.buildClient();
ManagedIdentityCredential の
ManagedIdentityCredential は、Azure リソースのマネージド ID (システム割り当てまたはユーザー割り当て) を認証します。 そのため、マネージド ID を IDENTITY/MSIサポートする Azure リソース内でアプリケーションが実行されている場合、 IMDS この資格情報はアプリケーションを認証し、シークレットレス認証エクスペリエンスを提供します。
詳細については、「Azure リソース用マネージド ID とは」を参照してください。
マネージド ID を使用して Azure で認証する
次の例では、システム割り当てマネージド ID またはユーザー割り当てマネージド ID が有効になっている Azure 上の仮想マシン、App Service、Functions アプリ、Cloud Shell、Service Fabric、Arc、または AKS 環境を使用してSecretClient、azure-security-keyvault-secrets クライアント ライブラリから認証ManagedIdentityCredentialする方法を示します。
/**
* Authenticate with a user-assigned managed identity.
*/
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("<CLIENT_ID>") // required only for user-assigned
.build();
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(credential)
.buildClient();
環境変数
環境変数を使用して DefaultAzureCredential と EnvironmentCredential を構成できます。 認証の種類ごとに、特定の変数の値が必要です。
シークレットを持つサービス プリンシパル
| 変数名 | 価値 |
|---|---|
AZURE_CLIENT_ID |
Microsoft Entra アプリケーションの ID。 |
AZURE_TENANT_ID |
アプリケーションの Microsoft Entra テナントの ID。 |
AZURE_CLIENT_SECRET |
アプリケーションのクライアント シークレットの 1 つ。 |
証明書を使用したサービス プリンシパル
| 変数名 | 価値 |
|---|---|
AZURE_CLIENT_ID |
Microsoft Entra アプリケーションの ID。 |
AZURE_TENANT_ID |
アプリケーションの Microsoft Entra テナントの ID。 |
AZURE_CLIENT_CERTIFICATE_PATH |
(パスワード保護のない) 秘密キーを含む、PEM でエンコードされた証明書ファイルへのパス。 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(省略可能)証明書ファイルのパスワード (存在する場合)。 |
AZURE_CLIENT_SEND_CERTIFICATE_CHAIN |
(省略可能)サブジェクト名/発行者ベースの認証をサポートするために、x5c ヘッダーで証明書チェーンを送信します。 |
ユーザー名とパスワード
| 変数名 | 価値 |
|---|---|
AZURE_CLIENT_ID |
Microsoft Entra アプリケーションの ID。 |
AZURE_TENANT_ID |
アプリケーションの Microsoft Entra テナントの ID。 |
AZURE_USERNAME |
ユーザー名 (通常は電子メール アドレス)。 |
AZURE_PASSWORD |
指定されたユーザー名に関連するパスワード。 |
構成はこの順序で試行されます。 たとえば、クライアント シークレットと証明書の値が両方存在する場合、クライアント シークレットが使用されます。
次のステップ
この記事では、Azure でホストされるアプリケーションの認証について説明しました。 この形式の認証は、Azure SDK for Java で可能な認証方法のうちの 1 つです。 次の記事では、他の方法について説明します。
Azure でホストされるアプリケーション認証に関連する問題に直面した場合は、「Azure がホストするアプリケーション認証のトラブルシューティング」を参照してください。
認証について習得した後、SDK によって提供されるログ機能の詳細について「Azure SDK for Java でログを構成する」を参照してください。