開発者アカウントを使用したローカル開発時に Azure サービスに対して .NET アプリを認証する
開発者は、ローカル ワークステーションでクラウド アプリのデバッグやテストを行う必要があります。 ローカル開発中に開発者のワークステーションでアプリを実行する場合でも、アプリで使用されるすべての Azure サービスに対して認証を行う必要があります。 この記事では、ローカル開発時に開発者の Azure 資格情報を使用して 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 グループを作成します。
Note
既定では、Microsoft Entra グループの作成は、ディレクトリ内の特定の特権ロールに制限されています。 グループを作成できない場合は、ディレクトリの管理者に問い合わせてください。 既存のグループにメンバーを追加できない場合は、グループオーナーまたはディレクトリ管理者に問い合わせてください。 詳細については、「Microsoft Entraグループとグループ メンバシップの管理」を参照してください。
2 - Microsoft Entraグループへのロールの割り当て
次に、アプリがどのリソースに対してどのようなロール (アクセス許可) が必要かを決定し、それらのロールをアプリに割り当てます。 この例では、手順 1 で作成した Microsoft Entra グループにロールが割り当てられます。 グループには、リソース、リソース グループ、またはサブスクリプション スコープでロールを割り当てることができます。 ほとんどのアプリは、すべての Azure リソースを 1 つのリソース グループにグループ化するため、この例では、リソース グループ スコープでロールを割り当てる方法を示しています。
3 - 開発者ツールを使用して Azure にサインインする
次に、いくつかの開発者ツールのいずれかを使用して Azure にサインインします。 認証するアカウントは、先ほど作成して構成した Microsoft Entra グループにも存在する必要があります。
[ツール]>[オプション] に移動して、[オプション] ダイアログを開きます。
上部の [検索オプション] ボックスに「Azure」と入力して、使用可能なオプションをフィルター処理します。
[Azure サービス認証] で、[アカウントの選択] を選びます。
[アカウントの選択] の下にあるドロップダウン メニューを選び、[Microsoft アカウントを追加] を選びます。 ウィンドウが開き、アカウントを選択するよう求められます。 目的の Azure アカウントの資格情報を入力し、確認を選びます。
[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
を登録します。
using
ディレクティブを介してAzure.Identity
とMicrosoft.Extensions.Azure
名前空間を含めます。Add
というプレフィックスが付いた、対応する拡張メソッドを使用して、Azure サービス クライアントを登録します。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 構成を取得し、他のサービスに対して自動的に認証することができます。
.NET