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
- [作成] Pub/Sub トピック
- [確認] Workload Identity プール
- Azure 側で準備すること
- [確認] テナント ID
- [確認] テナント ID
詳細手順 (ログ収集用設定)
-
Google Cloud Console で Cloud Shell を起動
-
作業用のディレクトリを作成し、移動
mkdir setup_ccp && cd setup_ccp
-
ログ収集設定用の 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, 19 行目 を修正します。
data "google_project" "project" { project_id = "Your project_id should be entered" # Sentinel と接続するプロジェクト ID に修正 } variable "topic-name" { type = string default = "sentinel-topic" description = "Name of existing topic" # Pub/Sub トピック名を指定 }
-
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 を起動
-
前の手順で作成したディレクトリへ移動
cd setup_ccp
-
ログ設定用の 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 スクリプトの修正
スクリプト を修正せずにこのまま作業を続けると、プロバイダやデータリソースが重複していたり、output の名前空間が重複しているため、初期化に失敗します。そのため、以下修正を行います。
※今回は Google Cloud との接続を目的としているため、スクリプトの修正は簡易に済ませます。-
1〜10 行目を削除
terraform { required_providers { google = { source = "hashicorp/google" version = "3.73.0" } } required_version = ">= 0.15.0" }
-
18 行目を修正
data "google_project" "project" {} # 以下に修正 data "google_project" "project_auth_setup" { project_id = "<Google Cloud プロジェクト ID>" }
-
115 〜 137 行目を修正
output "An_output_message"{ # An_output_message_auth_setup に修正 value = "Please copy the following values to Sentinel" } output "GCP_project_id" { # GCP_project_id_auth_setup に修正 value = data.google_project.project.project_id } output "GCP_project_number" { # GCP_project_number_auth_setup に修正 value = data.google_project.project.number } output "Service_account_email" { # Service_account_email_auth_setup に修正 value = "${google_service_account.sentinel-service-account.account_id}@${data.google_project.project.project_id}.iam.gserviceaccount.com" } output "Identity_federation_pool_id" { # Identity_federation_pool_id_auth_setup に修正 value = local.workload_identity_pool_id } output "Identity_federation_provider_id" { # Identity_federation_provider_id_auth_setup に修正 value = google_iam_workload_identity_pool_provider.sentinel-workload-identity-pool-provider.workload_identity_pool_provider_id }
-
-
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$ terraform plan var.tenant-id Please enter your Sentinel tenant id Enter a value: xx111111-xxx1-111x-x1x1-11xxx1x1x111 var.workload-identity-pool-id-exists A workload Identity Pool has already been created for Azure? (yes/no) Enter a value: yes # 今回は事前に作成済みのため yes data.google_project.project: Reading... data.google_project.project_auth_setup: Reading... :
-
実行結果の確認
デプロイ後、
Apply complete!
のメッセージと共に各種設定値が出ていれば、正常に完了です。この値は、後述する手順で Azure ポータルへ入力するため、ひかえておきます。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 サイトをご覧ください。