Azure SDK for .NET を使用して Azure リソースに対して Azure でホストされるアプリを認証する
Azure App Service、Azure Virtual Machines、Azure Container Instances などのサービスを使用してアプリが Azure でホストされている場合、Azure リソースに対してアプリを認証する方法として推奨されるのは、マネージド ID を使用することです。
マネージド ID では、シークレット キーやその他のアプリケーション シークレットを使用しなくても他の Azure リソースに接続できるように、アプリの ID を提供します。 内部的には、Azure でアプリの ID と、接続が許可されているリソースを把握します。 Azure では、この情報を使用してアプリの Microsoft Entra トークンを自動的に取得し、アプリケーション シークレットを管理しなくても、他の Azure リソースに接続できるようにします。
マネージド ID の種類
マネージド ID には、次の 2 種類があります。
- システム割り当てマネージド ID - この種類のマネージド ID は、Azure リソースによって提供され、Azure リソースに直接関連付けられます。 Azure リソースでマネージド ID を有効にすると、そのリソースのシステム割り当てマネージド ID が取得されます。 システム割り当てマネージド ID は、関連付けられている Azure リソースのライフサイクルに関連付けられます。 リソースが削除されると、その ID も Azure によって自動的に削除されます。 コードをホストしている Azure リソースのマネージド ID を有効にすればよいだけなので、これが最も使いやすい種類のマネージド ID です。
- ユーザー割り当てマネージド ID: スタンドアロンの Azure リソースとしてマネージド ID を自分で作成することもできます。 これが最もよく使用されるのは、ソリューションに複数の Azure リソースで実行される複数のワークロードがあり、すべてが同じ ID と同じアクセス許可を共有する必要がある場合です。 たとえば、ソリューションに複数の App Service と仮想マシンのインスタンスで実行されるコンポーネントがあり、それらのすべてが同じ Azure リソース セットにアクセスする必要がある場合、それらのリソース全体でユーザー割り当てマネージド ID を作成して使用することは理にかなっています。
この記事では、アプリのシステム割り当てマネージド ID を有効にして使用する手順について説明します。 ユーザー割り当てマネージド ID を使用する必要がある場合は、「ユーザー割り当てマネージド ID の管理」の記事を参照して、ユーザー割り当てマネージド ID の作成方法を確認してください。
1 - アプリをホストしている Azure リソースでマネージド ID を有効にする
最初の手順では、アプリをホストしている Azure リソースでマネージド ID を有効にします。 たとえば、Azure App Service を使用して .NET アプリケーションをホストしている場合は、アプリをホストしている App Service Web アプリのマネージド ID を有効にする必要があります。 仮想マシンを使用してアプリをホストしている場合は、VM でマネージド ID を使用できるようにします。
Azure portal または Azure CLI を使用して、マネージド ID を Azure リソースに使用できるようにすることができます。
2 - マネージド ID にロールを割り当てる
次に、アプリに必要なロール (アクセス許可) を決定し、Azure でこれらのロールにマネージド ID を割り当てる必要があります。 マネージド ID には、リソース、リソース グループ、またはサブスクリプション スコープでロールを割り当てることができます。 この例では、ほとんどのアプリケーションですべての Azure リソースを 1 つのリソース グループにグループ化するため、リソース グループのスコープでロールを割り当てる方法を示します。
3 - アプリケーションに 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
を正しくセットアップします。
- using ステートメントを使って、
Azure.Identity
名前空間とMicrosoft.Extensions.Azure
名前空間を組み込みます。 - 関連するヘルパー メソッドを使って Azure サービスを登録します。
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 構成を取得し、他のサービスに対して自動的に認証することができます。
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示