SaaS

Azure AD B2B で Google アカウントを招待する

はじめに

こんにちは、すかんくです。これが入社後 1 本目のエンジニアブログです。
今回は Azure AD External Identities と呼ばれる外部 ID 連携機能を用いて、Google アカウントを社内に招待する方法についてご紹介したいと思います。

Azure AD B2B の概要

Azure AD B2B とは、ビジネスパートナー自身が所有する ID を持ち込み、社内テナントへサインインする機能のことを言います。

この機能を用いると、サプライヤー・パートナー・ベンダー・インターンといった社外のユーザーと、自社のリソース内で共同作業を行うことが可能になります。

具体的には、Microsoft Teams で上で社外の方とコミュニケーションを取ったり、自社の Azure AD と連携している SaaS を使わせたいといった要望がある際に、社内 ID を発行せずとも良いということになります。

ユーザーに ID を持ち込んでもらうことで、管理者としては ID 管理の手間、ユーザーとしても複数の ID を管理する必要が無くなるため、シームレスに業務継続が可能になります。

また、招待されたユーザーには従業員と同レベル、具体的には Azure AD P1/P2 の制御が適用可能なため、条件付きアクセスを利用したりとセキュリティ ポリシーやコンプライアンスの面でも安全して使用できます。

注意:条件付きアクセスに関しての補足

Azure AD B2B で招待したユーザーに対して、条件付きアクセスによるデバイスやアプリベースの条件付きアクセス適用は非推奨となっています。

外部ユーザーに対して上記のような要件がある場合、Azure AD B2B 機能は利用できませんのでご注意ください。

Azure AD B2B の上限と価格

基本的には、Azure AD Premium ライセンスごとに最大 5 人のゲスト ユーザーが許可されています。

ただし Azure AD External Identities 機能を有効化した場合、MAU(月間アクティブユーザー)ベースの課金モデルに変更されます。
この場合、なんと月間 50,000 アクティブ ユーザーまで無料になります。

Azure AD B2B のみ利用する環境で月間 50,000 アクティブユーザーを超過するというのは、中々な難しいと思いますが、もし超過してしまった場合についても、比較的低金額で利用可能です。

  • Azure AD P1:$0.00325/MAU
  • Azure AD P2:$0.01625/MAU

社内 ID を発行してライセンスを付与するより断然お得ですね。

課金に関する注意点

  • B2B・B2C を合計して 50,000 MAU が上限になります。
  • SMS/電話ベースの MFA 試行のたび、別途 $0.03 が課金されます。

招待可能な ID プロバイダー

Azure AD B2B を利用して招待可能な ID プロバイダーは以下の通りです。

既定で有効

  • 他の Azure Active Directory
  • Microsoft アカウント

フェデレーション設定が必要

  • Google アカウント
  • Facebook アカウント
  • SAML/WS-Fed を利用した任意の IdP フェデレーション(例:Google Workspace、AD FS)

上記に当てはまらない ID を利用 or フェデレーション設定せずに招待

  • メールベースのワンタイムパスコード(例:Hotmail)

例えば、Google フェデレーションの設定をしなかった場合、Google アカウントはすべてメールベースのワンタイムパスコードで認証されます。

試してみる

今回は Azure AD External Identities を有効化し、Google アカウントを自社 Azure AD テナントに招待するまでの流れを確認していきます。

  1. Azure サブスクリプションの設定
  2. Google 開発者プロジェクトの設定
  3. Azure AD External Identities の有効化
  4. Google アカウントのフェデレーション設定
  5. 条件付きアクセスによる多要素認証要求
  6. Google アカウントでのログインテスト
  7. 2 回目以降のサインインエクスペリエンス

Azure サブスクリプションの設定

まず初めに、Azure サブスクリプションと Azure AD テナントを紐づける必要があります。

(上限が高いとはいえ)
課金モデルのため、事前に課金先を紐づけておかないと利用はできません。
任意の Azure サブスクリプションとリソースグループをご準備いただき、次の手順を実施してください。

Azure ポータルへアクセスし、[サブスクリプション] > [リソース プロバイダー] をクリック。
② 検索欄で [Microsoft.AzureActiveDirectory] と検索して選択、[登録] をクリック。
③ [状態] が [Registered] になったことを確認する。

Google 開発者プロジェクトの設定

Google とのフェデレーションに使用するクライアント ID とクライアント シークレットを発行します。
設定用の Google アカウントをご準備いただき、次の手順を実施してください。

Google Developers Console へ作成した Google アカウントでサインイン。
② [プロジェクトの選択] > [新しいプロジェクト] をクリック。

③ [プロジェクト名] を入力(例:AADB2B)し、[作成] をクリック。

④ [OAuth 同意画面] > [外部] を選択し、[作成] をクリック。

⑤ [アプリ名] と [ユーザーサポートメール] を入力。(任意項目はスキップ)
⑥ [承認済みドメイン] > [+ドメインの追加] をクリックし、”microsoftonline.com” と入力。
⑦ [デベロッパーの連絡先情報] を入力。
⑧ [保存して次へ] をクリック。※ [スコープ/テストユーザー/概要] は操作せず、次へ進む。

⑨ [認証情報] > [+認証情報を作成] > [OAuth クライアント ID] をクリック。

⑩ [アプリケーションの種類] で [ウェブアプリケーション] を選択。
⑪ [名前] と [以下の URI] を追加し、[作成] をクリック。
※ <テナント ID> は [Azure Portal] > [Azure Active Directory] > [概要] で確認。

⑫ 作成時に表示される [クライアントID/クライアントシークレット] を保管する。

⑬ [OAuth 同意画面] に戻り、[アプリを公開] をクリック。
⑭ [確認ステータス] と [公開ステータス] が画像の通り表示されることを確認する。

Azure AD External Identities の有効化

Azure AD と Azure サブスクリプションをリンクさせ、Azure AD External Identities による MAU 課金モデルを有効化します。

① Azure AD かつ Azure サブスクリプションの管理ユーザーで Azure ポータル にサインイン。
② [Azure Active Directory] > [External Identities] > [リンクされたサブスクリプション] へ移動。
③ 有効な Azure AD テナントにチェックを入れ、[サブスクリプションへのリンク] をクリック。

④ リンクする Azure サブスクリプションとリソースグループを指定し、[適用] をクリック。

⑤ リンクが成功したことを確認する。

Google アカウントのフェデレーション設定

先ほど発行した [クライアント ID] と [シークレット] を用いて、Google とのフェデレーションを設定します。

① [すべての ID プロバイダー] > [+Google] をクリック。

② [事前準備 B] の [クライアント ID] , [クライアント シークレット] を入力し、[保存] をクリック。

③ [構成済みの ID プロバイダー] に、[Google] が追加されたことを確認する。

Google とのフェデレーション自体は以上で完了です。

条件付きアクセスによる多要素認証要求

ゲストユーザーがサインインする際に、MFA を要求するよう設定します。
MFA の要求が不要な場合、スキップしてください。

① [Azure Active Directory] > [セキュリティ] > [条件付きアクセス] へ移動。
② [新しいポリシー] > [新しいポリシーを作成する] をクリック。

③ 以下の通り設定を行い、[作成] をクリック。
④ ポリシーの一覧で、作成されていることを確認する。

  • 名前
    • 任意
  • ユーザーまたはワークロード ID
    • すべてのゲストと外部ユーザー(必要に応じてターゲット)
  • クラウドアプリ または操作
    • クラウドアプリ
      • すべてのクラウドアプリ(必要に応じてターゲット)
  • 許可
    • 多要素認証を要求する
  • ポリシーの有効化
    • オン(既にゲストユーザーが存在する場合は [レポート専用] で影響範囲の確認を推奨)

Google アカウントでのログインテスト

実際に Google アカウントを招待して、動作テストを行います。
任意の Google アカウントを取得して、次の手順を実施してください。

① [Azure Active Directory] > [ユーザー] > [+新しいゲストユーザー] をクリック。

② 招待する Google アカウントを入力し、[招待] をクリック。

③ 作成した Google アカウントへログインし、招待のメールから [招待の承諾] をクリック。

④ Azure AD のサインイン画面にリダイレクトされるので、資格情報を入力。

⑤ アクセス許可の確認が表示されるので、[承諾] をクリック。

⑥ MFA の設定が求められるので、セットアップを実施。
※MFA の設定をスキップした場合は表示されません。

⑦ MFA セットアップを完了すると、アクセスパネルが表示されることを確認する。

以降のサインインエクスペリエンス

前手順で動作テストは完了していますが、念のため 2 回目以降のサインインについて確認しておきます。

ゲストユーザーは基本的にアクセスパネルを経由して、各アプリへ接続します。
アクセスパネルには以下の URL へアクセスします。

  • https://myapps.microsoft.com/?tenantid=<tenant ID>
  • https://myapps.microsoft.com/<tenant domain>

例えば、”contso.com” のドメインテナントへアクセスする際は、

  • https://myapps.microsoft.com/contso.com

という風になります。
上記に注意して、以下の手順を実施してください。

① ブラウザーを立ち上げ、アクセスパネル URL を入力。
② Microsoft サインイン画面で、Google アカウントのメールアドレスを入力して [次へ] をクリック。

③ 自動的に Google へリダイレクトされていることが分かります。

④ Google アカウントへサインインしていなければ、リダイレクトされ Google サインインが求められます。
※サインインしていた場合はスキップされます。

⑤ MFA を設定していた場合、追加の認証が求められます。

⑥ アクセスパネルへサインイン完了したことを確認します。

その他ポイント

アプリケーションへのダイレクトアクセス

先ほどアクセスパネルへのアクセス URL について解説をしましたが、利用するアプリケーションへダイレクトアクセスさせることが可能です。

URL は以下の通りです。

  • https://myapps.microsoft.com/signin/<app name>/<app ID>?tenantId=<tenant id>

ユーザーの利用シーンに応じて、適切な URL を案内するようにしてください。

ゲストユーザーのグルーピング

Azure AD 動的ユーザーグループを用いて、ゲストユーザーを自動グルーピングすることが可能です。
これにより、そのグループに紐づいた SaaS アプリなどへのアクセス権を自動的に付与できます。

  • すべてのユーザー(メンバー+ゲスト)
    • user.objectId -ne null
  • メンバーのみ
    • (user.objectId -ne null) and (user.userType -eq “Member”)
  • ゲストのみ
    • (user.objectId -ne null) and (user.userType -eq “Guest”)
  • 特定のドメイン:gmail.com など
    • (user.mail -match “gmail.com“)
      • ゲストを考慮すると、UPN でなく mail を推奨
      • ゲストの UPN は #EXT#@xxxx.onmicrosoft.com が付与されるため

最後に

今回は Azure AD の外部 ID 連携機能である「Azure AD B2B を用いて、Google アカウントを社内に招待する方法」についてご紹介しました。

ビジネスパートナー等の方々と社内で共同作業をされる際は、是非活用していただければと思います。

次回は「Azure AD B2B で招待した Google アカウントを使って、社内 SaaS に SSO してみるまで」を予定しています。

ではまた!

参考

すかんく

2022/1 入社、Identity チームのすかんくと申します。
ブログでは IdP 関連の機能紹介を中心に記載していこうと思います。
好きな漫画はアイシールド21・ハイキュー・ベイビーステップです。