🕌

Container Appsで認証をさくっと実装してみた

2024/01/27に公開

イオンネクストでシニアSREをしています@arairyusです。
やってみた系の記事です。

しばらくAzureを触っていなかったので、キャッチアップに必死の毎日を過ごしています。
社内でContainer Appsで動いているアプリに認証を設定したいという要件が出たためEasy Authを使って認証を実装してみました。

TL;DR

Easy Authを使ってContainer Appsに認証を設定してみました。本記事では認可については触れていません。
コードを書くことなくContainer Appsのサイドバーに表示されている認証を選択肢、各プロバイダーで認証を実装できます。
Entra IDを使う場合エンタープライズアプリケーションの設定で特定の従業員のみをアクセス許可することも可能です。

社内向けアプリケーションを展開するときにセキュリティ(認証)どうしてますか?

社内向けに提供するアプリだけど、ちゃんと利用できるユーザは制限したいってことたまにありますよね。

  • ネットワークで制限する
  • 認証認可を設ける

など様々なパターンが考えられると思いますが、あくまで一部の従業員しか使わないような社内向けアプリでリッチな認証認可の仕組みを作るのもめんどくさいですよね。
オフィスのIPやVPN経由だけに接続先を絞るような対応もてっとり早いですが、テレワーク時に特定のアプリ接続のためだけにVPN接続するのもユーザ体験的に微妙です。
一度踏み台サーバーに接続して、踏み台サーバーからのみ接続許可とかも考えられますが、これも使い勝手が悪いしVM作るの自体嫌だなと個人的に思ってます。

Basic認証くらいならサクッと実装できると思いますが、お気持ち程度の対応でしかなくこれも微妙かなと思います。
クラウドを利用していれば各クラウドの認証サービスでサクッと実装できるので、今回はContainer Appsで認証をサクッと実装してみました。

やってみた

まずはサンプルアプリをデプロイする

はじめにContainer Apps環境を作成します。

次に、コンテナアプリを作成します。

コンテナイメージはAzureから提供されているクイックイメージを選択します。

他パラメタはデフォルト設定のままアプリ作成し、生成されたアプリケーション URLをブラウザで表示します。

無事、Container Apps上にホストしたWebアプリケーションが表示されました。

認証を設定する

作成したコンテナアプリのサイドバーの[認証]を選択します。

IDプロバイダーを選択します。
今回は従業員管理をEntra IDで行っている前提で、従業員のみアクセス許可するような認証を実装したいためMicrosoftを選択します。

今回は新規にEntra IDアプリを作成するため、[アプリ登録の種類]を「アプリの登録を新規作成する」にします。
従業員のみアクセス許可させたいため、下記設定にします。

  • テナントの種類 : 従業員
  • サポートされているアカウントの種類 : 現在のテナント - 単一テナント

必要に応じてアクセス許可を設定します。

上記設定後、コンテナアプリでホストしているWebアプリにアクセスするとMicrosoft認証画面が表示されます。

※ アクセス許可でMicrosoft GraphのUser.Readを設定しているため、初回はアクセス許可が出る

MicrosoftアカウントでサインインするとWebアプリにアクセスできました。

一部のユーザのみアクセス許可する

Entra IDのサイドバーで[エンタープライズ アプリケーション]を選択します。

エンタープライズ アプリケーションから作成したアプリを選択肢、プロパティを選択します。
[割り当てが必要ですか?]を「いいえ」から「はい」に変更します。

パラメタ説明文(抜粋)

このオプションが [はい] に設定されている場合は、このアプリケーションにアクセスできるようにするには、最初にこのアプリケーションを、ユーザーとその他のアプリまたはサービスに割り当てる必要があります。

このオプションを [いいえ] に設定すると、すべてのユーザーがサインインできるようになり、他のアプリやサービスでこのサービスへのアクセス トークンを取得できるようになります。

※ 上記設定をすると、アプリに追加されていないユーザーでアクセスするとサインインエラーになります。

次に、アクセス許可したいユーザー・グループを追加します。

今回はMicrosoft GraphのUser.readを設定しているため、追加されたUser01でサインインするとアクセス許可ができな旨のメッセージが表示されます。

上記事象をの解消方法は複数パターンがあります。
今回はContainer Appsで使っているエンタープライズアプリケーションのセキュリティ設定で管理者の同意を追加しました。

管理者の同意を追加後、再度User01でログインすると無事Webアプリケーションが表示できました。

まとめ

AWSのCognitoやGoogle CloudのIAPのようにAzureでもEntra IDを使って簡単に認証を実装できました。
サインインログもエンタープライズアプリケーションで取れるため、運用も楽そうですね。
エンタープライズアプリケーションには他にも便利そうな機能があるので勉強したいなと思いました。

参考

AEON TECH HUB

Discussion