AD B2CではAzure Monitorと連携し、ユーザーのログインなどのフローのログを収集することができます。
今回は下記のドキュメントを参考に、B2CのログをLog Analyticsで送信できるようになるまでの環境構築をご紹介します。
参考:https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/azure-monitor
概要・用語説明
今回は2つのテナントを使い環境構築を行うため、混在しないよう以下の通りとします。
- ADテナント:Log Analyticsを作成するテナント
- B2Cテナント:ユーザーフロー、カスタムポリシーやB2Cユーザーを管理するテナント
また、各テナントで必要なリソースやグループ、どのように関連づけるかの概要は下記の図の通りです。
前提
- サブスクリプションが適用されたADテナントと、B2Cテナントがあるものとします。
- 各テナントにログインするユーザーは、下記の権限を持つものとします。
- ADテナント:サブスクリプションの所有者
- B2Cテナント:グローバル管理者
- B2Cテナントでユーザーフローまたはカスタムポリシーを定義済みで、B2Cユーザーがそれらの実行によりログインできる状態とします。
Log Analyticsワークスペースの作成(ADテナント)
ADテナントにログインし、Log Analyticsワークスペースを作成します。
Log Analyticsワークスペースの設定で、サブスクリプション、リソースグループ、名前、リージョンを入力します。
リソースグループがない場合は新規作成もできます。
この時重要なのがリソースグループ名です。この後の手順でリソースグループ名は使用するため控えておいてください。
リソース管理の委任
B2Cテナントで必要な各種IDを取得(B2Cテナント)
後述の手順では個人のオブジェクトIDも指定できるため厳密にはグループの作成は必須ではないのですが、下記の引用のとおり管理のしやすさの観点からグループを作成する手順をご紹介します。
管理をより簡単にするには、各ロールに Azure AD のユーザー "グループ" を使用することをお勧めします。これにより、個々のユーザーに直接アクセス許可を割り当てるのではなく、ユーザーをグループに追加または削除することができます。
引用:https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/azure-monitor#32-select-a-security-group
テナントIDの取得
-
Azureサービスから「Azure Active Directory」を選択します
セキュリティグループの作成
-
Azureサービスから「Azure Active Directory」を選択します
- ※「B2Cテナント」や「Azure AD B2C」ではありません
-
「すべてのグループ」から新しいグループを作成します
リソース管理を委任するARMテンプレートの作成(ADテナント)
ADテナントで作成したLog Analyticsが配置されているリソースグループ名、およびB2Cテナントで取得した「テナントID」「グループのオブジェクトID」を元に、下記URLの「Deploy to Azure」からリソース管理を委任するARMテンプレートを実行します。
※こちらのARMテンプレートの実行には、サブスクリプションの所有者権限が必要です。
※ARMテンプレートの実行から適用までには5分程度時間がかかる場合があります
基本的にはドキュメント通りの内容で良いですが、ポイントとなる入力項目は下記の通りです。
- Managed By Tenant Id:B2Cテナントで取得したテナントIDを入力
- Authorizations:「principalId」の部分にB2Cテナントで作成したセキュリティグループのオブジェクトIDを入力
- Rg Name:ADテナントのLog Analyticsが配置されているリソースグループ名
委任の確認
テンプレートの実行後、Azure Portalの「サービスプロバイダー」から委任を確認できます
名前を選択すると、サービスプロバイダーおよびロールの割り当てからB2CテナントIDやグループのオブジェクトIDが設定されていることが確認できます。
診断設定の構成(B2Cテナント)
以下の手順でB2CのログをLog Analyticsに送信する設定を追加します。
※B2Cテナントにログイン中のユーザーは、上述の「セキュリティグループの作成」で追加したグループのメンバーである必要があります。
※診断設定を追加してからログが取得できるようになるまで15分程度かかることがあります。
-
B2Cテナントの「ディレクトリとサブスクリプション」の「既定のサブスクリプションフィルター」からADテナントにチェックを付与します。
-
Azureサービスから「Azure Active Directory」を選択します
- ※「B2Cテナント」や「Azure AD B2C」ではありません
-
下記のように診断設定を行い保存します。
Log AnalyticsでB2Cのログを取得する(ADテナント)
実際にお使いのユーザーフローやカスタムポリシーを実行し、ログインを実行してみます。
その後、Log Analyticsの「ログ」から下記のクエリを実行します。
AuditLogs
| where TimeGenerated > ago(90d)
| where OperationName contains "issue"
| extend UserId=extractjson("$.[0].id",tostring(TargetResources))
| extend Policy=extractjson("$.[1].value",tostring(AdditionalDetails))
| summarize SignInCount = count() by Policy, OperationName
| order by SignInCount desc nulls last
まとめ
今回は、環境構築編としてB2CのログをAzure Monitorに連携させるまでの手順をご紹介しました。
次回は、ログで取得できる内容やアラートの送信など、どういったことができるか踏み込んだ内容を記事にまとめる予定です!