Azure でホストされる Java アプリケーションを認証する
この記事では、Azure でホストされているアプリケーションの Microsoft Entra トークン認証が、Azure Identity ライブラリによってどのようにサポートされているかについて説明します。 このサポートは、この記事で説明する一連の TokenCredential
実装によって可能になります。
この記事に含まれるサブジェクトは次のとおりです。
Azure でホストされるアプリケーションに関連する認証の問題のトラブルシューティングについては、「Azure でホストされるアプリケーション認証のトラブルシューティング」を参照してください。
既定の Azure 資格情報
DefaultAzureCredential
は、アプリケーションが最終的に Azure Cloud で実行されるほとんどのシナリオに適しています。 DefaultAzureCredential
は、デプロイ時に認証によく使用される資格情報と、開発環境での認証に使用される資格情報を組み合わせたものです。 DefaultAzureCredential
により、次のメカニズムを介して順番に認証を試行します。
- 環境 -
DefaultAzureCredential
は、環境変数で指定されたアカウント情報を読み取り、それを使用して認証を行います。 - マネージド ID - マネージド ID が有効になっている Azure ホストにアプリケーションがデプロイされている場合、
DefaultAzureCredential
はそのアカウントを使用して認証を行います。 - IntelliJ - Azure Toolkit for IntelliJ 経由で認証した場合、
DefaultAzureCredential
はそのアカウントを使用して認証を行います。 - Visual Studio Code - Visual Studio Code Azure Account プラグインを使用して認証した場合、
DefaultAzureCredential
はそのアカウントを使用して認証を行います。 - Azure CLI - Azure CLI の
az login
コマンドを使用してアカウントを認証した場合、DefaultAzureCredential
はそのアカウントを使用して認証を行います。
DefaultAzureCredential を構成する
DefaultAzureCredential
は、DefaultAzureCredentialBuilder
のセッターまたは環境変数による一連の構成をサポートしています。
- 環境変数で定義されているように環境変数
AZURE_CLIENT_ID
、AZURE_CLIENT_SECRET
、およびAZURE_TENANT_ID
を設定することで、それらの値によって指定されたサービス プリンシパルとして認証するようにDefaultAzureCredential
が構成されます。 - ビルダーで
.managedIdentityClientId(String)
、または環境変数AZURE_CLIENT_ID
を設定すると、DefaultAzureCredential
はユーザー定義マネージド ID として認証するように構成され、これらを空のままにしておくと、システム割り当てマネージド ID として認証するように構成されます。 - ビルダーで
.tenantId(String)
、たは環境変数AZURE_TENANT_ID
を設定すると、DefaultAzureCredential
は共有トークン キャッシュ、Visual Studio Code、IntelliJ IDEA 用の特定のテナントに対して認証するように構成されます。 - 環境変数
AZURE_USERNAME
を設定すると、DefaultAzureCredential
は、共有トークンキャッシュから対応するキャッシュされたトークンを選択するように構成されます。 - ビルダーで
.intelliJKeePassDatabasePath(String)
を設定すると、DefaultAzureCredential
は IntelliJ 資格情報で認証するときに特定の KeePass ファイルを読み取るように構成されます。
DefaultAzureCredential を使用して認証する
次の例では、azure-security-keyvault-secrets クライアント ライブラリの SecretClient
を、DefaultAzureCredential
を使用して認証する場合を示しています。
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<your Key Vault name>.vault.azure.net")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
DefaultAzureCredential を使用してユーザー割り当てマネージド ID を認証する
次の例は、ユーザー割り当てマネージド ID が構成された Azure リソースにデプロイされた DefaultAzureCredential
を使用する azure-security-keyvault-secrets クライアントから SecretClient
を認証することを示しています。
/**
* The default credential uses the user-assigned managed identity with the specified client ID.
*/
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId("<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(defaultCredential)
.buildClient();
DefaultAzureCredential を使用して Azure Toolkit for IntelliJ でユーザーを認証する
次の例では、IntelliJ IDEA がインストールされ、ユーザーが Azure アカウントを使用して Azure Toolkit for IntelliJ にサイン インしたワークステーション上で、DefaultAzureCredential
を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient
を認証することを示しています。
IntelliJ IDEA の構成の詳細については、「IntelliJCredential を目的とした Azure Toolkit for IntelliJ へのサインイン」を参照してください。
/**
* The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
*/
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
.intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
.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(defaultCredential)
.buildClient();
マネージド ID 資格情報
マネージド ID は、Azure リソースのマネージド ID (システムまたはユーザー割り当て) を認証します。 そのため、アプリケーションが、IDENTITY/MSI
、IMDS
エンドポイント、またはその両方によってマネージド ID をサポートする Azure リソース内で実行されている場合、この資格情報によってアプリケーションが認証され、シークレットを使用しない優れた認証エクスペリエンスが提供されます。
詳細については、「Azure リソースのマネージド ID とは」を参照してください。
マネージド ID を使用して Azure で認証する
次の例では、システム割り当てまたはユーザー割り当てのマネージド ID を有効にして、Azure 上の仮想マシン、アプリ サービス、関数アプリ、Cloud Shell、サービス ファブリック、Arc、または AKS 環境の ManagedIdentityCredential
を使用して、azure-security-keyvault-secrets クライアント ライブラリから SecretClient
を認証することを示しています。
/**
* Authenticate with a managed identity.
*/
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
.clientId("<user-assigned managed identity client ID>") // required only for user-assigned
.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(managedIdentityCredential)
.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_ID |
Microsoft Entra アプリケーションの ID。 |
AZURE_USERNAME |
ユーザー名 (通常は電子メール アドレス)。 |
AZURE_PASSWORD |
指定されたユーザー名に関連するパスワード。 |
構成はこの順序で試行されます。 たとえば、クライアント シークレットと証明書の値が両方存在する場合、クライアント シークレットが使用されます。
次のステップ
この記事では、Azure でホストされるアプリケーションの認証について説明しました。 この形式の認証は、Azure SDK for Java で可能な認証方法のうちの 1 つです。 次の記事では、他の方法について説明します。
Azure でホストされるアプリケーション認証に関連する問題に直面した場合は、「Azure がホストするアプリケーション認証のトラブルシューティング」を参照してください。
認証について習得した後、SDK によって提供されるログ機能の詳細について「Azure SDK for Java でログを構成する」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示