azure-identity-dotnet について
azure-identity-dotnetは、Azure SDKクライアント向けにMicrosoft Entra IDの認証情報を設定する.NET開発者向けガイドです。認証情報チェーン、マネージドID、開発環境の認証情報を扱います。
主な機能
- 01DefaultAzureCredentialチェーンの設定
- 02マネージドIDとワークロードIDの利用
- 03シークレット、証明書、ユーザー認証情報の設定
- 04Azure SDKクライアントへの認証情報の統合
- 05認証例外と診断ログへの対応
活用シーン
- 01開発環境と本番環境でのAzure SDKクライアント認証の設定
- 02サービスプリンシパルやマネージドIDでのAzureリソースへのアクセス
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-identity-dotnetインストール後、Claude Code で/azure-identity-dotnetを入力して読み込まれたか確認します。
詳細
Azure.Identity (.NET)
Microsoft Entra ID(旧称 Azure AD)を使用して Azure SDK クライアントを認証するライブラリです。
インストール
dotnet add package Azure.Identity
# For ASP.NET Core
dotnet add package Microsoft.Extensions.Azure
# For brokered authentication (Windows)
dotnet add package Azure.Identity.Broker
バージョンに関する注意:例では 1.17/1.18 系を参照しています。これらを最新リリースと見なさず、インストール済みのパッケージとターゲットフレームワークを確認してください。
環境変数
シークレットを使用するサービスプリンシパル
AZURE_CLIENT_ID=<application-client-id>
AZURE_TENANT_ID=<directory-tenant-id>
AZURE_CLIENT_SECRET=<client-secret-value>
証明書を使用するサービスプリンシパル
AZURE_CLIENT_ID=<application-client-id>
AZURE_TENANT_ID=<directory-tenant-id>
AZURE_CLIENT_CERTIFICATE_PATH=<path-to-pfx-or-pem>
AZURE_CLIENT_CERTIFICATE_PASSWORD=<certificate-password> # Optional
マネージド ID
AZURE_CLIENT_ID=<user-assigned-managed-identity-client-id> # Only for user-assigned
認証情報チェーンとブローカーの組み込みは、SDK のバージョンやオプションのパッケージによって異なります。実際に使用される ID/テナントを確認し、本番環境では認証情報を明示的に制限してください。認証だけでは、リソース操作の権限は付与されません。トークン、証明書のパスワード、診断出力は非公開にしてください。証明書の読み込み例を使用するには、X509CertificateLoader をサポートするランタイムと、秘密鍵を含む PKCS#12 ファイルが必要です。認証情報チェーンとPKCS#12 の読み込みを参照してください。
DefaultAzureCredential
ほとんどのシナリオで推奨される認証情報です。複数の認証方法を順番に試します。
| 順序 | 認証情報 | 既定で有効 |
|---|---|---|
| 1 | EnvironmentCredential | はい |
| 2 | WorkloadIdentityCredential | はい |
| 3 | ManagedIdentityCredential | はい |
| 4 | VisualStudioCredential | はい |
| 5 | VisualStudioCodeCredential | はい |
| 6 | AzureCliCredential | はい |
| 7 | AzurePowerShellCredential | はい |
| 8 | AzureDeveloperCliCredential | はい |
| 9 | InteractiveBrowserCredential | いいえ |
基本的な使い方
using Azure.Identity;
using Azure.Storage.Blobs;
var credential = new DefaultAzureCredential();
var blobClient = new BlobServiceClient(
new Uri("https://myaccount.blob.core.windows.net"),
credential);
依存性注入を使用した ASP.NET Core
using Azure.Identity;
using Microsoft.Extensions.Azure;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://myaccount.blob.core.windows.net"));
clientBuilder.AddSecretClient(
new Uri("https://myvault.vault.azure.net"));
// Uses DefaultAzureCredential by default
clientBuilder.UseCredential(new DefaultAzureCredential());
});
DefaultAzureCredential のカスタマイズ
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
ExcludeEnvironmentCredential = true,
ExcludeManagedIdentityCredential = false,
ExcludeVisualStudioCredential = false,
ExcludeAzureCliCredential = false,
ExcludeInteractiveBrowserCredential = false, // Enable interactive
TenantId = "<tenant-id>",
ManagedIdentityClientId = "<user-assigned-mi-client-id>"
});
認証情報の種類
ManagedIdentityCredential(本番環境)
// System-assigned managed identity
var credential = new ManagedIdentityCredential(ManagedIdentityId.SystemAssigned);
// User-assigned by client ID
var credential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId("<client-id>"));
// User-assigned by resource ID
var credential = new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedResourceId("<resource-id>"));
ClientSecretCredential
var credential = new ClientSecretCredential(
tenantId: "<tenant-id>",
clientId: "<client-id>",
clientSecret: "<client-secret>");
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
credential);
ClientCertificateCredential
var certificate = X509CertificateLoader.LoadPkcs12FromFile(
"MyCertificate.pfx", Environment.GetEnvironmentVariable("CERTIFICATE_PASSWORD"));
var credential = new ClientCertificateCredential(
tenantId: "<tenant-id>",
clientId: "<client-id>",
certificate);
ChainedTokenCredential(カスタムチェーン)
var credential = new ChainedTokenCredential(
new ManagedIdentityCredential(),
new AzureCliCredential());
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
credential);
開発者向け認証情報
// Azure CLI
var credential = new AzureCliCredential();
// Azure PowerShell
var credential = new AzurePowerShellCredential();
// Azure Developer CLI (azd)
var credential = new AzureDeveloperCliCredential();
// Visual Studio
var credential = new VisualStudioCredential();
// Interactive Browser
var credential = new InteractiveBrowserCredential();
環境ベースの構成
// Production vs Development
TokenCredential credential = builder.Environment.IsProduction()
? new ManagedIdentityCredential("<client-id>")
: new DefaultAzureCredential();
ソブリンクラウド
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzureGovernment
});
// Available authority hosts:
// AzureAuthorityHosts.AzurePublicCloud (default)
// AzureAuthorityHosts.AzureGovernment
// AzureAuthorityHosts.AzureChina
// AzureAuthorityHosts.AzureGermany
認証情報の種類のリファレンス
| カテゴリ | 認証情報 | 用途 |
|---|---|---|
| チェーン | DefaultAzureCredential | 開発から本番環境まで使える、事前構成済みのチェーン |
ChainedTokenCredential | カスタム認証情報チェーン | |
| Azure でホスト | ManagedIdentityCredential | Azure マネージド ID |
WorkloadIdentityCredential | Kubernetes ワークロード ID | |
EnvironmentCredential | 環境変数 | |
| サービスプリンシパル | ClientSecretCredential | クライアント ID + シークレット |
ClientCertificateCredential | クライアント ID + 証明書 | |
ClientAssertionCredential | 署名済みクライアントアサーション | |
| ユーザー | InteractiveBrowserCredential | ブラウザーを使用した認証 |
DeviceCodeCredential | デバイスコードフロー | |
OnBehalfOfCredential | 委任された ID | |
| 開発者 | AzureCliCredential | Azure CLI |
AzurePowerShellCredential | Azure PowerShell | |
AzureDeveloperCliCredential | Azure Developer CLI | |
VisualStudioCredential | Visual Studio |
ベストプラクティス
1. 本番環境では決定的な認証情報を使用する
// Development
var devCredential = new DefaultAzureCredential();
// Production - use specific credential
var prodCredential = new ManagedIdentityCredential("<client-id>");
2. 認証情報のインスタンスを再利用する
// Good: Single credential instance shared across clients
var credential = new DefaultAzureCredential();
var blobClient = new BlobServiceClient(blobUri, credential);
var secretClient = new SecretClient(vaultUri, credential);
3. 再試行ポリシーを構成する
var options = new ManagedIdentityCredentialOptions(
ManagedIdentityId.FromUserAssignedClientId(clientId))
{
Retry =
{
MaxRetries = 3,
Delay = TimeSpan.FromSeconds(0.5),
}
};
var credential = new ManagedIdentityCredential(options);
4. デバッグ用のログを有効にする
using Azure.Core.Diagnostics;
using AzureEventSourceListener listener = new((args, message) =>
{
if (args is { EventSource.Name: "Azure-Identity" })
{
Console.WriteLine(message);
}
}, EventLevel.LogAlways);
エラー処理
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
new DefaultAzureCredential());
try
{
KeyVaultSecret secret = await client.GetSecretAsync("secret1");
}
catch (AuthenticationFailedException e)
{
Console.WriteLine($"Authentication Failed: {e.Message}");
}
catch (CredentialUnavailableException e)
{
Console.WriteLine($"Credential Unavailable: {e.Message}");
}
主な例外
| 例外 | 説明 |
|---|---|
AuthenticationFailedException | 認証エラーの基本例外 |
CredentialUnavailableException | 現在の環境では認証情報を使用して認証できません |
AuthenticationRequiredException | 対話型認証が必要です |
マネージド ID のサポート
対応している Azure サービス:
- Azure App Service と Azure Functions
- Azure Arc
- Azure Cloud Shell
- Azure Kubernetes Service (AKS)
- Azure Service Fabric
- Azure Virtual Machines
- Azure Virtual Machine Scale Sets
スレッドセーフ性
すべての認証情報の実装はスレッドセーフです。1つの認証情報インスタンスを、複数のクライアントやスレッド間で安全に共有できます。
関連 SDK
| SDK | 用途 | インストール |
|---|---|---|
Azure.Identity | 認証(この SDK) | dotnet add package Azure.Identity |
Microsoft.Extensions.Azure | DI 統合 | dotnet add package Microsoft.Extensions.Azure |
Azure.Identity.Broker | ブローカー認証(Windows) | dotnet add package Azure.Identity.Broker |
参照リンク
使用する場面
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記の説明された範囲に明確に当てはまる場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、停止して確認を求めてください。