Atlassian Jira 로그 수집
개요
이 파서는 SYSLOG 및 JSON 형식의 Atlassian Jira 로그를 처리합니다. 먼저 메시지를 JSON으로 파싱하려고 시도합니다. 실패하면 grok 패턴을 사용하여 SYSLOG 형식 메시지를 파싱하고 IP 주소, 사용자 이름, HTTP 메서드, 응답 코드와 같은 다양한 필드를 추출한 후 UDM에 매핑합니다. 또한 파서는 로그인 성공 및 실패를 비롯한 특정 Jira 감사 이벤트를 처리하고 관련 필드를 UDM 내 보안 결과 속성에 매핑합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Atlassian Jira에 대한 권한이 있는지 확인합니다.
Atlassian Jira 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 입력란에 피드 이름을 입력합니다 (예: Atlassian Jira Logs).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 Atlassian Jira를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 매개변수의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\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 Security Operations에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
Google SecOps용 Atlassian Jira에서 웹훅 만들기
- 관리자로 Jira 인스턴스에 액세스합니다.
- 설정 설정 > 시스템 > 웹훅으로 이동합니다.
- Webhook 만들기를 클릭합니다.
- 다음 웹훅 세부정보를 구성합니다.
- 이름: 웹훅을 설명하는 이름을 입력합니다 (예: Google SecOps 통합).
- URL: Google SecOps API 엔드포인트 URL을 입력합니다.
- 이벤트: 웹훅을 트리거해야 하는 Jira 이벤트를 선택합니다. 보안 모니터링 요구사항과 관련된 이벤트 (예: 문제 생성, 문제 업데이트, 의견 추가)를 선택합니다. 필요한 경우 모든 이벤트를 선택할 수 있습니다.
- 선택사항: JQL 필터: JQL 필터를 사용하여 웹훅을 트리거하는 이벤트를 추가로 세분화합니다. 이는 특정 프로젝트, 문제 유형 또는 기타 기준에 집중하는 데 유용합니다.
- 본문 제외: 선택 해제 상태로 둡니다. 웹훅은 JSON 형식의 이벤트 데이터를 Google SecOps로 전송해야 합니다.
- 만들기를 클릭하여 웹훅 구성을 저장합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
affectedObjects.id |
target.resource.attribute.labels.value |
affectedObjects 배열의 각 객체 내 id 필드는 키가 'ID_[index]'인 라벨에 매핑됩니다. 여기서 [index] 는 배열에서 객체의 위치입니다. |
affectedObjects.name |
target.resource.attribute.labels.value |
affectedObjects 배열의 각 객체 내 name 필드는 'Name_[index]' 키가 있는 라벨에 매핑됩니다. 여기서 [index] 는 배열에서 객체의 위치입니다. |
affectedObjects.type |
target.resource.attribute.labels.value |
affectedObjects 배열의 각 객체 내 type 필드는 'Type_[index]' 키가 있는 라벨에 매핑됩니다. 여기서 [index] 는 배열에서 객체의 위치입니다. |
associatedItems.0.id |
target.user.userid |
associatedItems.0.typeName 이 'USER'인 경우 이 필드는 target.user.userid 에 매핑됩니다. 그렇지 않으면 security_result.detection_fields 의 키가 'associatedItems Id'인 라벨에 매핑됩니다. |
associatedItems.0.name |
target.user.user_display_name |
associatedItems.0.typeName 이 'USER'인 경우 이 필드는 target.user.user_display_name 에 매핑됩니다. 그렇지 않으면 security_result.detection_fields 의 키가 'associatedItems Name'인 라벨에 매핑됩니다. |
associatedItems.0.parentId |
target.process.parent_process.pid |
associatedItems.0.typeName 이 'USER'인 경우 이 필드는 target.process.parent_process.pid 에 매핑됩니다. |
associatedItems.0.parentName |
target.resource.parent |
associatedItems.0.typeName 이 'USER'인 경우 이 필드는 target.resource.parent 에 매핑됩니다. |
associatedItems.0.typeName |
security_result.detection_fields.value |
security_result.detection_fields 의 키가 'associatedItems TypeName'인 라벨에 매핑되었습니다. |
author.id |
principal.user.userid |
principal.user.userid 에 매핑됩니다. |
author.name |
principal.user.user_display_name |
principal.user.user_display_name 에 매핑됩니다. |
author.type |
principal.resource.attribute.labels.value |
principal.resource.attribute.labels 의 키가 'Author Type'인 라벨에 매핑되었습니다. |
author.uri |
principal.url |
principal.url 에 매핑됩니다. |
authorAccountId |
principal.user.userid |
principal.user.userid 에 매핑됩니다. |
authorKey |
target.resource.attribute.labels.value |
target.resource.attribute.labels 의 키가 'Author Key'인 라벨에 매핑됩니다. |
auditType.action |
security_result.summary |
security_result.summary 에 매핑됩니다. security_result.action 및 metadata.event_type 을 파생하는 데도 사용됩니다 (액션에 '로그인'이 포함된 경우 USER_LOGIN, '성공'인 경우 ALLOW, '실패'인 경우 BLOCK). |
auditType.area |
metadata.product_event_type |
metadata.product_event_type 에 매핑됩니다. |
auditType.category |
security_result.category_details |
security_result.category_details 에 매핑됩니다. |
category |
metadata.product_event_type |
metadata.product_event_type 에 매핑됩니다. |
changedValues.changedFrom |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'Changed From'인 라벨에 매핑되었습니다. |
changedValues.changedTo |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'Changed To'인 라벨에 매핑되었습니다. |
changedValues.fieldName |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'FieldName'인 라벨에 매핑되었습니다. |
changedValues.i18nKey |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'FieldName'인 라벨에 매핑되었습니다. |
changedValues.key |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'Changed From'인 라벨에 매핑되었습니다. |
changedValues.to |
security_result.about.resource.attribute.labels.value |
security_result.about.resource.attribute.labels 에서 키가 'Changed To'인 라벨에 매핑되었습니다. |
created |
metadata.event_timestamp |
파싱되고 metadata.event_timestamp 에 매핑됩니다. |
dst_ip |
target.ip |
target.ip 에 매핑됩니다. |
extraAttributes.name |
principal.resource.attribute.labels.value |
principal.resource.attribute.labels 의 키가 '이름'인 라벨에 매핑됩니다. |
extraAttributes.value |
principal.resource.attribute.labels.value |
principal.resource.attribute.labels 에서 'Value' 키가 있는 라벨에 매핑됩니다. |
http_method |
network.http.method |
network.http.method 에 매핑됩니다. |
http_referral_url |
network.http.referral_url |
network.http.referral_url 에 매핑됩니다. |
id |
metadata.product_log_id |
metadata.product_log_id 에 매핑됩니다. |
objectItem.id |
security_result.detection_fields.value |
security_result.detection_fields 의 키가 'objectItem Id'인 라벨에 매핑되었습니다. |
objectItem.name |
security_result.detection_fields.value |
security_result.detection_fields 의 키가 'objectItem Name'인 라벨에 매핑되었습니다. |
objectItem.typeName |
security_result.detection_fields.value |
security_result.detection_fields 에서 키가 'objectItem TypeName'인 라벨에 매핑되었습니다. |
path |
principal.url |
'-' 또는 '/status'가 아닌 경우 principal.url 에 매핑됩니다. |
protocol |
network.ip_protocol |
'HTTP'인 경우 network.ip_protocol 에 매핑됩니다. |
remoteAddress |
principal.ip |
principal.ip 에 매핑됩니다. |
response_code |
network.http.response_code |
network.http.response_code 에 매핑됩니다. |
sent_bytes |
network.sent_bytes |
network.sent_bytes 에 매핑됩니다. |
source |
principal.ip |
파싱하여 IP 주소를 추출하고 principal.ip 에 병합했습니다. |
src_ip1 , src_ip2 , src_ip3 |
principal.ip |
principal.ip 에 매핑됩니다. |
summary |
metadata.description |
metadata.description 에 매핑됩니다. |
user_agent |
network.http.user_agent |
network.http.user_agent 에 매핑됩니다. |
user_name |
principal.user.userid |
principal.user.userid 에 매핑됩니다. auditType.action 에 '로그인'이 포함된 경우 'MACHINE'으로 설정합니다. syslog를 파싱하는 경우 date_time 에서, JSON을 파싱하는 경우 created 에서 파생됩니다. JSON에서 timestamp 를 사용할 수 있는 경우 created 대신 사용됩니다. 둘 다 없는 경우 일괄 처리의 create_time 가 사용됩니다. 다른 필드의 존재 여부에 따라 파생됩니다. dst_ip 가 있는 경우 NETWORK_HTTP, user_name 또는 (associatedItems.0.typeName 이 'USER'이고 associatedItems.0.id 가 있는 경우) USER_UNCATEGORIZED, src_ip1 , src_ip2 , src_ip3 또는 remoteAddress 가 있는 경우 STATUS_UPDATE, 그 외의 경우 GENERIC_EVENT입니다. auditType.action 에 'login'이 포함된 경우 USER_LOGIN으로 재정의됩니다. 항상 'ATLASSIAN_JIRA'로 설정합니다. 항상 'ATLASSIAN_JIRA'로 설정합니다. auditType.action 에 '로그인 성공'이 포함된 경우 '허용'으로, auditType.action 에 '로그인 실패'가 포함된 경우 '차단'으로 설정합니다. |
변경사항
2023-12-12
- 'source'에서 'principal.ip'로 여러 IP 주소를 매핑하는 지원을 추가했습니다.
2023-11-10
- 실패한 JSON 로그를 파싱하는 새로운 Grok 패턴을 추가했습니다.
- 'affectedObjects'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'changedValues'가 'security_result.about.resource.attribute.labels'에 매핑되었습니다.
- 'extraAttributes'가 'principal.resource.attribute.labels'에 매핑되었습니다.
- 'source'가 'principal.ip'에 매핑되었습니다.
- 'author.id', 'author.name', 'author.uri', 'author.type', 'auditType.area', 'auditType.category', 'auditType.action'이 각각 'principal.user.userid', 'principal.user.user_display_name', 'principal.url', 'principal.resource.attribute.labels', 'metadata.product_event_type', 'security_result.category_details', 'security_result.summary'에 매핑되었습니다.
2023-02-09
- JSON 데이터를 검색하는 'json' 블록을 추가했습니다.
2023-01-10
- 개선사항 - JSON 형식 로그에 대한 지원이 추가되었습니다.
- 'authorAccountId'가 'principal.user.userid'에 매핑되었습니다.
- 'id'가 'metadata.product_log_id'에 매핑되었습니다.
- 'remoteAddress'가 'principal.ip'에 매핑되었습니다.
- 'summary'가 'metadata.description'에 매핑되었습니다.
- 'category'가 'metadata.product_event_type'에 매핑되었습니다.
- 'authorKey'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'objectItem.id', 'objectItem.name', 'objectItem.typeName'이 'security_result.detection_fields'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'USER'인 경우 'associatedItems.0.id'가 'target.user.userid'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'USER'인 경우 'associatedItems.0.name'이 'target.user.user_display_name'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'USER'인 경우 'associatedItems.0.parentId'가 'target.process.parent_process.pid'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'USER'인 경우 'associatedItems.0.parentName'이 'target.resource.parent'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'USER'가 아닌 경우 'associatedItems.0.id' 및 'associatedItems.0.name'이 'security_result.detection_fields'에 매핑되었습니다.
- 'associatedItems.0.typeName'이 'security_result.detection_fields'에 매핑되었습니다.
- 'changedValues.fieldName', 'changedValues.changedFrom', 'changedValues.changedTo'가 'security_result.about.resource.attribute.labels'에 매핑되었습니다.
- 'remoteAddress'가 있는 경우 'STATUS_UPDATE'를 'metadata.event_type'에 매핑했습니다.
- 'authorAccountId'가 있거나 'associatedItems.0.typeName'이 'USER'이고 'associatedItems.0.id'가 있는 경우 'USER_UNCATEGORIZED'를 'metadata.event_type'에 매핑했습니다.
2022-05-31
- 버그 수정 - 로그의 URL 값에 '/status'가 있는 경우 principal.url의 잘못된 매핑을 확인하는 조건이 추가되었습니다.