Java と Azure ID を使用した Azure 認証
この記事では、Azure SDK for Java での Microsoft Entra トークン認証サポートを可能にする Java Azure Identity ライブラリの概要について説明します。 このライブラリには、Microsoft Entra トークン認証をサポートする Azure SDK クライアントを構築するために使用できる TokenCredential
実装のセットが用意されています。
Azure Identity ライブラリの現在のサポート内容を以下に示します。
- Java 開発環境での Azure 認証によって、以下が可能になります。
- IDEA IntelliJ 認証。Azure Toolkit for IntelliJ から取得したサイン イン情報を使用。
- Visual Studio Code 認証。Visual Studio Code 用の Azure プラグインに保存されたサイン イン情報を使用。
- Azure CLI 認証。Azure CLI に保存されたサイン イン情報を使用。
- Azure でホストされているアプリケーションの認証によって、以下が可能になります。
- 既定の Azure 資格情報認証
- マネージド ID 認証
- サービス プリンシパルを使用した認証によって、以下が可能になります。
- クライアント シークレット認証
- クライアント証明書認証
- ユーザー資格情報による認証によって、以下が可能になります。
- 対話型ブラウザーの認証
- デバイス コード認証
- ユーザー名/パスワード認証
これらのリンクをクリックすると、各認証方式の詳細を参照できます。 この記事の残りの部分では、よく使われる DefaultAzureCredential
と関連トピックについて説明します。
Maven の依存関係を追加する
Maven の依存関係を追加するには、プロジェクトの pom.xml ファイルに次の XML を含めます。 [Azure Identity ライブラリ] ページ で示すように、最新の安定したリリース バージョン番号で {version_number}
を置き換えます。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>{version_number}</version>
</dependency>
重要な概念
Azure Identity ライブラリを理解する上での主要概念として、資格情報の概念と、その資格情報の最も一般的な実装である DefaultAzureCredential
の 2 つがあります。
資格情報はクラスの一種であり、サービス クライアントが要求を認証するために必要なデータを格納、または取得できます。 Azure SDK のサービス クライアントは、その作成時に資格情報を受け取り、これらの資格情報を使用してサービス要求の認証を行います。
Azure Identity ライブラリは、Microsoft Entra ID を使用した OAuth 認証に焦点を置いており、サービス要求を認証するための Microsoft Entra トークンを取得できるさまざまな資格情報クラスを提供します。 このライブラリ内のすべての資格情報クラスは azure-core の TokenCredential
抽象クラスの実装です。これらはいずれも、TokenCredential
で認証できるサービス クライアントの作成に使用できます。
DefaultAzureCredential
は、アプリケーションを最終的に Azure Cloud で実行することを目的とするほとんどのシナリオに適しています。 DefaultAzureCredential
は、デプロイ時に認証によく使用される資格情報と、開発環境での認証に使用される資格情報を組み合わせたものです。 DefaultAzureCredential
を使用した例などの詳細については、「Azure でホストされている Java アプリケーションの認証」の「既定の Azure 資格情報」セクションを参照してください。
例
「Azure SDK for Java を使用する」で説明しているように、管理ライブラリには若干の違いがあります。 こうした違いの例として、Azure サービスを使用するためのライブラリがクライアント ライブラリと呼ばれるのに対し、Azure サービスを管理するためのライブラリは管理ライブラリと呼ばれます。 以下のセクションでは、クライアントと管理の両ライブラリにおける認証の概要について説明します。
Azure クライアント ライブラリの認証
次の例では、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();
Azure 管理ライブラリの認証
Azure 管理ライブラリでは Azure クライアント ライブラリと同じ資格情報 API を使用しますが、そのサブスクリプションの Azure リソースを管理するための Azure サブスクリプション ID も必要になります。
サブスクリプション ID は、Azure portal の [サブスクリプション] ページにあります。 または、次の Azure CLI コマンドを使ってサブスクリプション ID を取得します。
az account list --output table
サブスクリプション ID は AZURE_SUBSCRIPTION_ID
環境変数で設定できます。 AzureProfile
は、次の例で示されている Manager
インスタンスの作成中にデフォルトのサブスクリプション ID として、この ID を取得します。
AzureResourceManager azureResourceManager = AzureResourceManager.authenticate(
new DefaultAzureCredentialBuilder().build(),
new AzureProfile(AzureEnvironment.AZURE))
.withDefaultSubscription();
この例で使用されている DefaultAzureCredential
は、DefaultAzureCredential
を使用して AzureResourceManager
インスタンスを認証します。 Azure Identity ライブラリに用意されている他のトークン資格情報の実装を、DefaultAzureCredential
の代わりに使用することもできます。
トラブルシューティング
ガイダンスについては、「Azure Identity Authentication の問題のトラブルシューティング」を参照してください。
次のステップ
この記事では、Azure SDK for Java で使用できる Azure Identity 機能について紹介しました。 DefaultAzureCredential
は一般的であり、多くの場合に適しています。 次の記事では、Azure Identity ライブラリを使用した他の認証方法について説明するとともに、DefaultAzureCredential
についてより詳しく説明します。