CircleCI 監査ログを収集する
このパーサーは、CircleCI 監査ログから CSV 形式と JSON 形式のフィールドを抽出し、統合データモデル(UDM)に変換します。このツールは両方の形式を処理し、データの変換と拡充を行い、抽出されたフィールドを event オブジェクト内の対応する UDM フィールドにマッピングします。ユーザー アクション、リソース アクセス、更新イベントに焦点を当て、それらを分類し、プリンシパル、ターゲット、ネットワーク、メタデータなどの関連する UDM フィールドに入力します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- CircleCI に対する特権アクセス権があることを確認します。
CircleCI ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: CircleCI ログ)。
- [ソースタイプ] として [Webhook] を選択します。
- [Log type] で [CircleCI] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
\n
など)。 - アセットの名前空間: アセットの名前空間。
- 取り込みラベル: このフィードのイベントに適用されるラベル。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- シークレット キーをコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL は、クライアント アプリケーションで指定する必要があります。
- [完了] をクリックします。
Webhook フィードの API キーを作成する
Google Cloud コンソール > [認証情報] に移動します。
[認証情報を作成] をクリックして [API キー] を選択します。
API キーのアクセスを Google Security Operations API に制限します。
エンドポイント URL を指定する
- クライアント アプリケーションで、Webhook フィードで指定された HTTPS エンドポイント URL を指定します。
次の形式でカスタム ヘッダーの一部として API キーとシークレット キーを指定して、認証を有効にします。
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
推奨事項: API キーは URL ではなくヘッダーとして指定してください。
Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーとシークレット キーを指定できます。
ENDPOINT_URL?key=API_KEY&secret=SECRET
次のように置き換えます。
ENDPOINT_URL
: フィードのエンドポイント URL。API_KEY
: Google SecOps に対する認証に使用する API キー。SECRET
: フィードの認証用に生成したシークレット キー。
CircleCI で Webhook を構成する
- CircleCI ウェブ インターフェースにログインします。
- ログを取り込むプロジェクトを選択します。
- [プロジェクトの設定] をクリックします。
- [Webhooks] を選択します。
- [Add Webhook] をクリックします。
次の入力パラメータの値を指定します。
- Webhook 名: わかりやすい名前を入力します(例: Google SecOps)。
- Endpoint URL: Google SecOps API エンドポイントの
<ENDPOINT_URL>
を入力します。
- イベント: Webhook をトリガーする CircleCI イベントを選択します(ワークフローの完了後にデータを送信するには、[workflow-completed] を選択します)。
[保存] をクリックして、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_CONTENT が read_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_type を CIRCLECI に設定します。パーサーは、read_only_udm.metadata.product_name を CIRCLECI に設定します。パーサーは、read_only_udm.metadata.vendor_name を CIRCLECI に設定します。 |
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_action を BLOCK に設定します。未加工ログの success フィールドが true の場合、sec_action は ALLOW に変更されます。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_type を STORAGE_OBJECT に設定します。 |
version | read_only_udm.target.resource.attribute.labels.value | 元のログの version の値が文字列に変換され、UDM フィールド read_only_udm.target.resource.attribute.labels.value に割り当てられます。対応するキーは version です。 |
変更点
2023-03-09
- 新しく作成されたパーサー。