Jenkins 로그 수집
개요
이 파서는 JSON 및 SYSLOG 형식 로그에서 타임스탬프, 사용자 ID, 소스 IP, 작업, 객체 ID와 같은 주요 정보를 추출합니다. grok 패턴을 사용하여 다양한 로그 메시지 형식을 일치시키고, 구조의 변형을 처리하며, 추출된 필드로 통합 데이터 모델 (UDM)을 채웁니다. 파서는 사용자 또는 IP 정보의 존재 여부에 따라 이벤트를 분류합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Google Cloud IAM에 대한 액세스 권한 관리
- Google Cloud 스토리지에 대한 액세스 권한 관리
- Jenkins에 대한 액세스 권한
스토리지 버킷 만들기 Google Cloud
- Cloud Storage로 이동합니다.
- 새 버킷을 만듭니다. 고유한 이름과 적절한 리전을 선택합니다.
- 버킷에 적절한 액세스 제어가 있는지 확인합니다 (예: 승인된 서비스 계정만 버킷에 쓸 수 있음).
Google Cloud 서비스 계정 만들기
- IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 새 서비스 계정 만들기 설명이 포함된 이름을 지정합니다 (예: jenkins-logs).
- 이전 단계에서 만든 GCS 버킷에 대해 서비스 계정에 스토리지 객체 생성자 역할을 부여합니다.
- 서비스 계정의 SSH 키를 만듭니다(서비스 계정 키 만들기 및 삭제).
서비스 계정의 JSON 키 파일을 다운로드합니다.
Jenkins에 Google Cloud 스토리지 플러그인 설치
- Jenkins 관리 > 플러그인으로 이동합니다.
- 사용 가능한 플러그인을 선택합니다.
- Google Cloud Storage 플러그인을 검색합니다.
- 필요한 경우 플러그인을 설치하고 Jenkins를 다시 시작합니다.
Jenkins에 Google OAuth 사용자 인증 정보 플러그인 설치
- Jenkins 관리 > 플러그인으로 이동합니다.
- 사용 가능한 플러그인을 선택합니다.
- Google OAuth 사용자 인증 정보 플러그인을 검색합니다.
- 필요한 경우 플러그인을 설치하고 Jenkins를 다시 시작합니다.
Google Cloud로 인증하도록 Jenkins 구성
Jenkins 관리 > 사용자 인증 정보 > 시스템으로 이동합니다.
추가 사용자 인증 정보 추가를 클릭합니다.
종류: 비공개 키의 Google 서비스 계정을 선택합니다.
프로젝트 이름: 사용자 인증 정보의 이름을 설정합니다.
Google Cloud 서비스 계정 생성 중에 획득한 JSON 키 파일을 업로드합니다.
만들기를 클릭합니다.
Google SecOps를 업로드하도록 Jenkins 로그 구성
- Jenkins 작업 구성의 빌드 후 작업에 다음 매개변수를 사용하여 Google Storage Build Log Upload를 추가합니다.
- Google 사용자 인증 정보: 이전 단계에서 만든 Google 사용자 인증 정보의 이름입니다.
- 로그 이름: 지정된 스토리지 경로에 Jenkins 빌드 로그를 저장할 파일의 이름입니다.
- 스토리지 위치: 로그를 업로드할 버킷의 이름입니다. 버킷은 생성한 서비스 계정에서 액세스할 수 있어야 합니다.
- 로그 업로드를 테스트합니다.
피드 설정
피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예: Jenkins 로그).
- 소스 유형으로 Google Cloud Storage V2를 선택합니다.
- 로그 유형으로 Jenkins를 선택합니다.
- Chronicle 서비스 계정으로 서비스 계정 가져오기를 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 스토리지 버킷 URI:
gs://my-bucket/<value>/
형식의 Google Cloud 스토리지 버킷 URL입니다. 이 URL은 후행 슬래시 (/)로 끝나야 합니다. - 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 스토리지 버킷 URI:
피드 만들기를 클릭합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
act | security_result.action_details | msg1 또는 msg2 필드에서 추출됩니다. 실행된 작업을 나타냅니다. 선행 공백이 삭제됩니다. |
data | principal.user.userid 또는 principal.ip 또는 metadata.description | data가 IP 주소 패턴과 일치하면 principal.ip에 매핑됩니다. 사용자 이름 패턴과 일치하면 principal.user.userid에 매핑됩니다. 그렇지 않으면 metadata.description에 매핑됩니다. |
msg1 | target.asset.product_object_id 또는 security_result.action_details | object 및 act를 추출하는 데 사용됩니다. / 가 있으면 object 및 act로 분할됩니다. » 가 있으면 object 및 act로 분할됩니다. 그렇지 않으면 act로 처리되고 추가로 파싱될 수 있습니다. |
msg2 | metadata.description 또는 security_result.action_details | 있는 경우 처음에는 metadata.description에 매핑됩니다. 'completed:'가 포함된 경우 뒤에 나오는 값이 추출되어 security_result.action_details에 매핑됩니다. |
객체 | target.asset.product_object_id | msg1에서 추출됨 작업이 수행된 객체를 나타냅니다. |
object_id | target.resource.attribute.labels.value | / 가 있는 경우 object에서 추출됩니다. 더 구체적인 객체 식별자를 나타냅니다. 키는 '플러그인 이름'으로 하드 코딩됩니다. |
src_ip | principal.ip | 메시지 또는 데이터에서 추출됩니다. 소스 IP 주소를 나타냅니다. |
사용자 | principal.user.userid | 메시지 또는 데이터에서 추출됩니다. 이벤트와 연결된 사용자를 나타냅니다. |
metadata.event_timestamp | 계산된 @timestamp 필드에서 복사됩니다. | |
metadata.event_type | 파서 로직에 따라 결정됩니다. user가 있으면 USER_UNCATEGORIZED로 설정하고, src_ip가 있으면 STATUS_UNCATEGORIZED로 설정하고, 그 외의 경우에는 GENERIC_EVENT로 설정합니다. | |
metadata.product_name | Jenkins로 하드코딩됩니다. | |
metadata.product_version | Jenkins로 하드코딩됩니다. | |
metadata.vendor_name | JENKINS로 하드코딩됩니다. | |
metadata.event_timestamp | year, month, day, time, ampm 필드에서 구성됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.