Microsoft Sentinel の新しい接続方式 CCP で Azure と Google Cloud を接続してみた
はじめに
以前、Microsoft Sentinel (以下、Sentinel) と Google Cloud を接続する ブログ を書きましたが、Azure ポータルを眺めていたところ、当時使用していたデータコネクタが DEPRECATED
(非推奨) になっていました。
Azure Functions で使用している Python スクリプトがしばらく更新されていなかったのですが (参考) 、まさかデータコネクタごと非推奨になるとは思いませんでした…
気を取り直して、今回は代わりに誕生したデータコネクタ Google Cloud Platform IAM (via Codeless Connector Platform) (Preview)
を使用して、Azure と Google Cloud を接続してみます。
新方式の何がいいか
以前の Azure Functions を使用した方法 (以後、旧方式) の場合、新規プロジェクトを対象とするには環境変数へ都度追加する必要がありました。また、プロジェクトより上位の単位を指定することもできませんでした。新しい CCP を使用した方式 (以後、新方式) の場合、organization-id
を指定することにより、組織単位でログの収集が可能になります。
※今回の記事はプロジェクト単位であり、組織単位については未検証ですが、HCL のコードより指定可能なことを確認しました。
他にも、セキュリティの観点で、旧方式だと Google Cloud のサービスアカウントキーを払い出し、Azure 側で設定する必要がありました。新方式の場合、Workload Identity 連携により、よりセキュアに Azure と Google Cloud を接続可能です。
注意点
新方式は、データコネクタ名に記載の通り、あくまで Preview
版の扱いとなりますのでご注意ください。
(ただし、旧方式にはすでに DEPRECATED
との記載もあり、どちらを採用すればいいのやら…)
また、Azure ポータルのセットアップ画面にも記載がありますが、旧方式と新方式を並行で稼働した場合、新方式が優先される訳ではなく、両方の Log Analytics ワークスペースにデータが取り込まれてしまいます。 重複することで意図しない課金が発生しないよう、どちらかのみの方式を採用するようにしましょう。
NOTE: If both Azure Function and CCP connector are running parallelly, duplicate data is populated in the tables.
[和訳]
注意: Azure Function と CCP コネクタの両方が同時に動作している場合、テーブルに重複したデータが取り込まれる可能性があります。
手順
今回使用する接続方法は、以下手順を使用します。
前提
今回の手順では、Google Cloud Shell のホームディレクトリ上で Terraform によるセットアップを行います。ただし、この方法でそのまま設定すると、アクセスがなかった場合は デフォルト 120 日 で State ファイルが削除されてしまいます。検証目的以外は、Google Cloud Shell による設定は避けてください。
また、コンテンツハブ:Google Cloud Platform IAM
は、事前にインストール済みの前提で進めます。
参考手順:クイック スタート: Microsoft Sentinel をオンボードする
事前準備
作業を始める前に、以下パラメータの確認とリソースを作成しておきます。
- Google Cloud 側で準備すること
- Sentinel と接続するプロジェクト ID
- Azure 側で準備すること
- テナント ID
- テナント ID
詳細手順 (ログ収集用設定)
-
接続対象プロジェクトの Google Cloud Console で Cloud Shell を起動
-
作業用のディレクトリを作成し、移動
mkdir setup_ccp_log && cd setup_ccp_log
-
ログ収集設定用の Terraform スクリプト (
GCPIAMLOGS.tf
) をダウンロードwget https://raw.githubusercontent.com/Azure/Azure-Sentinel/refs/heads/master/DataConnectors/GCP/Terraform/sentinel_resources_creation/GCPIAMCCPLogsSetup/GCPIAMLOGS.tf -O GCPIAMLOGS.tf
-
Terraform スクリプトの修正
スクリプトの 13 行目 を修正します。
data "google_project" "project" { project_id = "Your project_id should be entered" # Sentinel と接続するプロジェクト ID に修正 }
-
Terraform によるデプロイ
terraform init terraform plan terraform apply
-
実行結果の確認
デプロイ後に
Apply complete!
が出ていれば、完了です。
標準出力の内容は、初回セットアップであればこの時点でひかえておく必要はありません。Apply complete! Resources: 4 added, 0 changed, 0 destroyed. Outputs: An_output_message = "Please copy the following values to Sentinel" GCP_project_id = "notify-sentinel-alert" GCP_project_number = "1234567890123" GCP_subscription_name = "sentinel-subscription-IAMlogs"
詳細手順 (認証用設定)
-
接続対象プロジェクトの Google Cloud Console で Cloud Shell を起動
-
前の手順で作成した場所とは別にディレクトリを作成し移動
※認証設定用スクリプトの修正する手間を省くため、state ファイルを分けますmkdir setup_ccp_auth && cd setup_ccp_auth
-
ログ設定用の Terraform スクリプト (
GCPInitialAuthenticationSetup.tf
) をダウンロードwget https://raw.githubusercontent.com/Azure/Azure-Sentinel/refs/heads/master/DataConnectors/GCP/Terraform/sentinel_resources_creation/GCPInitialAuthenticationSetup/GCPInitialAuthenticationSetup.tf -O GCPInitialAuthenticationSetup.tf
-
Terraform によるデプロイ
terraform init terraform plan terraform apply
plan と apply のタイミングで、テナント ID と Workload Identity プールの有無を入力します。
テナント ID は、Azure ポータルの1. Setup the GCP environment
セクションに表示されている値をコピペします。
Workload Identity プールは、作成済みであればyes
、未作成であればno
を指定します。xxx@cloudshell:~/setup_ccp_auth$ terraform plan var.tenant-id Please enter your Sentinel tenant id Enter a value: xx111111-xxx1-111x-x1x1-11xxx1x1x111 # テナント ID を入力 var.workload-identity-pool-id-exists A workload Identity Pool has already been created for Azure? (yes/no) Enter a value: no # Workload Identity プールの作成状況に応じて yes or no を入力 data.google_project.project: Reading... data.google_project.project_auth_setup: Reading... :
-
実行結果の確認
デプロイ後、
Apply complete!
のメッセージと共に各種設定値が出ていれば、正常に完了です。この値は、後述する手順で Azure ポータルへ入力するため、ひかえておきます。Apply complete! Resources: 8 added, 0 changed, 0 destroyed. Outputs: An_output_message = "Please copy the following values to Sentinel" GCP_project_id = "notify-sentinel-alert" GCP_project_number = "1234567890123" GCP_subscription_name = "sentinel-subscription-IAMlogs" Identity_federation_pool_id = "abcde12345fghij67890klmno12345pq" Identity_federation_provider_id = "sentinel-identity-provider" Service_account_email = "sentinel-service-account@notify-sentinel-alert.iam.gserviceaccount.com" workload_identity_pool_id = "abcde12345fghij67890klmno12345pq"
データコネクタのセットアップ
-
Azure ポータルからデータコネクタ:
Google Cloud Platform IAM (via Codeless Connector Platform) (Preview)
をクリック -
Add new collector
ボタンをクリック -
各フォームへひかえておいた値を入力し、
Connect
ボタンをクリック
-
Project ID:標準出力の
GCP_project_id
を指定 -
Project number:標準出力の
GCP_project_number
を指定 -
GCP Subscription name:標準出力の
GCP_subscription_name
を指定 -
Workload identity pool ID:既存の値を使用 (変更できない)
-
Service account email:標準出力の
Service_account_email
を指定 -
Workload identity provider ID:標準出力の
Identity_federation_provider_id
を指定
-
正常に接続されることを確認
設定に問題なければ、以下 2 点が確認できます。
- コネクターが追加される
- データコネクタのステータスが
Connected
になる
ここまでで接続作業は完了です。
-
動作確認
今回は、プライベート環境を使用したため、データの取得を待っている間に Google Cloud 側でサービスアカウントを作成しました。これは、当該環境を私しか使用していないため、IAM アクティビティを意図的に生成する目的です。
そして、30 分ほど待ったところで、Log Analytics ワークスペース (テーブル:
GCP_IAMV2_CL
) にデータが取り込まれました。
最後に
以前の方式だと、事前準備が多かったり、Azure 側でもリソース作成が必要だったりしましたが、新しい方式はこの辺りが解消されております。冒頭で記述しましたメリットも加えて、良いアップデートとなったのではないでしょうか。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。