mcpField
A
azure-identity-dotnet

azure-identity-dotnet

github.com/sickn33セキュリティ48.7k55 回インストール今日更新
リポジトリ

azure-identity-dotnet について

azure-identity-dotnetは、Azure SDKクライアント向けにMicrosoft Entra IDの認証情報を設定する.NET開発者向けガイドです。認証情報チェーン、マネージドID、開発環境の認証情報を扱います。

主な機能

  1. 01DefaultAzureCredentialチェーンの設定
  2. 02マネージドIDとワークロードIDの利用
  3. 03シークレット、証明書、ユーザー認証情報の設定
  4. 04Azure SDKクライアントへの認証情報の統合
  5. 05認証例外と診断ログへの対応

活用シーン

  1. 01開発環境と本番環境でのAzure SDKクライアント認証の設定
  2. 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

ほとんどのシナリオで推奨される認証情報です。複数の認証方法を順番に試します。

順序認証情報既定で有効
1EnvironmentCredentialはい
2WorkloadIdentityCredentialはい
3ManagedIdentityCredentialはい
4VisualStudioCredentialはい
5VisualStudioCodeCredentialはい
6AzureCliCredentialはい
7AzurePowerShellCredentialはい
8AzureDeveloperCliCredentialはい
9InteractiveBrowserCredentialいいえ
基本的な使い方
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 でホストManagedIdentityCredentialAzure マネージド ID
WorkloadIdentityCredentialKubernetes ワークロード ID
EnvironmentCredential環境変数
サービスプリンシパルClientSecretCredentialクライアント ID + シークレット
ClientCertificateCredentialクライアント ID + 証明書
ClientAssertionCredential署名済みクライアントアサーション
ユーザーInteractiveBrowserCredentialブラウザーを使用した認証
DeviceCodeCredentialデバイスコードフロー
OnBehalfOfCredential委任された ID
開発者AzureCliCredentialAzure CLI
AzurePowerShellCredentialAzure PowerShell
AzureDeveloperCliCredentialAzure Developer CLI
VisualStudioCredentialVisual 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.AzureDI 統合dotnet add package Microsoft.Extensions.Azure
Azure.Identity.Brokerブローカー認証(Windows)dotnet add package Azure.Identity.Broker

参照リンク

リソースURL
NuGet パッケージhttps://www.nuget.org/packages/Azure.Identity
API リファレンスhttps://learn.microsoft.com/dotnet/api/azure.identity
認証情報チェーンhttps://learn.microsoft.com/dotnet/azure/sdk/authentication/credential-chains
ベストプラクティスhttps://learn.microsoft.com/dotnet/azure/sdk/authentication/best-practices
GitHub ソースhttps://github.com/Azure/azure-sdk-for-net/tree/main/sdk/identity/Azure.Identity

使用する場面

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記の説明された範囲に明確に当てはまる場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、停止して確認を求めてください。

コメント