Google Cloud Armor ログ(LBログ)を Logging から BigQuery へエクスポート

2021年2月14日

概要

やりたいこと

BigQuery で Cloud Armor ログを検索したい。

Logging から BigQeury へ Cloud Armor ログ (LB ログ) をエクスポートできる。

ログルーターのシンク

Logging からログをエクスポートするのに、ログルーターのシンクがある。

BigQuery 以外にもCloud Storage、Pub/Sub、Elasticsearch にエクスポートできる。

コンソール

手動で Logging シンクを作成

「Logging」 →「ログエクスプローラー」→「操作」→「シンクを作成」。

もしくは「Logging」 →「ログルーター」→「シンクを作成する」でも可能。

という BigQuery の dataset を作成する。

  • シンクの詳細 : waf_to_bq
  • シンクの宛先 : BigQuery で新規データセット(test_waf_manu)
  • シンクに含めるログの選択 : resource.type=http_load_balancer
  • シンクに含めないログの選択 : なし

BigQuery で確認。

SELECT * FROM test_waf_manu.requests

ログを出力できた。

補足

WIP : Terraform で Logging シンクを作成

※できてない、BigQueryのアクセス権限で Logging からの編集を有効化する必要あり

Logging から BigQuery へのエクスポートするシンクを Terraform で作成できる。

エクスポート先の BigQuery は明示的に作成する。

シンクと BigQuery のデータセットを作成する。

vi logging_sync.tf
resource "google_bigquery_dataset" "dataset" {
  dataset_id                  = "lb_waf_tf"
  friendly_name               = "test"
  description                 = "This is a test description"
  location                    = "EU"
  default_table_expiration_ms = 3600000

  labels = {
    env = "default"
  }
}

resource "google_logging_project_sink" "my-sink" {
  name = "my-bigquery-instance-sink"

  # Can export to pubsub, cloud storage, or bigquery
  destination = "bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/lb_waf_tf"

  # Log all WARN or higher severity messages relating to instances
  filter = "resource.type=http_load_balancer"

  # Use a unique writer (creates a unique service account used for writing)
  unique_writer_identity = true

  bigquery_options {
    use_partitioned_tables = true
  }
}

デプロイ。

terraform apply

ログルーターに「my-bigquery-instance-sink」が作成される。

ログを発生させるため、リクエストしてみる。

$ curl -I “http://34.117.94.129/index.html?var=’OR’B=’B'”
HTTP/1.1 403 Forbidden
Content-Length: 134
Content-Type: text/html; charset=UTF-8
Date: Wed, 20 Jan 2021 05:47:04 GMT

参考

Stackdriver Loggingのログを失う前にエクスポートしておく方法(後編)