Note
この機能は、MSAL.NET バージョン 4.54.0 以降で使用できます。
開発者にとって一般的な課題は、サービス間の通信をセキュリティで保護するために使用されるシークレット、資格情報、証明書、およびキーの管理です。 Azureのマネージド ID により、開発者がこれらの資格情報を手動で処理する必要がなくなります。 MSAL.NET では、次のようなAzureインフラストラクチャ内で実行されているアプリケーションで使用する場合、マネージド ID サービスを介したトークンの取得がサポートされます。
-
Azure App Service (API バージョン
2019-08-01以降) - Azure VM
- Azure Arc
- Azure クラウド シェル
- Azure Service Fabric
完全な一覧については、マネージド ID を使用して他のサービスにアクセスできるサービスAzureを参照してください。
どの SDK を使用するか - Azure SDK または MSAL?
MSAL ライブラリは、OAuth2 プロトコルと OIDC プロトコルに近い下位レベルの API を提供します。
MSAL.NET とAzure SDKの両方で、マネージド ID を介してトークンを取得できます。 内部的には、Azure SDKは MSAL.NET を使用し、DefaultAzureCredentialとManagedIdentityCredential抽象化を介して上位レベルの API を提供します。
アプリケーションでいずれかの SDK が既に使用されている場合は、引き続き同じ SDK を使用します。 新しいアプリケーションを作成し、他のAzure リソースを呼び出す予定の場合は、Azure SDKを使用します。この SDK では、マネージド ID が存在しないプライベート開発者マシンでアプリを実行できるようにすることで、開発者エクスペリエンスが向上します。 Microsoft Graphや独自の Web API などの他のダウンストリーム Web API を呼び出す必要がある場合は、MSAL の使用を検討してください。
Note
Microsoft。Identity.Web は、内部で MSAL を使用しながら、ASP.NET Coreと ASP.NET Classic との統合を提供する上位レベルの API です。 ライブラリには、MSAL.NET によって使用される資格情報 (証明書、署名付きアサーション) をクライアント資格情報として読み込む方法も用意されています。 証明書の場合、 DefaultAzureCredentials を使用して KeyVault から証明書をフェッチします。 また、マネージド ID 資格情報を使用したワークロード ID フェデレーションも提供されます。 詳細については、「 CredentialDescription」を参照してください。
簡単スタート
Azure Managed Identity をすぐに使い始めて実際の動作を確認するには、このためにチームが用意したサンプルのいずれかを使用できます。
マネージド ID の使用方法
開発者が使用できるマネージド ID には、システム割り当てとユーザー割り当ての 2 種類があります。 違いの詳細については、 マネージド ID の種類 に関する記事を参照してください。 MSAL.NET では、両方を使用したトークンの取得がサポートされています。 MSAL.NET ログ記録を使用すると、要求と関連メタデータを追跡できます。
MSAL.NET のマネージド ID を使用する前に、開発者は、Azure CLIまたはAzure portalで使用するリソースに対して有効にする必要があります。
例示
ユーザー割り当て ID とシステム割り当て ID の両方で、開発者は ManagedIdentityApplicationBuilder クラスを使用できます。
システム割り当てのマネージド ID
システム割り当てマネージド ID の場合、開発者は、 IManagedIdentityApplicationのインスタンスを作成するときに追加情報を渡す必要はありません。これは、割り当てられた ID に関する関連メタデータが自動的に推論されるためです。
AcquireTokenForManagedIdentity(String) は、 https://management.azure.comなどのトークンを取得するためにリソースと共に呼び出されます。
IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.SystemAssigned)
.Build();
AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
.ExecuteAsync()
.ConfigureAwait(false);
ユーザー割り当て済みマネージド ID
ユーザー割り当てマネージド ID の場合、開発者は、 IManagedIdentityApplicationを作成するときに、クライアント ID、完全なリソース識別子、またはマネージド ID のオブジェクト ID を渡す必要があります。
システム割り当てマネージド ID の場合と同様に、 AcquireTokenForManagedIdentity(String) はリソースと共に呼び出され、 https://management.azure.comなどのトークンを取得します。
IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.WithUserAssignedClientId(clientIdOfUserAssignedManagedIdentity))
.Build();
AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
.ExecuteAsync()
.ConfigureAwait(false);
Caching
既定では、MSAL.NET はメモリ内キャッシュをサポートします。 MSAL では、分散キャッシュを使用する際のセキュリティ上の懸念があるため、マネージド ID のキャッシュ拡張はサポートされていません。 マネージド ID 用に取得されたトークンはAzure リソースに属しているため、分散キャッシュを使用すると、キャッシュを共有する他のAzure リソースに公開される可能性があります。
Troubleshooting
失敗した要求の場合、エラー応答には、さらに診断とログ分析に使用できる関連付け ID が含まれています。 MSAL.NET で生成された、または MSAL に渡された相関 ID は、サーバー エラー応答で返されるものとは異なることに注意してください。これは、MSAL.NET では相関 ID をマネージド ID のトークン取得エンドポイントに渡せないためです。
潜在的なエラー
MsalServiceException エラー コード: managed_identity_failed_response エラー メッセージ: AAD トークンのフェッチ中に予期しないエラーが発生しました
この例外は、トークンを取得しようとしているリソースがサポートされていないか、間違ったリソース ID 形式を使用して提供されていることを意味する可能性があります。 正しいリソース ID 形式の例としては、 https://management.azure.com/.default、 https://management.azure.com、 https://graph.microsoft.comなどがあります。
MsalServiceException エラー コード: managed_identity_unreachable_network。
この例外は、MSAL.NET がマネージド ID のトークンの取得をサポートしていないリソースを使用しているか、マネージド ID のトークンを取得するエンドポイントが到達できない開発マシンからサンプル コードを実行している可能性があります。