azure-identity-java について
Azure Identity for Java は、Microsoft Entra ID を通じて Java アプリケーションを Azure サービスに認証する SDK です。複数の認証情報と設定可能なチェーンを備え、ローカル開発、ホストされたワークロード、自動化に対応します。
主な機能
- 01複数の認証情報タイプ
- 02既定の認証情報チェーン
- 03マネージド ID とワークロード ID
- 04ブラウザーとデバイスコードによるログイン
- 05カスタム認証情報チェーン
- 06ソブリンクラウドのエンドポイント設定
活用シーン
- 01Azure サービスクライアント用のトークン取得
- 02Azure ホストアプリでのマネージド ID 利用
- 03CI/CD 向け環境認証情報の設定
- 04ヘッドレスデバイスでのデバイスコードログイン
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-identity-javaインストール後、Claude Code で/azure-identity-javaを入力して読み込まれたか確認します。
詳細
Azure Identity(Java)
Microsoft Entra ID(Azure AD)を使用して、Java アプリケーションを Azure サービスに認証します。
インストール
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.15.0</version>
</dependency>
主な概念
| 資格情報 | 用途 |
|---|---|
DefaultAzureCredential | 推奨 - 開発環境と本番環境の両方で動作します |
ManagedIdentityCredential | Azure でホストされるアプリ(App Service、Functions、VM) |
EnvironmentCredential | 環境変数を使用する CI/CD パイプライン |
ClientSecretCredential | シークレットを使用するサービスプリンシパル |
ClientCertificateCredential | 証明書を使用するサービスプリンシパル |
AzureCliCredential | az login を使用するローカル開発 |
InteractiveBrowserCredential | 対話型ログインフロー |
DeviceCodeCredential | ヘッドレスデバイス認証 |
DefaultAzureCredential(推奨)
SDK のバージョンを固定し、使用前にチェーンと機能を正確に確認してください。本番環境では、意図したマネージド ID またはワークロード ID を明示的に使用するか、開発者の暗黙的な資格情報によって別のプリンシパルが選択されないよう、チェーンを制限してください。テナント、リソースエンドポイント、最小権限のロールを確認してください。以下に示すシークレット値は、承認されたストレージから読み込むためのプレースホルダーであり、コミットするリテラル値ではありません。詳細なログやアカウントログは、デフォルトで有効にしないでください。
DefaultAzureCredential は、複数の認証方法を次の順序で試します。
- 環境変数
- ワークロード ID
- マネージド ID
- Azure CLI
- Azure PowerShell
- Azure Developer CLI
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
// Simple usage
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
// Use with any Azure client
BlobServiceClient blobClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account>.blob.core.windows.net")
.credential(credential)
.buildClient();
KeyClient keyClient = new KeyClientBuilder()
.vaultUrl("https://<vault-name>.vault.azure.net")
.credential(credential)
.buildClient();
DefaultAzureCredential の構成
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId("<user-assigned-identity-client-id>") // For user-assigned MI
.tenantId("<tenant-id>") // Limit to specific tenant
.excludeEnvironmentCredential() // Skip env vars
.excludeAzureCliCredential() // Skip Azure CLI
.build();
マネージド ID
Azure でホストされるアプリケーション(App Service、Functions、AKS、VM)向けです。
import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
// System-assigned managed identity
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.build();
// User-assigned managed identity (by client ID)
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("<user-assigned-client-id>")
.build();
// User-assigned managed identity (by resource ID)
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.resourceId("/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<name>")
.build();
シークレットを使用するサービスプリンシパル
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.clientSecret("<client-secret>")
.build();
証明書を使用するサービスプリンシパル
import com.azure.identity.ClientCertificateCredential;
import com.azure.identity.ClientCertificateCredentialBuilder;
// From PEM file
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.pemCertificate("<path-to-cert.pem>")
.build();
// From PFX file with password
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.pfxCertificate("<path-to-cert.pfx>", "<pfx-password>")
.build();
// Send certificate chain for SNI
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.pemCertificate("<path-to-cert.pem>")
.sendCertificateChain(true)
.build();
環境資格情報
環境変数から資格情報を読み込みます。
import com.azure.identity.EnvironmentCredential;
import com.azure.identity.EnvironmentCredentialBuilder;
EnvironmentCredential credential = new EnvironmentCredentialBuilder().build();
必須の環境変数
シークレットを使用するサービスプリンシパルの場合:
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
証明書を使用するサービスプリンシパルの場合:
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>
ユーザー名とパスワードの場合:
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_USERNAME=<username>
AZURE_PASSWORD=<password>
Azure CLI 資格情報
az login を使用するローカル開発向けです。
import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
AzureCliCredential credential = new AzureCliCredentialBuilder()
.tenantId("<tenant-id>") // Optional: specific tenant
.build();
対話型ブラウザー
ユーザーログインが必要なデスクトップアプリケーション向けです。
import com.azure.identity.InteractiveBrowserCredential;
import com.azure.identity.InteractiveBrowserCredentialBuilder;
InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
.clientId("<client-id>")
.redirectUrl("http://localhost:8080") // Must match app registration
.build();
デバイスコード
ヘッドレスデバイス(IoT、CLI ツール)向けです。
import com.azure.identity.DeviceCodeCredential;
import com.azure.identity.DeviceCodeCredentialBuilder;
DeviceCodeCredential credential = new DeviceCodeCredentialBuilder()
.clientId("<client-id>")
.challengeConsumer(challenge -> {
// Display to user
System.out.println(challenge.getMessage());
})
.build();
チェーン資格情報
カスタム認証チェーンを作成します。
import com.azure.identity.ChainedTokenCredential;
import com.azure.identity.ChainedTokenCredentialBuilder;
ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
.addFirst(new ManagedIdentityCredentialBuilder().build())
.addLast(new AzureCliCredentialBuilder().build())
.build();
ワークロード ID(AKS)
ワークロード ID を使用する Azure Kubernetes Service 向けです。
import com.azure.identity.WorkloadIdentityCredential;
import com.azure.identity.WorkloadIdentityCredentialBuilder;
// Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder().build();
// Or explicit configuration
WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.tokenFilePath("/var/run/secrets/azure/tokens/azure-identity-token")
.build();
トークンのキャッシュ
トークンキャッシュは資格情報とバージョンによって異なります。アカウント識別子のログ記録は診断用であり、キャッシュを有効にするものではありません。アカウントのメタデータが公開される可能性があります。永続キャッシュは、サポートされている資格情報固有のキャッシュ API と承認済みの保護されたストアを使用してのみ構成してください。
// Reuse a credential instance for supported in-memory token reuse
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
// With shared token cache (for multi-credential scenarios)
SharedTokenCacheCredential credential = new SharedTokenCacheCredentialBuilder()
.clientId("<client-id>")
.build();
ソブリンクラウド
import com.azure.identity.AzureAuthorityHosts;
// Azure Government
DefaultAzureCredential govCredential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_GOVERNMENT)
.build();
// Azure China
DefaultAzureCredential chinaCredential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_CHINA)
.build();
エラー処理
import com.azure.identity.CredentialUnavailableException;
import com.azure.core.exception.ClientAuthenticationException;
try {
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
AccessToken token = credential.getTokenSync(new TokenRequestContext()
.addScopes("https://management.azure.com/.default"));
} catch (CredentialUnavailableException e) {
// No credential could authenticate
System.out.println("Authentication failed: " + e.getMessage());
} catch (ClientAuthenticationException e) {
// Authentication error (wrong credentials, expired, etc.)
System.out.println("Auth error: " + e.getMessage());
}
ログ記録
デバッグのために認証ログを有効にします。
// Via environment variable
// AZURE_LOG_LEVEL=verbose
// Or programmatically
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.enableAccountIdentifierLogging() // Log account info
.build();
環境変数
# DefaultAzureCredential configuration
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
# Managed Identity
AZURE_CLIENT_ID=<user-assigned-mi-client-id>
# Workload Identity (AKS)
AZURE_FEDERATED_TOKEN_FILE=/var/run/secrets/azure/tokens/azure-identity-token
# Logging
AZURE_LOG_LEVEL=verbose
# Authority host
AZURE_AUTHORITY_HOST=https://login.microsoftonline.com/
ベストプラクティス
- DefaultAzureCredential を使用する - 開発環境から本番環境までシームレスに動作します
- 本番環境ではマネージド ID を使用する - 管理するシークレットがなく、自動的にローテーションされます
- ローカル開発では Azure CLI を使用する - アプリの実行前に
az loginを実行します - 最小権限を適用する - サービスプリンシパルには必要な権限のみを付与します
- トークンのキャッシュ - デフォルトで有効になっており、認証の往復を減らします
- 環境変数を使用する - CI/CD で使用し、シークレットをハードコードしないでください
資格情報の選択マトリックス
| 環境 | 推奨される資格情報 |
|---|---|
| ローカル開発 | DefaultAzureCredential(Azure CLI を使用) |
| Azure App Service | DefaultAzureCredential(マネージド ID を使用) |
| Azure Functions | DefaultAzureCredential(マネージド ID を使用) |
| Azure Kubernetes Service | WorkloadIdentityCredential |
| Azure VM | DefaultAzureCredential(マネージド ID を使用) |
| CI/CD パイプライン | EnvironmentCredential |
| デスクトップアプリ | InteractiveBrowserCredential |
| CLI ツール | DeviceCodeCredential |
トリガーフレーズ
- 「Azure authentication Java」、「DefaultAzureCredential Java」
- 「managed identity Java」、「service principal Java」
- 「Azure login Java」、「Azure credentials Java」
- 「AZURE_CLIENT_ID」、「AZURE_TENANT_ID」
使用するタイミング
このスキルは、概要に記載されているワークフローやアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記の説明範囲に明確に該当する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を停止して確認を求めてください。