Microsoft Power Apps ポータルも Azure AD B2C で認証を強化しよう！

# はじめに

最近、よく頂く質問の一つが Power Apps ポータルと Azure AD B2C との連携に関する質問です。しかしながら私自身が Power Apps ポータルを知らなかったので少し調べてみました。

12月08日の公開直後にいきなりの訂正です。Power Apps ポータルの名称は現在、**Power Pages** に変わっていました。記事内の Power Apps ポータルは Power Pages と読み替えて頂ければ幸いです。

# そもそも "Power Apps ポータル" って？
セキュリティ系をやっているとアプリ関連の話には疎くなりがちで、Power Apps ポータルって何だろうと思い、以下のサイトをささ～っと覗いてみました。

https://learn.microsoft.com/ja-jp/power-apps/powerapps-overview

Power Apps ポータルの前に、まずは**Power Apps** です。すごく簡単にいうと、Power Appsは Power Platform のひとつでノーコード、ローコードでビジネスアプリをすばやく構築して共有できるサービスです。最近のアプリの内製化の流れなのでしょうか、多くの企業で使用されているようです。そしてその Power Apps で作成できるアプリは**キャンバスアプリ**、**モデル駆動型アプリ**、**Power Apps ポータル**の3種類があります。

https://learn.microsoft.com/ja-jp/power-apps/maker/portals/overview

**Power Apps ポータル** は事前に用意されているテンプレートやフォームやビューを使用してカスタマイズした Web サイトを作成することができます。さらに組織外のユーザーに対して作成したアプリを公開することも可能で、組織外のユーザーはさまざまな ID でサインアップ、サインインすることが可能です。この組織外のユーザーの登録や認証する部分で Azure AD B2C を使用することができます。

# Power Apps ポータルの認証

以下の画面は Power Apps ポータルの ID プロバイダーの設定画面です。ID プロバイダーとしては、"Azure Active Directory B2C" (以下Azure AD B2C) 以外に、"ローカルサインイン"、"Azure Active Directory"、 "Facebook"、 "LinkedIn"、 "Google"、 "Twitter"、"Microsoft" を選択することが可能です。　ちなみに、Azure AD B2C で認証しPower App ポータルにアクセスするユーザーは自動的に Power Apps の Dataverseテーブルに登録されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/981c251a-2a28-9020-277c-1ba41d0a5fe8.png)

# 認証に Azure AD B2C を使うと何が嬉しい？
先ほどの ID プロバイダー設定画面にあるように Power Apps ポータルはローカルサインインの認証機能がビルトインされており、わざわざ Azure AD B2C を利用する必要はあるのでしょうか？ 実は、Azure AD B2C を使用することで以下のメリットを得ることができます。

**メリット 1：ビルトインされた多要素認証**
みなさんもお気づきだと思いますが、コンシューマ向けのサイトも多要素認証を採用しているところが多いです。Azure AD B2C では ID とパスワードによる認証に加えて、下図にある E メールや SMS、電話、アプリの4種類のどれかを認証要素として追加することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/0197cd35-bfa9-3781-a347-ec2eadfae904.png)
**メリット 2：様々な ID プロバイダー(IdP) との連携**
Azure AD B2C 自身が認証を行うローカルアカウントに加えて、外部の認証サービスと連携し Power Apps ポータルを利用することが可能です。現在、以下のID プロバイダーは事前にテンプレートが登録されていますので、簡単に 外部 IdP として設定することが可能です。(一部 Preview があります。） テンプレート登録されていない IDプロバイダーについても、OpenID Connect や SAML プロトコルに対応していれば、手動でカスタマイズ登録することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/21c1fc7c-7e95-92e5-ce14-ab80b3c372ed.png)
**メリット 3：認証画面のカスタマイズ**
ブランディング機能として、認証画面のバックグラウンドやバナーに画像を挿入することが可能です。さらにHTML/CSSを編集してカスタマイズすることも可能です。以下はカスタマイズ例で、Azure AD B2C のローカルアカウントに加えて外部のIdPであるGoogle、Microsoft、Facebook、Apple のアカウントを使用してアプリを利用することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/79b3d33a-66e3-4fc1-bcbe-5003ee75e7ed.png)

**メリット 4：Identity Protection と条件付きアクセスによる脅威からの防御**
Azure AD と同じく Azure AD B2C もゼロトラストを実現するための重要な機能の一つである Identity Protection を利用することが可能です。Identity Protection は下図にあるように、様々なソースから一日に数10兆ものシグナルを受け取り分析し、Azure AD B2C へのアクセスに対しリスクを判定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/81ea63cb-0f47-bf24-4ef8-37aaf41f57ab.png)
Identity Protection の脅威検出の詳細については以下のサイトをご参照ください。

https://jpazureid.github.io/blog/azure-active-directory/holistic-compromised-identity-signals-from-microsoft/

Azure AD B2C では Azure AD のリスク検出のサブセットのみ使用可能で、以下のリスク検出がサポートされていま
|リスク検出の種類|説明                                         |
|---------------|--------------------------------------------|
| 特殊な移動     | ユーザーの最近のサインインに基づき特殊と判断された場所からのサインイン|
| 匿名IPアドレス| 匿名の IP アドレスからのサインイン (例: Tor Browser、Anonymizer VPN)|
|マルウェアにリンクした IP アドレス| マルウェアにリンクした IP アドレスからのサインイン|
|通常とは異なるサインイン プロパティ|指定されたユーザーで最近観察されていないプロパティを使用したサインイン|
|ユーザーに対するセキュリティ侵害を管理者が確認|管理者は、ユーザーが侵害されたことを示しています|
|パスワード スプレー| パスワード スプレー攻撃を使用したサインイン|
|Azure AD 脅威インテリジェンス|Microsoft の内部および外部の脅威インテリジェンス ソースが既知の攻撃パターンを特定しました|

Azure AD B2C のライセンスには Premium P1(以下P1)とPremium P2(以下P2)があり、その両方で Identity Protection が使用可能です。(既定ではオンになっています。）危険なユーザーをレポートする機能やリスク検出レポートについてはP1、P2 ともに使用可能です。**P2** でのみ利用可能な機能には **「条件付きアクセス」** があります。下図にあるようにユーザーが Power Apps ポータルにアクセスする条件としてリスクレベルとアクションを設定することが可能です。リスクには「ユーザーのリスク」と「サインインのリスク」があります。「ユーザーのリスク」は脅威インテリジェンスやパスワードスプレー攻撃などオフラインで検出するリスクで「高」、「中」、「低」のレベルを選択できます。対してリアルタイム検出が「サインインのリスク」になります。匿名IPアドレスや特殊な移動、マルウェアにリンクしたIPアドレスがこれに該当します。リスクレベルとしては、「高」、「中」、「低」、「リスクなし」を選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/eaeb60ef-15db-2a48-26a4-e430697d32f6.png)
ユーザーからのアクセスが「条件付きアクセス」で設定したリスクレベルと合致した場合に下図の「アクセス制御」で設定するアクションが実行されます。アクセス制御には「アクセスのブロック」か「アクセス権の付与」のどちらかを選択することができます。「アクセス権の付与」を選択した場合はさらに、「多要素認証を要求する」、「認証強度が必要(プレビュー)」、「パスワードの変更を必須とする」を選択することが可能です。注意点としては Azure AD の条件付きアクセスはブラックリスト方式です。そのため条件に合致しなかった場合は自動的に「アクセス許可」が選択されます。ですので、例えばリスクが「高」の場合は、「アクセスブロック」、または「アクセス権の付与」と「多要素認証を要求する」を設定する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/b7115624-4ac3-2791-f2c3-a3f4e799ce13.png)
「条件付きアクセス」のポリシーを有効化する前にまずは、「レポート専用」でログを確認し想定通りの動作になっているかを確認することをお勧めします。

**メリット 5：50,000MAUまで無償で利用可能**
Azure AD B2C の価格は、1 か月間に認証アクティビティを行った一意のユーザー数である **「月間アクティブ ユーザー数 (MAU)」**  に基づいています。 この課金モデルは、Azure AD B2C テナントと Azure AD ゲスト ユーザー コラボレーション (B2B) の両方に適用されます。 **月ごとに50,000 MAU までは P1 と P2 の両方の機能を無料で使用できます。** 課金されるのは50,001 MAU 以降になります。ただし、SMS/音声の電話番号を使用した多要素認証は無料枠はなく、1回使用する毎に課金されます。詳細については以下のサイトをご確認ください。

https://azure.microsoft.com/ja-jp/pricing/details/active-directory/external-identities/

# まとめ
Azure AD B2C を Power Apps ポータルの認証に使用すると多くのメリットを享受することができます。今回は Azure AD B2C の説明が中心になりましたが、Power Apps Portal と Azure AD B2C の連携設定方法についてもいつかブログに書ければと思います。まずは、ぜひ以下のチュートリアルから Azure AD B2C テナントを作成して試して頂ければと思います。

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/tutorial-create-tenant


注:投稿内容は私個人の意見であり、所属企業・部門とは関係ありません。また、いかなる保証を与えるものでもありません。