外部テナントで顧客ユーザー管理 ― Azure Entra External ID(知識編)
はじめに
この記事シリーズでは、外部テナントのEntra External IDを使用した、業務アプリを利用する顧客ユーザーのMFA認証やEntraIDからの情報取得や操作に関する実装について書いていきます。
この記事では、外部テナントで顧客ユーザー管理するのに知っておきたいEntra External IDの基本的な特徴や料金体系などをまとめました。以降の記事では、C#やNextでの実装手順等を書いていきます。
外部テナントで顧客ユーザー管理 シリーズ
- Azure Entra External ID(知識編)※この記事
- 基本的なMFA認証を組み込んでみよう(C#)
- サインアップ時に属性を登録させよう(C#)
- トークンに属性を追加してみよう(C#)
- 基本的なMFA認証を組み込んでみよう(Next.js編)
【第2章】ユーザー情報操作編 - GraphAPIで顧客ユーザー情報を操作しよう(本人編(C#))
- GraphAPIで顧客ユーザー情報を操作しよう(他人編(C#))
Azure Entra External IDとは?
AzureのID管理機能(IAM)といえば、Azure Entra ID(旧Azure AD)。
その中でも、組織外部のユーザー(顧客、パートナー、取引先など)を安全に管理・認証するための機能群の総称。
▶ 従業員テナントと外部テナント
普段、Azureで組織のユーザー管理として使われているのが「従業員テナント(Workforce Tenant)」と呼ばれているのに対し、2024年5月にGAされ正式に商用利用できるようになったのが「外部テナント(External Tenant)」。
Entra External IDという外部IDの管理機能はどちらのテナントでも使えるわけですが、"テナント"というコンテキストの違いで、機能が管理対象とする人物像が異なってきます。
- 従業員テナント:社内業務や社内外のコラボレーションが目的
=自社の従業員アカウントやリソース、また一緒に作業するパートナーなどのアカウントを管理
⇒外部ID:自組織に招待したいビジネスパートナーなど - 外部テナント:自社サービスの顧客管理や外部公開サービスの認証基盤としての利用が目的
=外部公開するリソースやそのリソースにアクセスする顧客アカウントなどを管理
⇒外部ID:自社サービスを利用する顧客など
「外部テナント」のEntra External IDはAzureのCIAM(Customer Identity and Access Management)として位置づけられ、外部ユーザーがGmailなどの既存アカウントでサインインできるようにしたり、MFA(多要素認証)などのセキュリティ制御も簡単に適用できるようになっています。
▶ 外部テナント向けMicrosoft Entra External ID(CIAM)の特徴
ざっくり箇条書きします。
- サブスクリプション管理機能は持たない(従業員テナントのサブスクリプションを紐づけて利用)
- ユーザー自身によるサインアップが可能(招待機能もあり。ただし現時点ではプレビュー段階)
- ノーコードでサインアップ・サインイン・パスワードリセット等の設定や画面提供が可能
- メールOTPによる本人確認を標準サポート
- 多要素認証(MFA)の設定が可能
- ユーザーの基本情報(氏名、メールアドレス等)に加え、カスタム属性も定義可能
- Microsoft Graph API経由でユーザーの登録・検索・更新・削除が可能
- 1日あたり数百万ユーザー、数十億件の認証をサポートする高いスケーラビリティ ※
- ユーザーアカウントとアプリケーションの収容制限は125万オブジェクト ※
(カスタムドメイン追加で最大525万オブジェクトまで拡張可能)
※GPT情報のみのため、正確性は公式ドキュメントで要確認(詳細は補足参照)
▶ 特徴の補足
>> ユーザー自身によるサインアップ
顧客ユーザー自身がユーザー登録できる機能です。従業員テナントの管理者が組織ユーザーを招待する従来型とは異なり、B2Cなど不特定多数のユーザーを想定しています。
従来通り、管理者によるユーザー作成や招待も可能ですが、現時点では外部テナントでの外部ユーザー招待はプレビュー機能になっています。
>> ノーコードでサインアップ・サインイン・パスワードリセット等の設定や画面提供
画面まで自動提供されるため、開発コストを大幅に削減できます。ただし、デザインのカスタマイズには制限があり、完全な自由度はありません。
参考: ブランドのカスタマイズ方法
なお、自前の画面に差し替えてMFA認証を組み込むことは、処理の複雑性やセキュリティ上の理由から非推奨であり、CIAM環境では不可(できるように作られていない)です。基本的にはMicrosoftの提供機能を利用する形となります。
>> メールOTPによる本人確認/多要素認証(MFA)設定可能
認証方法として利用できるのは、下記の5種類。
- ID(メールアドレス)とパスワード
- メールOTP(ワンタイムパスワード)
- ソーシャルIDプロバイダ(Facebook、Google、Apple)
- SMS電話認証(アドオン、2段階目のみ)
MFAの2段階目として利用できるのは「メールOTP」と「SMS認証」です。
※SMS認証はアドオン機能で、認証ごとに追加課金が発生します。(詳細は料金参照)
また、2段階認証を要求せず、メールOTPのみでログインする運用も可能です。この場合、ユーザーデータはパスワードを持たず、常にOTPのみで認証します。
>> カスタム属性の定義
カスタム属性は、氏名やメールアドレスなど既定の属性に加え、任意の値(主に文字列型)をユーザー属性として定義できます。これにより、情報保持の一貫性やユーザーデータの柔軟性が期待できます。
一方、カスタム属性はEntraポータル上では表示も編集もできず、Graph API経由でのみ取得・更新が可能となっています。この点、運用や監査の際にポータルで直接データを確認できないなど、保守面での課題となる可能性があります。
>> Microsoft Graph API経由でのユーザー情報操作
EntraID上のユーザー情報は、Entraポータルだけでなく、Microsoft Graph API経由でも取得・更新・作成・招待等が可能です。GraphAPIを経由することで、アプリにユーザー情報の操作機能を組み込むことが可能になります。
※APIアクセス許可の構成が前提となります。
操作内容に応じて、移譲権限(ユーザー自身の情報取得・更新等)やアプリ権限(他者の情報操作や一括処理、カスタム属性の操作等)の設定が必要になります。
>> 高いスケーラビリティ/収容制限
現時点ではCIAMの公式ドキュメントに明示されていませんが、CIAMはB2Cと同等の技術基盤とされており、B2Cの制限値が適用されると考えられます(GPT情報)。
▶ 似たような機能で、Azure AD B2Cってなかった?
あります。基本的なコンセプトが違い、
- B2C:一般消費者向けのWebサービスやアプリの認証基盤(B2C用途)
- Entra External ID:顧客や取引先など業務利用を想定した認証基盤(B2B/B2P用途)
というもの。環境としてもB2Cの場合には、(従業員テナントでも外部テナントでもない)専用のテナントが必要となります。
とはいえ、外部テナントのEntra External IDは、B2C用途にも対応できるよう設計されており、MicrosoftとしてはB2CからEntra External IDへの移行を推奨している状況です。(従来のB2Cテナントの後継的な位置づけではある)
※外部テナントのGAに伴い、2024年5月にB2Cテナントの新規構築は終了
▶ Entra External ID の料金体系
外部テナントのEntraExternalIDを使用した顧客ユーザーの認証は、基本的に50000人までの月間アクティブユーザー数(MAU)の認証は無料で使用できます。
登録ユーザー数ではなく、実際にログインしたユーザー数で課金されるため、多くのユーザーが登録されていても、月間のアクティブユーザーが50,000人以内であれば無料です。無料枠以上の利用に関しては、従量課金制となります。(1アクティブユーザーあたり月額約2.5円)
ただし、外部テナントは独立したサブスクリプションを持たないため、従業員テナントのサブスクリプションを使用して構築されます。つまり、従業員テナントと外部テナントは同じEntraIDの認証基盤を利用しており、従業員のMAU+顧客のMAUが課金対象となるため、従業員テナントでEntraIDを使用している場合、注意が必要です。
また先に少し述べた通り、MFA認証を使用するとしても上記枠内であれば基本的に無料で使用できます。ただしSMS電話認証に関してはアドオン機能となり、(国によっても違うようですが)1認証送信あたり約10円のコストがかかります。 (日本は4段階中下から2番目の低中コスト国)
おわりに
以上が、ざっと外部テナントのAzure Entra External ID(CIAM)で顧客ユーザー管理しようと思った際に知っておくと便利な知識です。
実は、この「テナントの違い」とか「AD B2Cとは違う」とかは、実装上も明確な違いとして現れます・・・が、CIAMに関してはGAされてから日が浅いためか、従業員テナントやB2Cに比べてはっきりとした情報が少ないのが現状です。
「EntraExternalID」だと従業員テナントの情報、「外部ユーザー」だとB2Cの情報、といったように、片手落ちしたコンテキストで調べると欲しい情報になかなかたどり着けません。明確に「外部テナントのEntraExternalID(CIAM)で顧客などの外部ユーザー」というコンテキストをはっきりさせて調査するのがコツになります。(特に、GPTとかAI系はこの傾向が顕著でした。)
次の記事からは、実装編になります!
Discussion