Google Cloud Secure Web Proxy ログを収集する

以下でサポートされています。

このドキュメントでは、Google Cloud Storage V2 を使用して Google Cloud Secure Web Proxy ログを Google Security Operations に取り込む方法について説明します。

Secure Web Proxy は、下り(外向き)ウェブ トラフィック(HTTP と HTTPS)を保護するクラウド ファーストのサービスです。クラウド ファースト ID とウェブ アプリケーションに基づいた、柔軟かつ詳細なポリシーを実現するマネージド プロキシ ソリューションを提供します。Secure Web Proxy は、ポリシーに準拠していないトラフィックを識別して Cloud Logging に記録します。これにより、インターネットの使用状況をモニタリングし、ネットワークに対する脅威を検出し、セキュリティ インシデントに対応できます。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • Cloud Storage API が有効になっている Google Cloud プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • Secure Web Proxy が Google Cloud 環境で有効になっており、構成されている
  • Google Cloud への特権アクセスと、Secure Web Proxy ログにアクセスするための適切な権限
  • Cloud Logging シンクを作成して管理する権限

Google Cloud Storage バケットを作成する

Google Cloud コンソールを使用する

  1. Google Cloud Console に移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定
    バケットに名前を付ける グローバルに一意の名前(Google Cloud-swp-logs など)を入力します。
    ロケーション タイプ ニーズに基づいて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション ロケーションを選択します(例: us-central1)。
    ストレージ クラス Standard(頻繁にアクセスされるログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

gcloud コマンドライン ツールを使用する

  • または、gcloud コマンドを使用してバケットを作成します。

    gcloud storage buckets create gs://gcp-swp-logs \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • 次のように置き換えます。
      • gcp-swp-logs: 目的のバケット名(グローバルに一意)。
      • us-central1: 希望のリージョン(us-central1europe-west1 など)。

Secure Web Proxy ログを GCS にエクスポートするように Cloud Logging を構成する

Secure Web Proxy は、プロキシ トランザクション ログを Cloud Logging に自動的に記録します。これらのログを Cloud Storage にエクスポートするには、Cloud Logging シンクを作成する必要があります。

Google Cloud コンソールを使用する

  1. Google Cloud コンソールで、[ロギング] > [ログルーター] に移動します。
  2. [シンクを作成] をクリックします。
  3. 次の構成の詳細を指定します。
    • シンク名: わかりやすい名前を入力します(例: swp-export-sink)。
    • シンクの説明: 省略可能な説明。
  4. [次へ] をクリックします。
  5. [シンクサービスの選択] セクションで、次の操作を行います。
    • シンクサービス: [Cloud Storage バケット] を選択します。
    • Cloud Storage バケットを選択: プルダウンから gcp-swp-logs を選択します。
  6. [次へ] をクリックします。
  7. [シンクに含めるログの選択] セクションに、次のフィルタ クエリを入力します。

    logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"
    
    • <YOUR_PROJECT_ID> は、実際の Google Cloud プロジェクト ID に置き換えます。
  8. [次へ] をクリックします。

  9. 構成を確認して、[シンクを作成] をクリックします。

シンクを作成すると、Cloud Logging にシンクの書き込み ID(サービス アカウントのメールアドレス)が表示されます。次の手順で使用するため、このサービス アカウントのメールアドレスをコピーします。

gcloud コマンドライン ツールを使用する

  • または、gcloud コマンドを使用してシンクを作成します。

    gcloud logging sinks create swp-export-sink \
        storage.googleapis.com/gcp-swp-logs \
        --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'
    
    • 次のように置き換えます。
      • swp-export-sink: 目的のシンク名。
      • gcp-swp-logs: GCS バケット名。
      • <YOUR_PROJECT_ID>: Google Cloud プロジェクト ID。

Cloud Logging サービス アカウントに権限を付与する

Cloud Logging シンク ライター ID サービス アカウントには、GCS バケットにログを書き込む権限が必要です。

Google Cloud コンソールを使用する

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名(gcp-swp-logs)をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成の詳細を指定します。
    • プリンシパルを追加する: Cloud Logging シンク書き込み ID サービス アカウントのメールアドレス(serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com など)を貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
  6. [保存] をクリックします。

gcloud コマンドライン ツールを使用する

  • または、gcloud コマンドを使用して権限を付与します。

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectAdmin"
    
    • 次のように置き換えます。
      • gcp-swp-logs: バケット名。
      • <LOGGING_SERVICE_ACCOUNT_EMAIL>: Cloud Logging シンク ライター ID サービス アカウントのメールアドレス。

gsutil コマンドライン ツールを使用する(以前のバージョン)

  • ロギング サービス アカウントにオブジェクト管理者ロールを割り当てます。

    gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \
        gs://gcp-swp-logs
    

権限を確認する

  • 権限が正しく付与されたことを確認するには:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectAdmin"
    

出力に Cloud Logging サービス アカウントのメールアドレスが表示されます。

Google SecOps サービス アカウントを取得する

Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。

GCP Secure Web Proxy ログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: GGoogle CloudCP Secure Web Proxy Logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [GCP Secure Web Proxy] を選択します。

  7. [サービス アカウントを取得する] をクリックします。一意のサービス アカウント メールアドレスが表示されます(例:)。

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. このメールアドレスをコピーして、次のステップで使用します。

  9. [次へ] をクリックします。

  10. 次の入力パラメータの値を指定します。

    • ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。
    gs://gcp-swp-logs/
    
    • 次のように置き換えます。
      • gcp-swp-logs: GCS バケット名。
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。

    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。

    • アセットの名前空間: アセットの名前空間

    • Ingestion labels: このフィードのイベントに適用されるラベル。

  11. [次へ] をクリックします。

  12. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。

Google Cloud コンソールを使用する

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成の詳細を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

gcloud コマンドライン ツールを使用する

  • または、gcloud コマンドを使用して権限を付与します。

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectViewer"
    
    • 次のように置き換えます。
      • gcp-swp-logs: バケット名。
      • <SECOPS_SERVICE_ACCOUNT_EMAIL>: Google SecOps サービス アカウントのメールアドレス。

gsutil コマンドライン ツールを使用する(以前のバージョン)

  • 次のコマンドを実行して、SecOps サービス アカウントにオブジェクト閲覧者の権限を付与します。

    gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \
        gs://gcp-swp-logs
    

権限を確認する

  • 権限が正しく付与されたことを確認するには:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

出力に Google SecOps サービス アカウントのメールアドレスが表示されます。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
httpRequest.latency、jsonPayload.@type、logName additional.fields latency_label(キー「HTTPRequest Latency」、値は latency)、type_label(キー「Log Type」、値は @type)、logname(キー「Log Name」、値は logName)と統合されます。
receiveTimestamp metadata.collected_timestamp RFC3339 タイムスタンプとして解析
metadata.event_type has_principal が true、has_target が true、プロトコルが (?i)http と一致する場合は NETWORK_HTTP に設定します。has_principal が true、has_target が true、network が「」でない場合は NETWORK_CONNECTION に設定します。has_principal が true、has_target が true、has_principal_user が true の場合は USER_LOGIN に設定します。has_principal が true の場合は STATUS_UPDATE に設定します。それ以外の場合は GENERIC_EVENT に設定します。
insertId metadata.product_log_id 値を直接コピー
httpRequest.protocol network.application_protocol grok パターン %{DATA:protocol}/%{INT:http_version} を使用してプロトコルを抽出し、["HTTP","HTTPS"] の場合は設定します
httpRequest.protocol network.application_protocol_version grok パターン %{DATA:protocol}/%{INT:http_version} を使用して http_version を抽出しました
httpRequest.requestMethod network.http.method 値を直接コピー
httpRequest.userAgent network.http.parsed_user_agent 値を直接コピーし、parseduseragent に変換
httpRequest.status network.http.response_code 文字列に変換してから整数に変換
httpRequest.userAgent network.http.user_agent 値を直接コピー
httpRequest.responseSize network.received_bytes 値が直接コピーされ、uinteger に変換されます
httpRequest.requestSize network.sent_bytes 値が直接コピーされ、uinteger に変換されます
httpRequest.serverIp principal.asset.ip grok パターン %{IP:server_ip} を使用して IP を抽出し、空でない場合は設定します
httpRequest.serverIp principal.ip grok パターン %{IP:server_ip} を使用して IP を抽出し、空でない場合は設定します
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action rule.action == ALLOW の場合は ALLOW、rule.action == DENIED の場合は BLOCK に設定
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action_details rule.action から直接コピーされた値
jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted、resource.labels.gateway_name、resource.labels.resource_container、resource.labels.gateway_type security_result.detection_fields tls_intercepted_label(キー「requestWasTlsIntercepted」、値は requestWasTlsIntercepted)、gateway_name_label(キー「gateway-name」、値は gateway_name)、resource_container_label(キー「resource_container」、値は resource_container)、gateway_type_label(キー「gateway-type」、値は gateway_type)と統合
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name security_result.rule_name 値を直接コピー
重要度 security_result.severity 重大度が CRITICAL の場合は CRITICAL、重大度が ERROR の場合は ERROR、重大度が [ALERT, EMERGENCY] の場合は HIGH、重大度が [INFO, NOTICE] の場合は INFORMATIONAL、重大度が DEBUG の場合は LOW、重大度が WARNING の場合は MEDIUM、それ以外の場合は UNKNOWN_SEVERITY に設定します。
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.asset.hostname 値を直接コピー
httpRequest.remoteIp target.asset.ip grok パターン %{IP:remote_ip} を使用して IP を抽出し、空でない場合は設定します
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.hostname 値を直接コピー
httpRequest.remoteIp target.ip grok パターン %{IP:remote_ip} を使用して IP を抽出し、空でない場合は設定します
resource.labels.location target.resource.attribute.cloud.availability_zone 値を直接コピー
resource.labels.network_name、resource.type target.resource.attribute.labels rc_network_name_label(キー「rc_network_name」、network_name の値)、resource_type(キー「Resource Type」、resource.type の値)と統合されました
httpRequest.requestUrl target.url 値を直接コピー

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。