Azure.Identity の DefaultAzureCredential をカスタマイズする
Azure の .NET SDK でマネージド ID を使うときに使う Azure.Identity パッケージの DefaultAzureCredential
クラスがあります。このクラスは、大体のケースではただ単に new DefaultAzureCredential()
のようにインスタンスを作って渡すだけでいいのですが、たまにデフォルトの挙動ではうまくいかない場合があります。例えば、私が遭遇したケースではローカルデバッグ時に Visual Studio 2022 から認証情報をとってくるのではなく Azure CLI から取ってきて欲しいというケースでした。Visual Studio 2022 でサインインしている Azure AD のテナントと、実際にリソースのある Azure AD テナントが別だったので、デフォルトの挙動ではうまくいきませんでした。
私のケースでは Azure CLI の資格情報を使ってほしいと思っていたので AzureCliCredential
を使ってお茶を濁したのですが、開発中と本番で使い分けるのが少しめんどくさいです。
解決方法
DefaultAzureCredential
クラスのコンストラクターには DefaultAzureCredentialOptions
を渡すことができて、そこで色々設定が出来ます。例えば、今回は Azure AD のテナントを指定していれば解決したので、以下のようにすることで動かすことが出来ました。
new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
// Azure AD のテナント ID を指定する
TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
});
その他にも DefaultAzureCredential
がトークンを取ってくるために使用する資格情報の場所を、ある程度指定することも出来ます。ExcludeXxxxxx
というプロパティがあるのでトークンを取ってきてほしくない所に対して true
を設定することで、その場所からは資格情報を取ってこないようにすることが出来ます。例えば Visual Studio と Visual Studio Code からは取ってきてほしくない場合は以下のように設定します。
new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
ExcludeVisualStudioCredential = true,
ExcludeVisualStudioCodeCredential = true,
});
まとめ
ということで DefaultAzureCredential
の動きに不満があったら DefaultAzureCredentialOptions
でそれっぽいプロパティがないか確認してみることで幸せになれそうです。めでたしめでたし。
Discussion