CircleCI 監査ログを収集する

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

このパーサーは、CSV 形式と JSON 形式の CircleCI 監査ログからフィールドを抽出し、統合データモデル(UDM)に変換します。両方の形式を処理し、データ変換と拡充を行い、抽出されたフィールドを event オブジェクト内の対応する UDM フィールドにマッピングします。ユーザー アクション、リソース アクセス、更新イベントに焦点を当て、それらを分類して、プリンシパルターゲットネットワークメタデータなどの関連する UDM フィールドに入力します。

始める前に

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

  • Google SecOps インスタンス。
  • CircleCI への特権アクセス。

フィードを設定する

Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。

  • [SIEM 設定] > [フィード]
  • [Content Hub] > [Content Packs]

[SIEM 設定] > [フィード] でフィードを設定する

フィードを構成する手順は次のとおりです。

  1. [SIEM Settings] > [Feeds] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで [単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: CircleCI Logs)。
  5. [Source type] として [Webhook] を選択します。
  6. [ログタイプ] として [CircleCI] を選択します。
  7. [次へ] をクリックします。
  8. 省略可: 次の入力パラメータの値を指定します。
    • Split delimiter: ログ行を区切るために使用される区切り文字(\n など)。
    • Asset namespace: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  9. [次へ] をクリックします。
  10. [Finalize] 画面でフィードの設定を確認し、[Submit] をクリックします。
  11. [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
  12. 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、その場合以前の秘密鍵は無効になります。
  13. [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。 このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
  14. [完了] をクリックします。

コンテンツ ハブからフィードを設定する

次のフィールドに値を指定します。

  • Split delimiter: ログ行を区切るために使用される区切り文字(\n など)。

詳細オプション

  • フィード名: フィードを識別する事前入力された値。
  • ソースタイプ: Google SecOps にログを収集するために使用される方法。
  • アセットの名前空間: フィードに関連付けられた名前空間。
  • Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。

  • [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。

  • 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。

  • [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。

Webhook フィード用の API キーを作成する

  1. Google Cloud コンソール > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] をクリックして [API キー] を選択します。

  3. API キーのアクセスを Google Security Operations API に制限します。

エンドポイント URL を指定する

  1. クライアント アプリケーション内で、Webhook フィードで提供される HTTPS エンドポイント URL を指定します。
  2. 次の形式でカスタム ヘッダーの一部として API キーと秘密鍵を指定して、認証を有効にします。

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    推奨事項: API キーは URL 内で指定するのではなくヘッダーとして指定してください。

  3. Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーと秘密鍵を指定できます。

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    以下を置き換えます。

    • ENDPOINT_URL: フィード エンドポイントの URL。
    • API_KEY: Google SecOps に対する認証に使用する API キー。
    • SECRET: フィードの認証用に生成した秘密鍵。

CircleCI で Webhook を構成する

  1. CircleCI ウェブ インターフェースにログインします。
  2. ログの取り込み元となるプロジェクトを選択します。
  3. [プロジェクトの設定] をクリックします。
  4. [Webhook] を選択します。
  5. [Webhook を追加] をクリックします。
  6. 次の入力パラメータの値を指定します。

    • Webhook Name: わかりやすい名前を指定します(例: Google SecOps)。
    • エンドポイント URL: Google SecOps API エンドポイントの <ENDPOINT_URL> を入力します。
    • Events: Webhook をトリガーする CircleCI イベントを選択します(たとえば、ワークフローの完了後にデータを送信する場合は、[workflow-completed] を選択します)。
  7. [保存] をクリックして、Webhook を作成します。

UDM マッピング テーブル

ログフィールド UDM マッピング 論理
account.id read_only_udm.about.resource.attribute.labels.value 未加工ログの account.id の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーaccount_id です。
操作 read_only_udm.metadata.product_event_type 未加工ログの action の値は、UDM フィールド read_only_udm.metadata.product_event_type に割り当てられます。
actor.id read_only_udm.principal.user.product_object_id 未加工ログの actor.id の値は、UDM フィールド read_only_udm.principal.user.product_object_id に割り当てられます。
actor.name read_only_udm.principal.user.userid 未加工ログの actor.name フィールドから「github:」接頭辞が削除されます。残りの値は、UDM フィールド read_only_udm.principal.user.userid に割り当てられます。未加工ログに actor.name が存在する場合、値 USER_RESOURCE_UPDATE_CONTENTread_only_udm.metadata.event_type に割り当てられます。それ以外の場合は、USER_RESOURCE_ACCESS が割り当てられます。
id read_only_udm.metadata.product_log_id 未加工ログの id の値は、UDM フィールド read_only_udm.metadata.product_log_id に割り当てられます。パーサーは read_only_udm.metadata.log_typeCIRCLECI に設定します。パーサーは read_only_udm.metadata.product_nameCIRCLECI に設定します。パーサーは read_only_udm.metadata.vendor_nameCIRCLECI に設定します。
occurred_at read_only_udm.metadata.event_timestamp 未加工ログの occurred_at の値はタイムスタンプとして解析され、UDM フィールド read_only_udm.metadata.event_timestamp に割り当てられます。
organization.name read_only_udm.target.administrative_domain 未加工ログの organization.name フィールドから「github:」接頭辞が削除されます。残りの値は、UDM フィールド read_only_udm.target.administrative_domain に割り当てられます。
payload.job.id read_only_udm.about.resource.attribute.labels.value 未加工ログの payload.job.id の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーjob_id です。
payload.job.job_name read_only_udm.about.resource.attribute.labels.value 未加工ログの payload.job.job_name の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーjob_name です。
payload.job.job_status read_only_udm.about.resource.attribute.labels.value 未加工ログの payload.job.job_status の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーjob_status です。
payload.workflow.id read_only_udm.about.resource.attribute.labels.value 未加工ログの payload.workflow.id の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーworkflow_id です。
request.id read_only_udm.network.session_id 未加工ログの request.id の値は、UDM フィールド read_only_udm.network.session_id に割り当てられます。
scope.id read_only_udm.about.resource.attribute.labels.value 未加工ログの scope.id の値は、UDM フィールド read_only_udm.about.resource.attribute.labels.value に割り当てられます。ここで、対応するキーscope_id です。パーサーは、最初に sec_actionBLOCK に設定します。未加工のログの success フィールドが true の場合、sec_actionALLOW に変更されます。次に sec_action の値は、UDM フィールド read_only_udm.security_result.action に割り当てられます。
target.id read_only_udm.target.resource.product_object_id 未加工ログの target.id の値は、UDM フィールド read_only_udm.target.resource.product_object_id に割り当てられます。
target.name read_only_udm.target.resource.name 未加工ログの target.name フィールドから「github:」接頭辞が削除されます。残りの値は、UDM フィールド read_only_udm.target.resource.name に割り当てられます。パーサーは read_only_udm.target.resource.resource_typeSTORAGE_OBJECT に設定します。
version read_only_udm.target.resource.attribute.labels.value 未加工ログの version の値は文字列に変換され、UDM フィールド read_only_udm.target.resource.attribute.labels.value に割り当てられます。ここで、対応するキーversion です。

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