
Security Command Centerの検出結果をBigQueryへエクスポートしてSQLで分析する
はじめに
こんにちは。
クラウド事業本部コンサルティング部の渡邉です。
Google Cloud環境のセキュリティ管理において、Security Command Centerは非常に重要なサービスです。SCCで検出された脆弱性や脅威の情報を、より詳細に分析したいと思ったことはありませんか?
今回は、Security Command Center Premiumの検出結果をBigQueryへエクスポートし、SQLを用いて分析する方法について解説します。
Security Command CenterのBigQueryエクスポートとは
BigQueryエクスポートとは、SCCで検出された脆弱性や脅威の情報をBigQueryのテーブルにエクスポートする機能です。BigQueryにエクスポートすることで、以下のようなメリットがあります。
- SQLを使用した柔軟な検出結果の検索・分析
- 長期間の検出結果の保持と履歴分析
- Looker Studioなどと連携したダッシュボードの作成
- 他のデータソースとのクロス分析
SCCのコンソール上でも検出結果を確認することはできますが、大量の検出結果を効率的に分析したい場合や、カスタムレポートを作成したい場合には、BigQueryエクスポートが非常に有効です。
BigQueryエクスポートの仕組み
SCCのBigQueryエクスポートには、以下の2種類があります。
| エクスポート種別 | 説明 |
|---|---|
| 継続的エクスポート | 新しい検出結果や更新された検出結果をリアルタイムでBigQueryにエクスポートする |
| 1回限りのエクスポート | 特定の時点での検出結果をエクスポートする |
今回は、継続的に検出結果を収集・分析することを想定し、継続的エクスポートの設定方法を紹介します。
アーキテクチャ
BigQueryエクスポートのアーキテクチャは以下のようになります。
SCCで検出された脆弱性や脅威は、継続的エクスポートの設定に基づいてBigQueryへ自動的にストリーミングされます。ユーザはBigQuery上でSQLを用いて検出結果を検索・分析することができます。

事前準備
必要なIAM権限
BigQueryエクスポートを設定するには、以下のIAM権限が必要です。
| ロール | 説明 |
|---|---|
セキュリティセンター管理者 (roles/securitycenter.admin) または BigQueryエクスポート編集者 (roles/securitycenter.bigQueryExportsEditor) |
SCCのエクスポート設定を管理する権限 |
BigQuery データオーナー (roles/bigquery.dataOwner) |
BigQueryデータセットへの書き込み権限 |
BigQueryデータセットの作成
エクスポート先となるBigQueryデータセットを事前に作成しておく必要があります。
# BigQueryデータセットの作成
bq mk --dataset \
--location="US" \
--description="Security Command Center Findings" \
$GOOGLE_CLOUD_PROJECT:scc_findings

BigQueryエクスポートの設定
gcloudコマンドからの設定
gcloudコマンドを使用して、BigQueryエクスポートを設定していきます。
# 組織レベルでのBigQueryエクスポート設定
gcloud scc bqexports create scc-findings-export \
--organization=ORGANIZATION_ID \
--dataset=projects/$GOOGLE_CLOUD_PROJECT/datasets/scc_findings \
--location=global \
--filter='state="ACTIVE" AND NOT mute="MUTED" AND (severity="HIGH" OR severity="CRITICAL")' \
--description="SCC findings export"
フィルタを設定して、特定の検出結果のみをエクスポートすることも可能です。
エクスポート設定の確認
設定が完了したら、以下のコマンドでエクスポート設定を確認することができます。
# エクスポート設定の一覧を表示
gcloud scc bqexports list \
--organization=ORGANIZATION_ID \
--location=global
エクスポート設定後、新しい検出結果が発生すると自動的にBigQueryにストリーミングされます。
BigQueryで検出結果を分析してみた
BigQueryにエクスポートされた検出結果を、SQLを使用して分析してみます。
エクスポートされると、データセット内にfindingsテーブルが自動的に作成されます。
テーブルスキーマの確認
findingsテーブルには、検出結果に関する詳細な情報が格納されています。主要なカラムは以下のとおりです。
| カラム名 | 型 | 説明 |
|---|---|---|
| source_id | STRING | 検出ソースの一意識別子 |
| finding_id | STRING | 検出結果の一意識別子 |
| event_time | TIMESTAMP | イベント発生時刻 |
| bulk_export_id | STRING | 1回限りのエクスポートの場合の一意識別子 |
| finding | RECORD | 検出結果の詳細情報(ネストされた構造) |
| resource | RECORD | 対象リソースの情報(ネストされた構造) |
findingカラムには、以下のようなサブフィールドが含まれています。
| サブフィールド | 説明 |
|---|---|
| finding.category | 検出結果のカテゴリ(例: OPEN_FIREWALL, PUBLIC_BUCKET_ACL) |
| finding.severity | 重大度(CRITICAL, HIGH, MEDIUM, LOW) |
| finding.state | 状態(ACTIVE, INACTIVE) |
| finding.create_time | 検出結果の作成日時 |
| finding.mute | ミュート状態(MUTED, UNMUTED) |
resourceカラムには、以下のようなサブフィールドが含まれています。
| サブフィールド | 説明 |
|---|---|
| resource.name | 対象リソースの完全なリソース名 |
| resource.project_name | プロジェクト名 |
| resource.type | リソースタイプ |
分析クエリの例
いくつかの分析クエリ例を紹介します。
1. カテゴリ別の検出結果を集計
SELECT
finding.category AS category,
finding.severity AS severity,
COUNT(*) AS finding_count
FROM
`PROJECT_ID.scc_findings.findings`
WHERE
finding.state = 'ACTIVE'
GROUP BY
category, severity
ORDER BY
finding_count DESC
LIMIT 20;
どのような種類の脆弱性が多く検出されているかを把握することができます。

2. プロジェクト別の検出結果数を集計
SELECT
resource.project_display_name AS project_name,
finding.severity AS severity,
COUNT(*) AS finding_count
FROM
`PROJECT_ID.scc_findings.findings`
WHERE
finding.state = 'ACTIVE'
GROUP BY
project_name, severity
ORDER BY
finding_count DESC;
組織内のどのプロジェクトに脆弱性が集中しているかを特定することができます。

3. 直近7日間の検出結果のトレンドを分析
SELECT
DATE(event_time) AS detection_date,
finding.severity AS severity,
COUNT(*) AS finding_count
FROM
`PROJECT_ID.scc_findings.findings`
WHERE
event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY
detection_date, severity
ORDER BY
detection_date DESC, severity;
検出結果のトレンドを時系列で分析することで、セキュリティ状況の変化を把握することができます。

4. 未対応のCRITICAL/HIGH重大度の検出結果一覧
SELECT
finding_id,
finding.category AS category,
finding.severity AS severity,
resource.name AS resource_name,
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', event_time, 'Asia/Tokyo') AS event_time_jst
FROM
`PROJECT_ID.scc_findings.findings`
WHERE
finding.state = 'ACTIVE'
AND finding.severity IN ('CRITICAL', 'HIGH')
ORDER BY
CASE finding.severity WHEN 'CRITICAL' THEN 1 ELSE 2 END,
event_time DESC
LIMIT 100;
優先的に対応が必要な検出結果を一覧化し、是正対応の優先順位付けに活用することができます。

Looker Studioでのダッシュボード化
BigQueryにエクスポートされた検出結果は、Looker Studioと連携してダッシュボードを作成することもできます。
ダッシュボードを作成することで、以下のようなメリットがあります。
- リアルタイムでセキュリティ状況を可視化
- ステークホルダーへの定期報告の効率化
- トレンド分析による異常検知
今回はLooker Studioでのダッシュボードでの可視化は行いませんので、詳細な手順については、別途検証します。
料金について
BigQueryエクスポートを利用する際のコストは以下のとおりです。BigQueryでのSQLでの分析コストや、ストレージコストはかかりますが、SCCでのBigQueryへのエクスポートは無料で利用することができますので気軽に利用することができると思います。
| 項目 | 料金 |
|---|---|
| SCC BigQueryエクスポート | 無料(SCCの機能として提供) |
| BigQuery ストレージ | データ量による(最初の10GB/月は無料) |
| BigQuery クエリ | クエリ量による(月1TB無料) |
BigQueryの料金詳細については、以下の公式ドキュメントをご確認ください。
最後に
今回は、Security Command Center Premiumの検出結果をBigQueryへエクスポートし、SQLを用いて分析する方法を紹介しました。
BigQueryエクスポートを活用することで、SCCの検出結果をより柔軟に分析することができます。特に、組織全体のセキュリティ状況を把握したい場合や、定期的なセキュリティレポートを作成したい場合には非常に有効な機能です。
また、Premium Tierを利用している場合は、Event Threat DetectionやContainer Threat Detectionなどの高度な脅威検出機能の結果もBigQueryにエクスポートすることができるため、より包括的なセキュリティ分析が可能になります。
ぜひ、SCCのBigQueryエクスポート機能を活用して、組織のセキュリティガバナンスを強化してください。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部コンサルティング部の渡邉でした!








