收集 Atlassian Jira 日志
支持的平台:
Google SecOps
SIEM
概览
此解析器可处理 SYSLOG 和 JSON 格式的 Atlassian Jira 日志。它会先尝试将消息解析为 JSON。如果失败,它会使用 Grok 模式解析 SYSLOG 格式的消息,提取 IP 地址、用户名、HTTP 方法和响应代码等各种字段,然后将其映射到 UDM。该解析器还会处理特定的 Jira 审核事件,包括登录成功和失败,并将相关字段映射到 UDM 中的安全结果属性。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 Atlassian Jira 的超级用户访问权限。
在 Google SecOps 中配置 Feed 以注入 Atlassian Jira 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在 Feed 名称字段中,输入 Feed 的名称(例如 Atlassian Jira 日志)。
- 选择 Webhook 作为来源类型。
- 选择 Atlassian Jira 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该网站钩子 Feed 创建 API 密钥
依次前往 Google Cloud 控制台 > 凭据。
点击创建凭据,然后选择 API 密钥。
限制 API 密钥对 Google Security Operations API 的访问权限。
指定端点网址
- 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
建议:请以标头的形式指定 API 密钥,而不是在网址中指定。如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:
ENDPOINT_URL?key=API_KEY&secret=SECRET
替换以下内容:
ENDPOINT_URL
:Feed 端点网址。API_KEY
:用于对 Google Security Operations 进行身份验证的 API 密钥。SECRET
:您为对 Feed 进行身份验证而生成的密钥。
在 Atlassian Jira 中为 Google SecOps 创建 webhook
- 以管理员身份访问您的 Jira 实例。
- 依次前往设置 设置 > 系统 > Webhook。
- 点击创建 WebHook。
- 配置以下 webhook 详细信息:
- 名称:为该 webhook 提供一个描述性名称(例如“Google SecOps 集成”)。
- 网址:输入 Google SecOps API 端点网址。
- 事件:选择应触发 Webhook 的 Jira 事件。选择与您的安全监控需求相关的事件(例如,问题创建、问题更新、添加评论)。如有需要,您可以选择所有事件。
- 可选:JQL 过滤器:使用 JQL 过滤器进一步指定哪些事件会触发 Webhook。这对于专注于特定项目、问题类型或其他条件非常有用。
- 排除正文:请勿选中此复选框。该网络钩子需要将事件数据以 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 (如果操作包含“login”,则为 USER_LOGIN;如果为“successful”,则为 ALLOW;如果为“failed”,则为 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 中键值为“Name”的标签。 |
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 包含“login”,则设置为“MACHINE”。如果解析 syslog,则派生自 date_time ;如果解析 JSON,则派生自 created 。如果 JSON 中提供了 timestamp ,则系统会使用 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 包含“login successful”,则设置为“ALLOW”;如果 auditType.action 包含“login failed”,则设置为“BLOCK”。 |
变化
2023-12-12
- 添加了对将多个 IP 地址从“source”映射到“principal.ip”的支持。
2023-11-10
- 添加了新的 Grok 模式,用于解析失败的 JSON 日志。
- 将“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
- bug 修复 - 添加了条件,用于检查日志中的网址值是否为“/status”,以便检查 principal.url 的映射是否不正确。