JFrog Artifactory 로그 수집
이 파서는 두 가지 JFrog Artifactory 로그 형식을 처리합니다. grok 패턴을 사용하여 각 형식에서 필드를 식별하고 추출합니다. 그런 다음 이러한 필드를 UDM에 매핑하여 형식 중 하나 내에서 JSON 페이로드를 처리하고 두 형식 중 하나와 일치하지 않는 로그를 삭제합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- JFrog에 대한 권한이 있는지 확인합니다.
JFrog Artifactory 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: JFrog Artifactory Logs).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 JFrog Artifactory를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\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
권장사항: API 키를 URL에 지정하는 대신 헤더로 지정하세요.
웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET
다음을 바꿉니다.
ENDPOINT_URL
: 피드 엔드포인트 URL입니다.API_KEY
: Google SecOps에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
JFrog Artifactory에서 웹훅을 만들어 Google SecOps로 데이터 전송
- 관리자 사용자 인증 정보를 사용하여 JFrog 인스턴스에 로그인합니다.
- 관리 > 일반 > Webhooks로 이동합니다.
- + 새 웹훅을 클릭합니다.
다음 웹후크 설정을 구성합니다.
- Webhook 키: 설명적인 이름을 입력합니다 (예: Google SecOps).
URL: Google SecOps API 엔드포인트의
<ENDPOINT_URL>
를 입력합니다.이벤트: 웹훅을 트리거해야 하는 Artifactory 이벤트를 선택하고 보안 모니터링 요구사항과 관련된 이벤트 (예: 배포됨, 다운로드됨, 삭제됨)를 선택합니다.
도메인: 가상 저장소를 사용하는 경우 관련 도메인을 선택합니다. 그렇지 않으면 이 필드를 모든 로컬로 둡니다.
저장소: 요구사항에 따라 특정 저장소를 선택하거나 모든 원격 저장소 또는 모든 로컬 저장소로 둡니다.
테스트를 클릭하면 Google SecOps로 테스트 이벤트가 전송됩니다.
저장을 클릭합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
작업 | read_only_udm.metadata.product_event_type |
원시 로그의 action 값이 소문자로 변환되고 매핑됩니다. |
datetime | read_only_udm.metadata.event_timestamp |
원시 로그의 datetime 필드가 파싱되어 타임스탬프로 변환됩니다. |
호스트 이름 | read_only_udm.principal.hostname |
원시 로그의 hostname 필드에서 직접 매핑됩니다. |
id | read_only_udm.metadata.product_log_id |
원시 로그의 id 필드 (JSON 페이로드)에서 직접 매핑됩니다. |
ip | read_only_udm.principal.ip |
원시 로그의 ip 필드에서 직접 매핑됩니다. 'USER_RESOURCE_ACCESS'로 하드코딩되었습니다. 'JFROG_ARTIFACTORY'로 하드코딩되었습니다. 'Artifactory'로 하드코딩되었습니다. 'JFROG'로 하드코딩됩니다. |
owner | read_only_udm.principal.user.userid |
JSON 페이로드의 원시 로그에 username이 없는 경우 매핑됩니다. |
repo_name | read_only_udm.target.resource.name |
원시 로그의 repo_name 필드에서 직접 매핑됩니다. |
repo_type | read_only_udm.target.resource.resource_subtype |
원시 로그의 repo_type 필드에서 직접 매핑됩니다. |
범위 | read_only_udm.target.resource.name |
원시 로그의 범위 필드 (JSON 페이로드)에서 직접 매핑됩니다. |
범위 | read_only_udm.target.resource.resource_subtype |
원시 로그에 scope가 있는 경우 'scope'로 하드코딩됩니다. |
sequenceId | read_only_udm.metadata.product_log_id |
따옴표는 sequenceId 필드에서 삭제된 후 매핑됩니다. |
subject | read_only_udm.about.labels.key |
원시 로그에 subject가 있는 경우 'subject'로 하드코딩됩니다. |
subject | read_only_udm.about.labels.value |
원시 로그의 subject 필드 (JSON 페이로드)에서 직접 매핑됩니다. |
type | read_only_udm.metadata.product_event_type |
원시 로그의 type 필드 (JSON 페이로드)에서 직접 매핑됩니다. |
사용자 | read_only_udm.principal.user.userid |
원시 로그의 user 필드에서 직접 매핑됩니다. |
사용자 이름 | read_only_udm.principal.user.userid |
원시 로그의 username 필드 (JSON 페이로드)에서 직접 매핑됩니다. |
변경사항
2024-09-23
- 개선사항:
- 파싱되지 않은 로그를 파싱하는 지원을 추가했습니다.
- 'target_ip'가 'target.ip' 및 'target.asset.ip'에 매핑되었습니다.
- 'desc'가 'metadata.description'에 매핑되었습니다.
- 'method'가 'network.http.method'에 매핑되었습니다.
- 'url'이 'target.url'에 매핑되었습니다.
- 'prin_url'이 'principal.url'에 매핑되었습니다.
- 'response_code'가 'network.http.response_code'에 매핑되었습니다.
- 'RequestMethod'가 'network.http.method'에 매핑되었습니다.
- 'RequestPath'가 'target.url'에 매핑되었습니다.
- 'DownstreamContentSize' 및 'DownstreamStatus'가 'Additional.Fields'에 매핑되었습니다.
- 'ServiceAddr'이 'principal.hostname' 및 'principal.port'에 매핑되었습니다.
- 'ClientAddr'가 'target.ip' 및 'target.port'에 매핑되었습니다.
- 'user_agent'가 'network.http.user_agent'에 매핑되었습니다.
- 'level'이 'security_result.severity'에 매핑되었습니다.
- 'msg'가 'security_result.description'에 매핑되었습니다.
- 'protocol'이 'network.application_protocol'에 매핑되었습니다.
2023-08-25
- 파서를 새로 만들었습니다.