📑

.NET Aspire で Azure にリソースを作成するときの資格情報の設定

2024/11/27に公開

普通の環境では、あまり気にすることはありませんが、.NET Aspire で Azure.Provisioning 系のパッケージを使って Azure に開発用のリソースをデプロイする機能で使う資格情報がデフォルトの構成だと不都合なケースがあります。

規定では DefaultAzureCredential を使用しているのですが、ここを変えることができます。
例えば、私の環境の Azure Subscription は、ゲストとして招待されている Microsoft Entra ID のテナントに紐づいています。Visual Studio でサインインしているアカウントはゲストではなく、メインの Microsoft Entra ID のテナントに紐づいています。

この場合、DefaultAzureCredential は Visual Studio でサインインしているアカウントを使って Azure にアクセスしようとするので、エラーが発生します。これを回避する方法として DefaultAzureCredential のインスタンス化の時に Visual Studio の Credential は使わないという設定が可能ですが、.NET Aspire ではこの設定を変更する方法がないようです。
その代わり、Azure:CredentialSource という設定を使って Azure CLI などの他の資格情報を使う方法ことができます。

例えば Visual Studio 2022 の AppHost プロジェクトの Connected Services の Azure Provisioning Service の設定をするとユーザーシークレットに以下のような設定が追加されます。

{
  "Azure:Location": "選択したリージョン",
  "Azure:SubscriptionId": "選択したサブスクリプションID",
  "Azure:ResourceGroup": "設定したリソースグループ名",
}

ここに対して Azure:CredentialSource を設定することで資格情報の取得元を設定できます。設定できる値は以下の通りです。

  • AzureCli
  • AzurePowerShell
  • VisualStudio
  • VisualStudioCode
  • AzureDeveloperCli
  • InteractiveBrowser

今回の私の場合は Azure CLI では、ちゃんとテナント ID を指定してサインインしているため、そちらを使ってほしいです。そのため以下のようにユーザーシークレットを使うことで資格情報の取得元を Azure CLI に設定します。

{
  "Azure:Location": "選択したリージョン",
  "Azure:SubscriptionId": "選択したサブスクリプションID",
  "Azure:ResourceGroup": "設定したリソースグループ名",
  "Azure:CredentialSource": "AzureCli"
}

これで .NET Aspire で Azure にリソースを作成するときに Azure CLI の資格情報を使ってリソースを作成することができます。

参考

公式ドキュメントは以下になります。

https://learn.microsoft.com/ja-jp/dotnet/aspire/deployment/azure/local-provisioning

Microsoft (有志)

Discussion