しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

App Service / Container Apps / Static Web Apps の Entra ID 認証を Managed Identity でシークレットレス化する

意外に昔から使えるようになっていたようですが、App Service Authentication で Microsoft Entra ID 認証を使う際に必要だった Client Secret を、Managed Identity を使うことで不要に出来る機能が追加されていました。

現状はプレビュー扱いのようですが、ドキュメントもひっそりと更新されていました。

Entra ID 認証を使うと Client Secret は推奨の有効期限が 180 日となっていますし、以前は期限なしにも出来ましたが現在は最長でも 2 年までとなっているため、定期的な更新が必須となっていますが、Managed Identity を使うと Client Secret 自体が必要無くなるため更新も必要無くなります。

Bicep を使って自動化する方法が以下のブログで紹介されていますが、肝となる部分は Entra ID のアプリ登録で Managed Identity を Federated Credentials として登録していることです。

ちなみに Azure Portal からの App Service Authentication の設定時に既存の Entra ID アプリケーションを選ぶと Managed Identity を使う方法で構成されるようです。新しい Entra ID アプリケーションを作成する場合にはこれまで通りの Client Secret を使う方法になります。

実際に Azure Portal で新しく Entra ID アプリケーションを作成し、Client Secret を使う方法から Managed Identity を使う方法に切り替えてみます。App Service Authentication の設定自体はこれまで通り行います。

後で Managed Identity に切り替えるので Client Secret の期限は適当で問題ありません。とりあえず推奨の 180 日にしておけば良いです。

Azure Portal から App Service Authentication の設定が完了すると、App Settings には MICROSOFT_PROVIDER_AUTHENTICATION_SECRET という名前の設定が追加され、この設定に Client Secret が入っているのでこれを削除するのが今回の目標となります。

この後は User-Assigned Managed Identity を作成して、必要な設定を行っていきます。まずは適当な名前で User-Assigned Managed Identity を作成して、App Service Authentication の設定時に作成された Entra ID アプリケーションの Federated Credential として作成した UAMI を割り当てます。

GitHub Actions 向けに Federated Credential を使うのが流行った時には Managed Identity のドロップダウンは用意されていなかった気がしますが、今は以下のように選択肢があるので選択して UAMI の設定を行います。

User-Assigned Managed Identity を Federated Credential として追加すると、以下のような表示になります。

Entra ID アプリケーションに UAMI を紐づければ、後は App Service にも UAMI を割り当てて App Settings に追加すれば手順は完了です。まずは UAMI を割り当てますが、これはシンプルに Identity の設定から追加すれば良いので難しいことはありません。

App Service に UAMI を割り当ててしまえば、最後に OVERRIDE_USE_MI_FIC_ASSERTION_CLIENTID という名前で割り当てた UAMI の Client Id を App Settings に追加して認証の設定を更新します。Client Secret の設定であった MICROSOFT_PROVIDER_AUTHENTICATION_SECRET は必要無くなるため同時に削除しておきます。

認証の設定更新は以下のように Client Secret Setting Name として追加した App Setting を選ぶだけです。

このタイミングで App Service にアクセスすると Client Secret を使っていた時と同じように Entra ID 認証が通ることが確認出来ます。Client Secret を使わずに Federated Credential を使うため有効期限を完全に無くすことが出来ました。

最後に Entra ID アプリケーションの設定から Client Secret を完全に削除すれば終わりです。

今回は App Service を対象に行いましたが、Container Apps と Static Web Apps も同じ Authentication の実装を使っているのと、Managed Identity が利用できるので同じように Client Secret を使わずに Entra ID 認証が行えるので、更新期限を意識する必要がなくなります。

特に Static Web Apps についてはドキュメントが存在しなかったのですが、Managed Identity は使えるので実際に設定して確認したところ問題なく動作しました。