Cloud Service
Microsoft Entra External ID
顧客やパートナー向けのサインイン基盤を自前で作らず外部委譲。Microsoft Entra External ID がアプリの登録・認証・ソーシャルログインを肩代わりし、CIAM を素早く構築する。AWS Cognito 相当。
- 1.外部ユーザー(顧客・パートナー)向けの認証/ID 基盤(CIAM)。
- 2.Azure AD B2C と B2B 外部コラボの後継となる統合ブランド。
- 3.AWS Cognito や Google Identity Platform に相当する位置づけ。
解決する課題
- 顧客向けアプリにサインイン画面を自前で作ると、パスワード保管・ハッシュ・リセットまで自分で守る羽目になる → 認証基盤を外部に委譲して責任範囲を狭めたい
- 「Google でログイン」「Apple でログイン」のようなソーシャルログインを個別に実装したくない → フェデレーションをまとめて任せたい
- 取引先や協力会社のユーザーを自社ディレクトリに招きたいが、毎回アカウントを発行するのは重い → B2B 招待で相手の ID を借りて協働したい
- 社員向け(従業員テナント)と顧客向けの ID を混ぜたくない → 専用の外部テナントで住み分けたい
主要概念と用語
- External ID(外部 ID): 自社の従業員ではない人(顧客・パートナー)向けの ID を扱う機能群の総称。従業員テナントの機能とはユースケースが分かれる
- 外部テナント(External tenant): 顧客向け(CIAM)アプリ専用に作る、従業員テナントとは独立したテナント種別。サインアップ/サインインのブランディングやユーザーフローを外部ユーザー向けに最適化できる
- B2C(Business to Consumer): 一般消費者がメールアドレスやソーシャルアカウントでセルフサインアップして使う形態。後継として External ID の外部テナントへ集約されつつある
- B2B(Business to Business)コラボレーション: 取引先など別組織のユーザーをゲストとして自テナントに招待し、相手の ID のまま自社リソースへアクセスさせる形態
- ユーザーフロー(User flow): サインアップ/サインイン/パスワードリセットといった一連の画面と挙動を、コードを書かずに構成できる定義
- ID プロバイダー(IdP)連携: Google / Facebook / Apple や、SAML/OIDC の任意の外部 IdP をソーシャル/フェデレーションのサインイン元として追加する設定
- アプリ登録(App registration): 認証を委ねるアプリの定義。リダイレクト URI やスコープを登録し、OAuth 2.0 / OpenID Connect でトークンを受け取る
社員のサインインを担う従業員テナント(旧 Azure AD)と、顧客向けの外部テナントは用途が異なります。 External ID は主に後者(外部ユーザー)を対象にしたブランドで、ディレクトリやポリシーを混在させずに分離して設計するのが基本です。
仕様・制限・クォータ
- 認証プロトコル: OpenID Connect / OAuth 2.0 を中心に、外部 IdP 連携では SAML も利用できる
- テナント種別: 顧客向けは外部テナントを新規に作成して使う。従業員テナントとはサブスクリプション/課金や既定の振る舞いが分かれる
- B2B ゲスト: 招待したゲストはホームテナントの資格情報のままサインインし、こちら側ではゲストとして表現される
- MAU 課金の単位: 顧客向けの認証は**月間アクティブユーザー(MAU)**を基準に数える(具体的な無料枠・単価は変動するため公式の料金ページで要確認)
- カスタマイズ: ロゴ・配色・レイアウトなどブランディングや、属性収集の項目をユーザーフロー側で設定できる
- 上限値(連携できる IdP 数や属性数など)や提供地域は更新されうるため、設計時は最新の公式ドキュメントで確認する
内部の仕組み
External ID はアプリの「認証の出口」を肩代わりします。アプリ自身はパスワードを扱わず、トークンの検証だけを行います。
顧客(CIAM)サインインの流れ
- アプリが External ID(外部テナント)へ OIDC/OAuth 2.0 で認証をリクエストし、ユーザーをサインイン画面へリダイレクト
- ユーザーはローカルアカウント(メール+パスワードやワンタイムパスコード)か、ソーシャル/フェデレーション(Google・Apple・任意の OIDC/SAML IdP)でサインインまたはセルフサインアップ
- 必要なら多要素認証や、ユーザーフローで定義した属性収集(プロフィール入力など)を実施
- External ID が ID トークン/アクセストークン(JWT) を発行し、アプリへ返す。アプリはトークンの署名と対象(
aud)を検証してログイン成立
B2B コラボレーションの流れ
招待されたゲストは自分のホームテナントで認証され、その結果を招待側テナントが信頼してアクセスを許可します。資格情報の管理は相手組織側に残るため、退職などの失効も相手側に追従します。
External ID が担うのは主に認証とユーザー管理です。Azure リソースへの操作権限(認可)は Azure RBAC、アプリ内の権限はアプリ側のロール/クレーム設計で別途決めます。 「サインインできること」と「その先で何ができるか」は分けて設計してください。
設計パターン / ベストプラクティス
- 従業員テナントと外部テナントを分離: 社員用の ID と顧客用の ID を同居させず、外部テナントを切って混在リスクを避ける
- ユーザーフローでまず作る: 独自実装に走る前に、サインアップ/サインイン/パスワードリセットを標準のユーザーフローで構成し、足りない部分だけ拡張する
- ソーシャルログインで離脱を減らす: 顧客には Google / Apple など使い慣れた IdP を用意し、パスワード作成の心理的負担を下げる
- 属性は最小限だけ収集: サインアップで集める個人情報は必要最小限にし、後から段階的に集める(プログレッシブプロファイリング)
- B2B は招待で、B2C はセルフサインアップで: パートナーは B2B 招待、不特定多数の消費者は外部テナントのセルフサインアップ、と入り口を使い分ける
運用・監視
- サインインログ / 監査ログ: 外部ユーザーのサインイン成否やユーザーフローの実行を記録。Log Analytics / Microsoft Sentinel に流して長期保管・相関分析する
- 使用状況メトリクス: MAU の推移を把握し、課金見積もりと不審なスパイク(ボットによる大量サインアップなど)を監視
- ブランディングと文言の管理: ロゴ・配色・利用規約リンクなどはテナント設定として管理し、変更履歴を残す
- 障害時の切り分け: サインインできない場合は、ユーザーフロー・連携先 IdP・アプリのリダイレクト URI の順に確認する。認証失敗(サインイン不可)と認可不足(サインイン後の権限不足)を分けて見る
コスト
顧客向けの認証は**月間アクティブユーザー(MAU)**を基準に課金され、一定の無料枠の範囲なら追加費用なしで使える設計です。具体的な無料枠の規模や超過分の単価、追加機能(高度な MFA 手段など)の扱いは変動するため、断定せず公式の料金ページで確認してください。B2B コラボレーションのゲストも MAU としてカウントされる扱いが基本です。コスト最適化の要点は、不要なサインアップ(ボット)を抑えることと、MAU を増やす設計(過度な再認証)を避けることです。
| 利用形態 | 課金の考え方 | 主な用途 |
|---|---|---|
| 顧客(外部テナント / CIAM) | 月間アクティブユーザー(MAU)基準 | 一般消費者向けアプリのサインアップ/サインイン |
| B2B コラボレーション | 招待ゲストを MAU として計上 | 取引先・協力会社との協働アクセス |
| 追加の認証手段 | 手段により別課金になる場合あり | SMS など一部の MFA 方式 |
セキュリティ
- パスワード保管を持ち込まない: 自前 DB にパスワードを保存せず、 External ID 側に資格情報管理を委ねて漏えい面を縮小する
- 多要素認証を有効化: 重要操作の前にメール/SMS/認証アプリなどで MFA をかけ、可能ならフィッシング耐性のある方式を選ぶ
- セルフサインアップの悪用対策: ボットによる大量登録やパスワードスプレーに備え、レート制限や CAPTCHA 相当の防御、異常検知を組み合わせる
- トークンは必ず検証: アプリ側で ID/アクセストークンの署名・発行元・対象(
aud)・有効期限を検証し、生のクレームを無条件に信用しない - B2B はゲストの権限を絞る: 招待したゲストには必要なアプリ/リソースだけを割り当て、棚卸し(アクセスレビュー)で不要権限を定期的に外す
顧客向けのサインインを従業員テナントに相乗りさせる設計は避けましょう。社員向けのポリシーや管理権限の境界が顧客に漏れ出し、運用と監査が混線します。 顧客(CIAM)は外部テナントとして分離し、ブランディング・属性収集・MFA も外部ユーザー向けに独立して設計してください。
関連サービス・比較
社員のサインインを担う Microsoft Entra ID(従業員テナント) が「内部の人」を対象にするのに対し、External ID は「外部の人(顧客・パートナー)」を対象にします。両者は同じ Entra ファミリーですが、テナント種別・課金・既定の挙動が分かれます。
| 観点 | Entra External ID(外部) | Entra ID 従業員テナント(内部) |
|---|---|---|
| 主な対象 | 顧客・パートナーなど外部ユーザー | 自社の従業員・社内システム |
| 課金の単位 | 月間アクティブユーザー(MAU)が中心 | ユーザー単位のライセンス(Free/P1/P2) |
| サインアップ | セルフサインアップや B2B 招待 | 管理者によるアカウント発行が基本 |
| カスタマイズ | ブランディング/ユーザーフローを外部向けに最適化 | 社内ポリシー/条件付きアクセス重視 |
| 相当する他クラウド | AWS Cognito / Google Identity Platform | AWS IAM Identity Center に近い領域 |
ハンズオン / CLI例
外部テナントやユーザーフローの作成はポータルや専用 API が中心ですが、アプリ登録など基本操作は az CLI でも行えます。次は外部ユーザー向けアプリを登録し、ゲストを招待する例です。
# サインインして対象テナントを選択(外部テナントの ID を指定)
az login --tenant "<external-tenant-id>"
# 顧客向けアプリを登録(OIDC/OAuth のリダイレクト URI を設定)
az ad app create \
--display-name "customer-portal" \
--web-redirect-uris "https://app.example.com/auth/callback"
# 登録したアプリの appId を確認
az ad app list --display-name "customer-portal" --query "[].appId" -o tsv
# B2B コラボレーション: 取引先ユーザーをゲストとして招待
az ad user invite \
--invited-user-email-address "partner@contoso.com" \
--invite-redirect-url "https://app.example.com"
# 招待済みゲストを確認(userType が Guest になる)
az ad user list --query "[?userType=='Guest'].{name:displayName, mail:mail}" -o table
Azure Service
Microsoft Entra External IDを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: Azure / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
Azure AD B2C と B2B 外部コラボの後継となる統合ブランド。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security / operational / reliability
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「外部ユーザー(顧客・パートナー)向けの認証/ID 基盤(CIAM)。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。