Forseti オープンソースのログを収集する

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

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

Forseti Security は、Google Cloud Platform 環境のセキュリティ強化に役立つオープンソースのツール群であり、コミュニティ主導で集められた各種ツールが揃っています。Forseti は、定期的な頻度で GCP リソースのインベントリ スナップショットを取得し、リソースをスキャンしてアクセス制御が意図したとおりに設定されていることを確認し、Cloud IAM ポリシーの可視性を提供します。

始める前に

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

  • Google SecOps インスタンス。
  • Cloud Storage API が有効になっている GCP プロジェクト。
  • GCS バケットを作成、管理する権限。
  • GCS バケットの IAM ポリシーを管理する権限。
  • 既存の Forseti Security デプロイ(たとえば、Google Compute Engine の Forseti Terraform モジュールを使用してデプロイされたもの)。
  • Forseti サーバー構成ファイル(forseti_conf_server.yaml)へのアクセス権。

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

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

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

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

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

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

gcloud storage buckets create gs://forseti-violations-export \
    --location=us-central1 \
    --default-storage-class=STANDARD

次のように置き換えます。

  • forseti-violations-export: 目的のバケット名(グローバルに一意)。
  • us-central1: 希望のリージョン(us-central1europe-west1 など)。

違反を GCS にエクスポートするように Forseti Security を構成する

Forseti Security は、forseti_conf_server.yaml ファイルの通知機能構成を使用して、スキャナ違反を Google Cloud Storage にエクスポートします。

  1. SSH を使用して Forseti サーバー VM に接続します。

    gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONE
    

    YOUR_PROJECT_IDYOUR_ZONE は、Forseti デプロイの値に置き換えます。

  2. Forseti サーバーの構成ファイルを編集用に開きます。

    sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yaml
    

    Forseti デプロイで GCS ベースの構成を使用している場合は、Forseti サーバー バケットからファイルをダウンロードします。

    gsutil cp gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml ~/forseti_conf_server.yaml
    
  3. notifier セクションに移動して、resources サブセクションを見つけます。

  4. エクスポートする違反リソース タイプごとに、gcs_violations 通知ツールを構成します。次のように構成を追加または更新します。

    notifier:
      resources:
        - resource: iam_policy_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: firewall_rule_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: cloudsql_acl_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: bucket_acl_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: config_validator_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
    

    次のように置き換えます。

    • forseti-violations-export: 前の手順で作成した GCS バケット名。
    • violations/: 違反ファイルを整理するための接頭辞パス(省略可)。

    構成パラメータ:

    • resource: 違反リソースタイプ。使用可能なリソースタイプは、デプロイで有効になっている Forseti スキャナによって異なります。一般的な型には、iam_policy_violationsfirewall_rule_violationscloudsql_acl_violationsbucket_acl_violationsconfig_validator_violationsgroups_settings_violations などがあります。
    • should_notify: このリソースタイプの通知を有効にするには、true に設定します。
    • data_format: エクスポートされたデータの形式。有効な値は csv または json です。デフォルトは csv です。
    • gcs_path: 違反がエクスポートされる Cloud Storage パス。パスは gs:// で始まり、末尾にスラッシュを含める必要があります。
  5. 構成ファイルを保存します。

  6. GCS から構成をダウンロードした場合は、更新したファイルを Forseti サーバー バケットにアップロードします。

    gsutil cp ~/forseti_conf_server.yaml gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml
    
  7. Forseti サーバーの構成を再読み込みします。

    forseti server configuration reload
    
  8. 構成が正常に読み込まれたことを確認します。

    forseti server configuration get | grep gcs_violations
    

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

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

Forseti Open Source のログを取り込むように Google SecOps でフィードを構成する

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

  7. [サービス アカウントを取得する] をクリックします。

  8. 一意のサービス アカウント メールアドレスが表示されます(例:)。

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

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

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

    • ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。
    gs://forseti-violations-export/violations/
    
    • 次のように置き換えます。
      • forseti-violations-export: GCS バケット名。
      • violations/: ログが保存されるオプションの接頭辞/フォルダパス(ルートの場合は空のままにします)。
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
    • アセットの名前空間: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  12. [次へ] をクリックします。

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

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

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

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

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

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

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

gcloud storage buckets add-iam-policy-binding gs://forseti-violations-export \
    --member="serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

次のように置き換えます。

  • forseti-violations-export: バケット名。
  • chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com: Google SecOps サービス アカウントのメールアドレス。

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

gsutil iam ch serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com:objectViewer \
    gs://forseti-violations-export

権限を確認する

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

gcloud storage buckets get-iam-policy gs://forseti-violations-export \
    --flatten="bindings[].members" \
    --filter="bindings.role:roles/storage.objectViewer"

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

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
data.resource_data.instanceGroupUrls about instanceGroupUrls の配列から統合
data.resource_data.nodePools.*.statusMessage metadata.description nodePool.statusMessage の値
data.resource_type metadata.event_type kms_cryptokey/serviceaccount_key の場合は RESOURCE_PERMISSIONS_CHANGE、ファイアウォールの場合は RESOURCE_DELETION、kubernetes_cluster の場合は STATUS_HEARTBEAT、それ以外の場合は GENERIC_EVENT に設定します。
data.scanner_index_id metadata.product_log_id 値が直接コピーされ、文字列に変換されます。
metadata.product_name 「FORSETI SECURITY」に設定します。
metadata.vendor_name 「FORSETI」に設定
data.resource_data.direction network.direction 方向が INGRESS の場合、INBOUND に設定します
data.resource_data.endpoint principal.ip 値を直接コピー
data.resource_data.nodeConfig.oauthScopes.0 principal.url 値を直接コピー
data.full_name、serviceAccount principal.user.userid grok を使用して data.full_name から抽出されるか、空でない場合は serviceAccount に設定されます。
data.violation_data.protection_level、data.violation_data.purpose、data.violation_data.project_id、data.violation_data.node_pool_name、data.violation_data.violation_reason security_result.detection_fields 複数の Key-Value ペアからマージされた
data.violation_type security_result.category FIREWALL_BLACKLIST_VIOLATION の場合は POLICY_VIOLATION、KE_VERSION_VIOLATION の場合は UNKNOWN_CATEGORY、それ以外の場合は ACL_VIOLATION に設定します。
data.rule_name security_result.rule_name 値を直接コピー
data.violation_type security_result.summary 値を直接コピー
data.resource_data.zone target.asset.attribute.cloud.availability_zone 値を直接コピー
target.asset.attribute.cloud.environment 「GOOGLE_CLOUD_PLATFORM」に設定
data.full_name target.asset.attribute.cloud.project.id grok を使用して data.full_name から抽出
data.resource_data.subnetwork target.asset.attribute.cloud.vpc.name 値を直接コピー
data.resource_data.nodeConfig.machineType target.asset.hardware machineType と定数 CPU プラットフォームから統合
data.resource_data.privateClusterConfig.privateEndpoint target.ip 値を直接コピー
data.resource_data.versionTemplate.algorithm、data.resource_data.key_algorithm target.labels アルゴリズムの Key-Value ペア(存在する場合)を統合
data.resource_data.location target.location.name 値を直接コピー
data.resource_name target.resource.name 値を直接コピー
data.resource_id target.resource.product_object_id resource_name と異なる場合は直接コピーされる値
data.resource_type target.resource.resource_subtype resource_type が kubernetes_cluster の場合は「gke」に設定します。
data.resource_type target.resource.resource_type 元の resource_type に基づいて特定のタイプにマッピング

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