システム割り当てマネージド ID を使用して Azure リソースに対して Azure ホスト型 .NET アプリを認証する
他の Azure リソースに対して Azure でホストされるアプリを認証するには、マネージド IDを使用することをお勧めします。 このアプローチ 、Azure App Service、Azure Container Apps、Azure Virtual Machines でホストされているアプリなど、ほとんどの Azure サービスでサポートされています。 さまざまな認証手法と方法の詳細については、認証の概要 ページを参照してください。 前のセクションでは、次の内容について説明します。
- マネージド ID の基本的な概念
- アプリのシステム割り当てマネージド ID を作成する方法
- システム割り当てマネージド ID にロールを割り当てる方法
- アプリ コードからシステム割り当てマネージド ID を使用して認証する方法
マネージド ID の基本的な概念
マネージド ID を使用すると、シークレット キーやその他のアプリケーション シークレットを使用せずに、アプリを他の Azure リソースに安全に接続できます。 内部的には、Azure は ID と、接続先として許可されているリソースを追跡します。 Azure では、この情報を使用して、アプリの Microsoft Entra トークンを自動的に取得して、他の Azure リソースへの接続を許可します。
ホストされているアプリを構成する際に考慮すべきマネージド ID には、次の 2 種類があります。
- システム割り当て マネージド ID は、Azure リソースで直接有効になり、そのライフ サイクルに関連付けられます。 リソースが削除されると、Azure によって自動的に ID が削除されます。 システム割り当て ID は、マネージド ID を使用するための最小限のアプローチを提供します。
- ユーザー割り当て マネージド ID はスタンドアロンの Azure リソースとして作成され、柔軟性と機能が向上します。 同じ ID とアクセス許可を共有する必要がある複数の Azure リソースを含むソリューションに最適です。 たとえば、複数の仮想マシンが同じ Azure リソースのセットにアクセスする必要がある場合、ユーザー割り当てマネージド ID は再利用性と最適化された管理を提供します。
アドバイス
システム割り当てマネージド ID とユーザー割り当てマネージド ID の選択と管理の詳細については、マネージド ID のベスト プラクティスに関する推奨事項 記事を参照してください。
前のセクションでは、Azure でホストされるアプリに対してシステム割り当てマネージド ID を有効にして使用する手順について説明します。 ユーザー割り当てマネージド ID を使用する必要がある場合は、ユーザー割り当てマネージド ID に関する記事を参照してください。
Azure ホスティング リソースでシステム割り当てマネージド ID を有効にする
アプリでシステム割り当てマネージド ID の使用を開始するには、アプリをホストする Azure リソース (Azure App Service、Azure Container App、Azure Virtual Machine など) で ID を有効にします。
Azure portal または Azure CLI を使用して、Azure リソースのシステム割り当てマネージド ID を有効にすることができます。
Azure portal で、アプリケーション コードをホストするリソース (Azure App Service や Azure Container App インスタンスなど) に移動します。
リソースの [概要 ] ページで、[設定 ] を展開し、ナビゲーションから [ID ] を選択します。
[ID] ページで、[状態] スライダーを [上で] に切り替えます。
[保存] を選択して変更を適用します。
マネージド ID にロールを割り当てる
次に、アプリで必要なロールを決定し、それらのロールをマネージド ID に割り当てます。 次のスコープで、マネージド ID にロールを割り当てることができます。
- リソース: 割り当てられたロールは、その特定のリソースにのみ適用されます。
- リソース グループ: 割り当てられたロールは、リソース グループに含まれるすべてのリソースに適用されます。
- サブスクリプション: 割り当てられたロールは、サブスクリプションに含まれるすべてのリソースに適用されます。
次の例は、多くのアプリが 1 つのリソース グループを使用して関連するすべての Azure リソースを管理するため、リソース グループ スコープでロールを割り当てる方法を示しています。
- Azure ポータル を に設定する
- の Azure CLI
システム割り当てマネージド ID を持つアプリを含むリソース グループの 概要 ページに移動します。
左側のナビゲーションでアクセス制御 (IAM) を選択します。
[アクセス制御 (IAM)] ページで、上部メニューの [+ の追加] を選択し、[ロールの割り当ての追加] 選択して、[ロールの割り当ての追加] ページに移動します。
ロールの割り当ての追加 ページには、ID にロールを割り当てるタブ付きのマルチステップ ワークフローが表示されます。 最初の [ロール] タブで、上部にある検索ボックスを使用して、ID に割り当てるロールを見つけます。
検索結果からロールを選択し、[次へ] を選んで、メンバー タブに移動します。
[ へのアクセスの割り当て] オプションで、マネージド ID を選択します。
メンバー オプションで、[+ メンバーの選択] を選択して、[マネージド ID の選択] パネル 開きます。
選択したマネージド ID パネルで、サブスクリプション と マネージド ID の「ドロップダウン」を使用して、ID の検索結果をフィルターします。 [選択 検索ボックスを使用して、アプリをホストしている Azure リソースに対して有効にしたシステム ID を見つけます。
所有権を選択し、パネルの下部で [Select] を選択して続行します。
ページの下部にある [確認] と [割り当て] を選択します。
最終の レビュー+割り当て タブで、レビュー+割り当て を選択して、ワークフローを完了します。
アプリケーションに DefaultAzureCredential を実装する
DefaultAzureCredential は、Microsoft Entra ID に対する認証のための、意見的な順序付けされたメカニズムのシーケンスです。 各認証メカニズムは、TokenCredential クラスから派生したクラスであり、資格情報と呼ばれます。 実行時に、DefaultAzureCredential
は最初の資格情報を使用して認証を試みます。 その資格情報がアクセス トークンの取得に失敗した場合は、アクセス トークンが正常に取得されるまで、シーケンス内の次の資格情報が試行されます。 これにより、アプリは環境固有のコードを記述することなく、異なる環境で異なる資格情報を使用できます。
DefaultAzureCredential
を使用するには、Azure.Identity と必要に応じて、Microsoft.Extensions.Azure パッケージをアプリケーションに追加します。
- コマンドライン
- NuGet パッケージ マネージャー
選択したターミナルで、アプリケーション プロジェクト ディレクトリに移動し、次のコマンドを実行します。
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure サービスには、さまざまな Azure SDK クライアント ライブラリの特殊なクライアント クラスを使用してアクセスします。 これらのクラスと独自のカスタム サービスは、アプリ全体で依存関係の挿入を介してアクセスできるように登録する必要があります。
Program.cs
で、次の手順を実行してクライアント クラスと DefaultAzureCredential
を登録します。
-
using
ディレクティブを使用して、Azure.Identity
とMicrosoft.Extensions.Azure
名前空間を含めます。 - 対応する
Add
プレフィックス付き拡張メソッドを使用して、Azure サービス クライアントを登録します。 -
DefaultAzureCredential
のインスタンスをUseCredential
メソッドに渡します。
例えば:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
UseCredential
の代わりに、DefaultAzureCredential
を直接インスタンス化します。
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
上記のコードがローカル開発ワークステーションで実行されている場合、アプリケーション サービス プリンシパルの環境変数、または Visual Studio などのローカルにインストールされた開発者ツールで、開発者資格情報のセットが検索されます。 どちらの方法も、ローカル開発中に Azure リソースに対してアプリを認証するために使用できます。
Azure にデプロイすると、この同じコードで他の Azure リソースに対してアプリを認証することもできます。
DefaultAzureCredential
は、他のサービスに対して自動的に認証する環境設定とマネージド ID 構成を取得できます。
.NET