Azure でホストされる Java アプリケーションを認証する
この記事では、Azure でホストされているアプリケーションの Microsoft Entra トークン認証が、Azure Identity ライブラリによってどのようにサポートされているかについて説明します。 このサポートは、この記事で説明する一連の TokenCredential
実装によって可能になります。
この記事に含まれるサブジェクトは次のとおりです。
Azure でホストされるアプリケーションに関連する認証の問題のトラブルシューティングについては、「Azure でホストされるアプリケーション認証のトラブルシューティング」を参照してください。
DefaultAzureCredential
DefaultAzureCredential
は、デプロイ時に認証によく使用される資格情報と、開発環境での認証に使用される資格情報を組み合わせたものです。 詳細については、「DefaultAzureCredential の概要」を参照してください。
DefaultAzureCredential を構成する
DefaultAzureCredential
は、DefaultAzureCredentialBuilder
のセッターまたは環境変数による一連の構成をサポートしています。
- 環境変数で定義されているように環境変数
AZURE_CLIENT_ID
、AZURE_CLIENT_SECRET
、およびAZURE_TENANT_ID
を設定することで、それらの値によって指定されたサービス プリンシパルとして認証するようにDefaultAzureCredential
が構成されます。 - ビルダーまたは環境変数
AZURE_CLIENT_ID
の設定.managedIdentityClientId(String)
は、ユーザー割り当てマネージド ID として認証するように構成DefaultAzureCredential
しますが、空のままにすると、システム割り当てマネージド ID として認証するように構成されます。 - ビルダーまたは環境変数
AZURE_TENANT_ID
の設定.tenantId(String)
は、共有トークン キャッシュまたは 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 リソースにデプロイされた DefaultAzureCredential
を使用する azure-security-keyvault-secrets クライアントから SecretClient
を認証することを示しています。
/**
* 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 環境を使用してManagedIdentityCredential
、azure-security-keyvault-secrets クライアント ライブラリから認証SecretClient
する方法を示します。
/**
* 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
を構成できます。 認証の種類ごとに、特定の変数の値が必要です。
シークレットを持つサービス プリンシパル
変数名 | Value |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra アプリケーションの ID。 |
AZURE_TENANT_ID |
アプリケーションの Microsoft Entra テナントの ID。 |
AZURE_CLIENT_SECRET |
アプリケーションのクライアント シークレットの 1 つ。 |
証明書を使用したサービス プリンシパル
変数名 | Value |
---|---|
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 ヘッダーで証明書チェーンを送信します。 |
ユーザー名とパスワード
変数名 | Value |
---|---|
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 でログを構成する」を参照してください。