次の方法で共有


Azure でホストされる Java アプリケーションを認証する

この記事では、Azure でホストされているアプリケーションの Microsoft Entra トークン認証が、Azure Identity ライブラリによってどのようにサポートされているかについて説明します。 このサポートは、この記事で説明する一連の TokenCredential 実装によって可能になります。

この記事に含まれるサブジェクトは次のとおりです。

Azure でホストされるアプリケーションに関連する認証の問題のトラブルシューティングについては、「Azure でホストされるアプリケーション認証のトラブルシューティング」を参照してください。

DefaultAzureCredential

DefaultAzureCredential は、デプロイ時に認証によく使用される資格情報と、開発環境での認証に使用される資格情報を組み合わせたものです。 詳細については、「DefaultAzureCredential の概要」を参照してください

DefaultAzureCredential を構成する

DefaultAzureCredential は、DefaultAzureCredentialBuilder のセッターまたは環境変数による一連の構成をサポートしています。

  • 環境変数で定義されているように環境変数 AZURE_CLIENT_IDAZURE_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();

環境変数

環境変数を使用して DefaultAzureCredentialEnvironmentCredential を構成できます。 認証の種類ごとに、特定の変数の値が必要です。

シークレットを持つサービス プリンシパル

変数名 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 でログを構成する」を参照してください。