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

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

A diagram showing how an app running in local developer will obtain the application service principal from a .env file and then use that identity to connect to Azure resources.

ローカル開発時に開発者の Azure 資格情報を使用して Azure に対してアプリを認証する場合、開発者は VS Code Azure Tools 拡張機能、Azure CLI、または Azure PowerShell から Azure にサインインする必要があります。 Azure SDK for .NET では、開発者がこれらのツールのいずれかからサインインしていることを検出し、サインインしているユーザーとして Azure に対してアプリを認証するために必要な資格情報を資格情報キャッシュから取得できます。

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

1 - ローカル開発用の Azure AD グループを作成する

ほとんどの場合、1 つのアプリケーションで作業する開発者が複数いるため、最初に Azure AD グループを作成して、ローカル開発でアプリに必要なロール (アクセス許可) をカプセル化することをお勧めします。 これには次のような利点があります。

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

開発チームの既存の Azure AD グループがある場合は、そのグループを使用できます。 それ以外の場合は、次の手順を実行して、Azure AD グループを作成してください。

手順 Screenshot
ページの上部にある検索ボックスに「Azure Active Directory」と入力し、[サービス] の下から Azure Active Directory を選択して、Azure portal の [Azure Active Directory] ページに移動します。 A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
[Azure Active Directory] ページで、左側のメニューから [グループ] を選択します。 A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
[すべてグループ] ページで、[新しいグループ] を選択します。 A screenshot showing the location of the New Group button in the All groups page.
[新しいグループ] ページで、次の操作を行います。
  1. グループの種類セキュリティ
  2. グループ名 →通常はアプリケーション名から作成される、セキュリティ グループの名前です。 また、グループの名前に "local-dev" のような文字列を含め、グループの目的も示すと便利です。
  3. グループの説明 → グループの目的の説明。
  4. [メンバー] の下の [メンバーが選択されていません] リンクを選択して、グループにメンバーを追加します。
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group
[メンバーの追加] ダイアログ ボックスで、次の操作を行います。
  1. 検索ボックスを使用して、一覧で、ユーザー名の一覧をフィルター処理します。
  2. このアプリのローカル開発用のユーザーを選択します。 オブジェクトを選択すると、ダイアログの下部にある [選択された項目] リストに移動します。
  3. 終わったら、[選択] ボタンを選択します。
A screenshot of the Add members dialog box showing how to select developer accounts to be included in the group.
[新規グループ] ページに戻り、[作成] を選択して、グループを作成します。

グループが作成され、[すべてのグループ] ページに戻ります。 グループが表示されるまでに最大 30 秒かかる場合があり、Azure portal でのキャッシュのためにページの更新が必要になる場合があります。
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

2 - Azure AD グループにロールを割り当てる

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

手順 Screenshot
Azure portal の上部にある検索ボックスを使用してリソース グループ名を検索し、アプリケーションのリソース グループを見つけます。

ダイアログ ボックスの [リソース グループ] 見出しの下にあるリソース グループ名を選択して、リソース グループに移動します。
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
リソース グループのページで、左側のメニューから [アクセス制御 (IAM)] を選択します。 A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
[アクセス制御 (IAM)] ページで、次の操作を行います。
  1. [ロールの割り当て] タブを選択します。
  2. 上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
[ロールの割り当ての追加] ページには、リソース グループで割り当てることができるすべてのロールが一覧表示されます。
  1. 検索ボックスを使用して、より管理しやすいサイズにリストをフィルター処理します。 この例では、Storage BLOB ロールをフィルター処理する方法を示します。
  2. 割り当てるロールを選択します。
[次へ] を選択して、次の画面に進みます。
A screenshot showing how to filter and select role assignments to be added to the resource group.
次の [ロールの割り当ての追加] ページでは、ロールを割り当てるユーザーを指定できます。
  1. [アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選択します。
  2. [メンバー][+ メンバーの選択] を選択する
Azure portal の右側にダイアログ ボックスが開きます。
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
[メンバーの選択] ダイアログで、次の操作を行います。
  1. [選択] テキスト ボックスを使用して、サブスクリプション内のユーザーとグループの一覧をフィルター処理できます。 必要に応じて、アプリ用に作成したローカル開発 Azure AD グループの最初の数文字を入力します。
  2. アプリケーションに関連付けられているローカル開発 Azure AD グループを選択します。
ダイアログの下部にある [選択] を選択して続行します。
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
[ロールの割り当ての追加] 画面で、Azure AD グループが選択済みとして表示されるようになりました。

[レビューと割り当て] を選択して最終ページに移動し、もう一度レビューと割り当てを行ってプロセスを完了します。
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

3 - .NET ツールを使って Azure にサインインする

次に、いくつかの .NET ツール オプションのいずれかを使って、Azure にサインインする必要があります。 サインインするアカウントは、前に作成および構成した Azure Active Directory グループに存在する必要もあります。

Visual Studio のトップ メニューから [ツール]>[オプション] に移動してオプション ダイアログを開きます。 左上の検索バーに「Azure」と入力してオプションをフィルター処理します。 [Azure サービス認証] で、[アカウントの選択] を選びます。

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

A screenshot showing how to sign in to Azure using Visual Studio.

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

DefaultAzureCredential では複数の認証方法がサポートされており、実行時に使われる認証方法が決定されます。 このようにして、アプリでは環境固有のコードを実装することなく、さまざまな環境でさまざまな認証方法を使用できます。

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

DefaultAzureCredential を実装するには、最初に Azure.Identity と、必要に応じて Microsoft.Extensions.Azure パッケージをアプリケーションに追加します。 これを実行するには、コマンド ラインまたは NuGet パッケージ マネージャーを使います。

アプリケーション プロジェクト ディレクトリで任意のターミナル環境を開き、次のコマンドを入力します。

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

通常、Azure サービスには、SDK からの対応するクライアント クラスを使ってアクセスします。 これらのクラスと独自のカスタム サービスは、アプリ全体で依存関係の挿入を介してアクセスできるように、Program.cs ファイルに登録する必要があります。 Program.cs 内で、次の手順に従ってサービスと DefaultAzureCredential を正しくセットアップします。

  1. using ステートメントを使って、Azure.Identity 名前空間と Microsoft.Extensions.Azure 名前空間を組み込みます。
  2. 関連するヘルパー メソッドを使って Azure サービスを登録します。
  3. DefaultAzureCredential オブジェクトのインスタンスを UseCredential メソッドに渡します。

この例を次のコード セグメントに示します。

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

または、次に示すように、追加の Azure 登録メソッドを使わず、サービスでより直接的に DefaultAzureCredential を利用することもできます。

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

上記のコードがローカル開発中にローカル ワークステーションで実行されると、アプリケーション サービス プリンシパルの環境変数、または Visual Studio、VS Code、Azure CLI、または Azure PowerShell では一連の開発者資格情報が検索されます。いずれも、ローカル開発中に Azure リソースに対してアプリを認証するために使用できます。

Azure にデプロイすると、この同じコードでアプリを他の Azure リソースに対して認証することもできます。 DefaultAzureCredential では、環境設定とマネージド ID 構成を取得し、他のサービスに対して自動的に認証することができます。