CircleCI 감사 로그 수집
파서 버전: 2.0
이 파서는 CSV 및 JSON 형식의 CircleCI 감사 로그에서 필드를 추출하여 통합 데이터 모델 (UDM)로 변환합니다. 두 형식을 모두 처리하고, 데이터 변환 및 보강을 수행하며, 추출된 필드를 event 객체 내의 해당 UDM 필드에 매핑합니다. 사용자 작업, 리소스 액세스, 업데이트 이벤트에 중점을 두고 이를 분류하고 principal, target, network, metadata와 같은 관련 UDM 필드를 채웁니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- CircleCI에 대한 액세스 권한 관리
피드 설정
피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정 > 피드 로 이동합니다.
- 새 피드 추가 를 클릭합니다.
- 다음 페이지에서 단일 피드 구성 을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: CircleCI 로그).
- 소스 유형 으로 웹훅 을 선택합니다.
- 로그 유형 으로 CircleCI 를 선택합니다.
- 다음 을 클릭합니다.
- 선택사항: 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\n). - 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
- 다음 을 클릭합니다.
- 확정 화면에서 피드 구성을 검토한 다음 제출 을 클릭합니다.
- 보안 비밀 키 생성 을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
- 보안 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 다시 생성할 수 있지만 이 작업으로 인해 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
- 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
- 완료 를 클릭합니다.
웹훅 피드에 대한 API 키 만들기
Google Cloud 콘솔 > 사용자 인증 정보 로 이동합니다.
사용자 인증 정보 만들기 를 클릭한 후 API 키 를 선택합니다.
Google Security Operations API 에 대한 API 키 액세스를 제한합니다.
엔드포인트 URL 지정
- 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
다음 형식의 커스텀 헤더의 일부로 API 키와 보안 비밀 키를 지정하여 인증을 사용 설정합니다.
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET권장사항: URL에 지정하는 대신 API 키를 헤더로 지정합니다.
웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 쿼리 매개변수를 다음 형식으로 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET다음을 바꿉니다.
ENDPOINT_URL: 피드 엔드포인트 URL입니다.API_KEY: Google SecOps에 인증하기 위한 API 키입니다.SECRET: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
CircleCI에서 웹훅 구성
- CircleCI 웹 인터페이스에 로그인합니다.
- 로그를 수집할 프로젝트를 선택합니다.
- 프로젝트 설정 을 클릭합니다.
- 웹훅 을 선택합니다.
- 웹훅 추가 를 클릭합니다.
다음 입력 파라미터의 값을 지정합니다.
- 웹훅 이름: 설명이 포함된 이름을 제공합니다 (예: Google SecOps).
- 엔드포인트 URL: Google SecOps API 엔드포인트의
<ENDPOINT_URL>을 입력합니다.
- 이벤트: 웹훅을 트리거해야 하는 CircleCI 이벤트를 선택합니다 (예: 워크플로가 완료된 후 데이터를 전송하려면 workflow-completed 를 선택).
저장 을 클릭하여 웹훅을 만듭니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| account.id | read_only_udm.about.resource.attribute.labels.value | 원시 로그의 account.id 값이 해당 키 가 account_id 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. |
| 작업 | read_only_udm.metadata.product_event_type | 원시 로그의 작업 값이 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 값이 해당 키 가 job_id 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. |
| payload.job.job_name | read_only_udm.about.resource.attribute.labels.value | 원시 로그의 payload.job.job_name 값이 해당 키 가 job_name 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. |
| payload.job.job_status | read_only_udm.about.resource.attribute.labels.value | 원시 로그의 payload.job.job_status 값이 해당 키 가 job_status 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. |
| payload.workflow.id | read_only_udm.about.resource.attribute.labels.value | 원시 로그의 payload.workflow.id 값이 해당 키 가 workflow_id 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. |
| 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 값이 해당 키 가 scope_id 인 UDM 필드 read_only_udm.about.resource.attribute.labels.value 에 할당됩니다. 파서는 처음에 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 값이 문자열로 변환되어 해당 키 가 version 인 UDM 필드 read_only_udm.target.resource.attribute.labels.value 에 할당됩니다. |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.