開発者アカウントを使用したローカル開発時に Azure サービスに対して .NET アプリを認証する

開発者は、ローカル ワークステーションでクラウド アプリのデバッグやテストを行う必要があります。 ローカル開発中に開発者のワークステーションでアプリを実行する場合でも、アプリで使用されるすべての Azure サービスに対して認証を行う必要があります。 この記事では、ローカル開発時に開発者の Azure 資格情報を使用して Azure に対してアプリを認証する方法について説明します。

ローカル開発で実行中のアプリが、開発者ツール ID を使用して Azure リソースに接続している様子を示す図。

開発者の Azure 資格情報を使用してローカル開発中にアプリを Azure に対して認証するには、開発者は次のいずれかの開発者ツールから Azure にサインインしている必要があります。

  • Visual Studio
  • Azure CLI
  • Azure Developer CLI
  • Azure PowerShell

Azure Identity ライブラリは、開発者がこれらのツールのいずれかからサインインしていることを検出できます。 その後、ライブラリはツールを介して Microsoft Entra アクセス トークンを取得し、サインインしているユーザーとして Azure に対してアプリを認証できます。

この方法は、開発者の既存の Azure アカウントを利用するため、開発チームに設定するのが最も簡単です。 ただし、開発者のアカウントには、アプリが必要とするよりも多くのアクセス許可があるため、運用環境でアプリが実行するアクセス許可を超えている可能性があります。 または、ローカル開発中に使用するアプリケーションサービスプリンシパルを作成することもできます。これは、アプリが必要とするアクセスのみを持つように範囲を設定できます。

1 - ローカル開発用の Microsoft Entra グループの作成

ほとんどの場合、アプリで作業を行う開発者は複数いるため、ローカル開発でアプリに必要なロール (アクセス許可) をカプセル化するために Microsoft Entra グループを使用することをお勧めします。 この方法には次の利点があります。

  • ロールはグループ レベルで割り当てられるため、すべての開発者に同じロールが割り当てられることが保証されます。
  • アプリに新しいロールが必要な場合は、アプリのグループにのみ追加する必要があります。
  • 新しい開発者がチームに参加すると、グループに追加された後、アプリで作業するために必要なアクセス許可が付与されます。

開発チーム用に既存の Microsoft Entra グループがある場合は、そのグループを使用できます。 それ以外の場合は、以下の手順を実行して Microsoft Entra グループを作成します。

手順 Screenshot
ページの上部にある検索ボックスに「Microsoft Entra ID」と入力して、Azure portal の Microsoft Entra ID ページに移動します。 [サービス] セクションで [Microsoft Entra ID] を選択します。 Azure portal の上部にある検索バーを使用して Microsoft Entra ID ページを検索し、移動する方法を示すスクリーンショット。
[Microsoft Entra ID] ページで、左側のメニューから [グループ] を選択します。 Microsoft Entra ID の既定のディレクトリ ページの左側のメニューにある「グループ」メニュー項目の場所を示すスクリーンショット。
[すべてグループ] ページで、[新しいグループ] を選択します。 [すべてのグループ] ページの [新しいグループ] ボタンの場所を示すスクリーンショット。
[新しいグループ] ページで、次の操作を行います。
  1. [グループの種類] ドロップダウンから [セキュリティ] を選択します。
  2. グループ名 →通常はアプリケーション名から作成される、セキュリティ グループの名前です。 また、グループの目的も示すために、グループの名前に local-dev のような文字列を含めるとわかりやすくなります。
  3. グループの説明 → グループの目的の説明。
  4. [メンバー] の下の [メンバーが選択されていません] リンクを選択して、グループにメンバーを追加します。
新しい Microsoft Entra グループの作成方法を示すスクリーンショット。このグループにメンバーを追加するために選択するリンクの場所が強調表示されています。
[メンバーの追加] ダイアログ ボックスで、次の操作を行います。
  1. 検索ボックスを使用して、一覧で、ユーザー名の一覧をフィルター処理します。
  2. このアプリのローカル開発用に 1 人以上のユーザーを選択します。 オブジェクトを選択すると、そのオブジェクトはダイアログの下部にある [選択された項目] の一覧に移動されます。
  3. 完了したら、[選択] ボタンを選択します。
グループに含める開発アカウントを選択する方法を示す [メンバーの追加] ダイアログ ボックスのスクリーンショット。
[新しいグループ] ページに戻り、[作成] を選択してグループを作成します。グループが作成されると、[すべてのグループ] ページに戻ります。 グループが表示されるまでに最大 30 秒かかる場合があり、Azure portal でのキャッシュの影響でページの更新が必要になる場合があります。 [作成] ボタンを選択してプロセスを完了する方法を示す [新しいグループ] ページのスクリーンショット。

Note

既定では、Microsoft Entra グループの作成は、ディレクトリ内の特定の特権ロールに制限されています。 グループを作成できない場合は、ディレクトリの管理者に問い合わせてください。 既存のグループにメンバーを追加できない場合は、グループオーナーまたはディレクトリ管理者に問い合わせてください。 詳細については、「Microsoft Entraグループとグループ メンバシップの管理」を参照してください。

2 - Microsoft Entraグループへのロールの割り当て

次に、アプリがどのリソースに対してどのようなロール (アクセス許可) が必要かを決定し、それらのロールをアプリに割り当てます。 この例では、手順 1 で作成した Microsoft Entra グループにロールが割り当てられます。 グループには、リソース、リソース グループ、またはサブスクリプション スコープでロールを割り当てることができます。 ほとんどのアプリは、すべての Azure リソースを 1 つのリソース グループにグループ化するため、この例では、リソース グループ スコープでロールを割り当てる方法を示しています。

手順 Screenshot
Azure portal の上部にある検索ボックスを使用してリソース グループ名を検索し、アプリのリソース グループを見つけます。 ダイアログ ボックスの [リソース グループ] 見出しの下にあるリソース グループ名を選択して、リソース グループに移動します。 Azure portal の上部にある検索ボックスを使って、ロール (アクセス許可) の割り当て対象のリソース グループを検索してそこに移動する方法を示すスクリーンショット。
リソース グループのページで、左側のメニューから [アクセス制御 (IAM)] を選択します。 アクセス制御 (IAM) メニュー項目の場所を示すリソース グループ ページのスクリーンショット。
[アクセス制御 (IAM)] ページで、次の操作を行います。
  1. [ロールの割り当て] タブを選択します。
  2. 上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。
[ロールの割り当て] タブへの移動方法と、ロールの割り当てをリソース グループに追加するボタンの場所を示すスクリーンショット。
[ロールの割り当ての追加] ページには、リソース グループで割り当てることができるすべてのロールが一覧表示されます。
  1. 検索ボックスを使用して、より管理しやすいサイズにリストをフィルター処理します。 この例では、Storage BLOB ロールをフィルター処理する方法を示します。
  2. 割り当てるロールを選択します。
[次へ] を選択して、次の画面に進みます。
リソース グループに追加するロールの割り当てを見つけるためにフィルター処理して選択する方法を示すスクリーンショット。
次の [ロールの割り当ての追加] ページでは、ロールを割り当てるユーザーを指定できます。
  1. [アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選択します。
  2. [メンバー][+ メンバーの選択] を選択します。
Azure portal の右側でダイアログ ボックスが開きます。
Microsoft Entra グループにロールを割り当てる際に選択するラジオ ボタンと、ロールを割り当てるグループを選択する際に使用されるリンクを示すスクリーンショット。
[メンバーの選択] ダイアログで、次の操作を行います。
  1. [選択] テキスト ボックスを使用して、サブスクリプション内のユーザーとグループの一覧をフィルター処理できます。 必要に応じて、アプリ用に作成したローカル開発 Microsoft Entra グループの最初の数文字を入力します。
  2. アプリケーションに関連付けられているローカル開発 Microsoft Entra グループを選択します。
ダイアログの下部にある [選択] を選択して続行します。
「メンバーの選択」ダイアログ ボックスでアプリケーションの Microsoft Entra グループをフィルター処理し選択する方法を示すスクリーンショット。
Microsoft Entra グループが、[ロールの割り当ての追加] 画面に選択済みとして表示されます。 [レビューと割り当て] を選択して最終ページに移動し、もう一度レビューと割り当てを行ってプロセスを完了します。 完了した [ロールの割り当ての追加] ページと、プロセスを完了するために使用する [レビューと割り当て] ボタンの場所を示すスクリーンショット。

3 - 開発者ツールを使用して Azure にサインインする

次に、いくつかの開発者ツールのいずれかを使用して Azure にサインインします。 認証するアカウントは、先ほど作成して構成した Microsoft Entra グループにも存在する必要があります。

  1. [ツール]>[オプション] に移動して、[オプション] ダイアログを開きます。

  2. 上部の [検索オプション] ボックスに「Azure」と入力して、使用可能なオプションをフィルター処理します。

  3. [Azure サービス認証] で、[アカウントの選択] を選びます。

  4. [アカウントの選択] の下にあるドロップダウン メニューを選び、[Microsoft アカウントを追加] を選びます。 ウィンドウが開き、アカウントを選択するよう求められます。 目的の Azure アカウントの資格情報を入力し、確認を選びます。

    Visual Studio を使って Azure にサインインする方法を示すスクリーンショット。

  5. [OK] を選択して、[オプション] ダイアログを閉じます。

4 - アプリケーションに DefaultAzureCredential を実装する

DefaultAzureCredential は、Microsoft Entra に対して認証を行うための、厳格かつ順序付けされたメカニズムのシーケンスです。 それぞれの認証メカニズムは、TokenCredential クラスから派生したクラスであり、credential と呼ばれます。 実行時に、DefaultAzureCredential は最初の資格情報を使用して認証を試みます。 その資格情報がアクセス トークンの取得に失敗した場合は、アクセス トークンが正常に取得されるまで、シーケンス内の次の資格情報が試行されます。 これにより、アプリは環境固有のコードを記述することなく、異なる環境で異なる資格情報を使用できます。

DefaultAzureCredential によって資格情報が検索される順序と場所は、DefaultAzureCredential にあります。

DefaultAzureCredential を使用するには、Azure.Identity と、必要に応じて Microsoft.Extensions.Azure パッケージをアプリケーションに追加します。

選択したターミナルで、アプリケーション プロジェクト ディレクトリに移動し、次のコマンドを実行します。

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure サービスには、さまざまな Azure SDK クライアント ライブラリの特殊なクライアント クラスを使用してアクセスします。 これらのクラスと独自のカスタム サービスは、アプリ全体で依存関係の挿入を介してアクセスできるように登録する必要があります。 Program.cs で、次の手順を実行してクライアント クラスと DefaultAzureCredential を登録します。

  1. using ディレクティブを介して Azure.IdentityMicrosoft.Extensions.Azure 名前空間を含めます。
  2. Add というプレフィックスが付いた、対応する拡張メソッドを使用して、Azure サービス クライアントを登録します。
  3. UseCredential メソッドに DefaultAzureCredential のインスタンスを渡します。

次に例を示します。

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 構成を取得し、他のサービスに対して自動的に認証することができます。