将日志记录与 Google SecOps 集成

本文档介绍了如何将 Cloud Logging 与 Google Security Operations 集成。

使用场景

日志记录集成使用 Google SecOps 功能来支持以下使用情形:

  • 取证日志检索:在调查期间,运行高级查询以查找 Google Cloud 环境中的特定安全事件。

  • 自动威胁搜寻:使用 playbook 定期查询日志,以查找已知的失陷指标 (IoC) 或可疑模式。

准备工作

在 Google SecOps 中配置日志记录集成之前,请完成以下前提步骤:

  1. 创建服务账号并向其授予必要的角色。

  2. 选择并配置以下身份验证方法之一:

    • 方法 1:Workload Identity(推荐):此方法通过服务账号模拟使用短期有效的临时访问令牌,因此您无需存储密钥。

    • 方法 2:服务账号 JSON 密钥:此方法依赖于静态的长期有效的密钥文件。仅当您的环境中无法使用 Workload Identity 身份验证时,才使用此方法。

创建服务账号

如需为集成创建服务账号,请完成以下步骤:

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。

    转到“服务账号”

  2. 点击添加创建服务账号。

  3. 提供名称(例如“SecOps 日志记录集成”)和说明,然后点击创建并继续。

  4. 在向此服务账号授予对项目的访问权限这一步中,添加 Logs Viewer (roles/logging.viewer) 角色。

  5. 点击完成。此服务账号的电子邮件地址在配置期间使用。

配置 Workload Identity 凭据

选择此方法或 JSON 密钥方法来验证集成。 建议使用 Workload Identity,因为它使用

使用服务账号模拟的短期有效临时访问令牌。

确定唯一实例身份

授予 Google SecOps 实例模拟您的服务账号的权限是确保访问安全性的最后一步。

  1. 在 Google SecOps 中,前往内容中心 > 响应集成。

  2. 搜索并选择 Cloud Logging 集成,然后在 Workload Identity 邮箱中输入您的服务账号电子邮件地址。

  3. 在配额项目 ID 中输入有效的项目 ID。

  4. 依次点击保存 > 测试。测试预计会失败。

  5. 点击测试右侧 的关闭图标 close_small,然后搜索以 gke-init-python@... 或 soar-python@... 开头的身份电子邮件地址所对应的错误消息。

  6. 复制此唯一电子邮件地址。

在 Google Cloud中授权实例身份

授权检索到的唯一身份可实现服务账号模拟,让平台无需静态密钥即可代表您执行操作。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。

    转到“服务账号”

  2. 选择目标服务账号,然后依次前往权限 > 授予访问权限。

  3. 将该唯一电子邮件地址粘贴到新主账号字段中,并分配 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator)。

授予配额项目访问权限

使用 Workload Identity 进行身份验证需要 Quota Project ID 来跟踪 API 使用情况和结算信息。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > IAM,然后选择用作配额项目 ID 的项目。

    转到 IAM

  2. 找到您的服务账号,然后点击修改主账号。

  3. 点击添加其他角色,然后选择 Service Usage Consumer (roles/serviceusage.serviceUsageConsumer)。

  4. 点击保存。

配置 JSON 密钥

静态的长期有效的密钥文件需要手动管理。仅当 Workload Identity 凭据不可用时,才应使用此方法。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您的服务账号。

    转到“服务账号”

  2. 前往密钥标签页,然后依次点击添加密钥> 创建新密钥。

  3. 选择 JSON 作为密钥类型,然后点击创建。

  4. 复制下载文件的全部内容,并在配置期间将其粘贴到 User's Service Account 中。

集成参数

日志记录集成需要以下参数:

参数 说明
API Root

可选。

Cloud Logging API 的基本网址(例如 https://logging.googleapis.com)。

User's Service Account

可选。

服务账号密钥 JSON 文件的完整内容。

仅在您使用 JSON 密钥进行身份验证时使用此参数。

Workload Identity Email

可选。

服务账号的客户端电子邮件地址。

仅当您使用 Workload Identity 凭据进行身份验证时,才使用此参数。

Project ID

可选。

集成中要使用的项目 ID。

如果未提供值,集成会从服务账号凭据中检索 ID。

Quota Project ID

可选。

用于 API 使用情况和结算的项目 ID。

使用 Workload Identity 凭据进行身份验证时,此参数是必需的。

Organization ID

可选。

用于限定查询范围的组织 ID。

Verify SSL

可选。

如果选择此项,集成会在连接到日志记录服务器时验证 SSL 证书。

默认处于启用状态。

如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。

如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。

操作

如需详细了解操作,请参阅 处理“您的工作台”中的待处理操作和执行手动操作。

执行查询

使用 Execute Query 操作在 Logging 中执行自定义查询。

此操作不适用于 Google SecOps 实体。

操作输入

执行查询操作需要以下参数:

参数 说明
Project ID 可选

集成中要使用的项目 ID。

如果您未为此参数设置值,集成会从您的 Google Cloud 服务账号中检索项目 ID。

Organization ID 可选

要在集成中使用的组织 ID。

如果您未为此参数设置值,集成会从您的 Google Cloud 服务账号中检索项目 ID。

Query 必需

用于查找日志的查询。

Time Frame 可选

要检索结果的时间段。

如果您选择 Custom,还需配置 Start Time 参数。

可能的值如下:

  • Last Hour
  • Last 6 Hours
  • Last 24 Hours
  • Last Week
  • Last Month
  • Custom
默认值为 Last Hour。
Start Time 可选

用于检索结果的开始时间。

如果您为 Time Frame 参数选择了 Custom 选项,则此参数是必需的。

如需配置此参数,请使用 ISO 8601 格式。

End Time 可选

检索结果的结束时间。

如果您未为此参数设置值,并且为 Time Frame 参数选择了 Custom 选项,则该操作会使用当前时间作为结束时间。

如需配置此参数,请使用 ISO 8601 格式。

Max Results To Return 可选

需返回的结果数上限。

默认值为 50。

操作输出

执行查询操作会提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
“支持请求墙”表格 不可用
丰富化表 不可用
JSON 结果 可用
输出消息 可用
脚本结果 可用
JSON 结果

以下示例介绍了使用执行查询操作时收到的 JSON 结果输出:

[{
    "protoPayload": {
        "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
        "authenticationInfo": {
            "principalEmail": "system:clouddns"
        },
        "authorizationInfo": [
            {
                "granted": true,
                "permission": "io.k8s.coordination.v1.leases.update",
                "resource": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock"
            }
        ],
        "methodName": "io.k8s.coordination.v1.leases.update",
        "requestMetadata": {
            "callerIp": "192.0.2.6",
            "callerSuppliedUserAgent": "clouddns-leader-election"
        },
        "resourceName": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock",
        "serviceName": "k8s.io",
        "status": {
            "code": 0
        }
    },
    "insertId": "ID",
    "resource": {
        "type": "k8s_cluster",
        "labels": {
            "cluster_name": "CLUSTER_NAME",
            "project_id": "PROJECT_ID",
            "location": "us-central1"
        }
    },
    "timestamp": "2024-09-18T09:46:38.647428Z",
    "labels": {
        "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:clouddns\" of ClusterRole \"system:clouddns-role\" to User \"system:clouddns\"",
        "authorization.k8s.io/decision": "allow"
    },
    "logName": "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity",
    "operation": {
        "id": "ID",
        "producer": "k8s.io",
        "first": true,
        "last": true
    },
    "receiveTimestamp": "2024-09-18T09:46:39.063264993Z"
}]
输出消息

执行查询操作会提供以下输出消息:

输出消息 消息说明

Successfully executed query "QUERY" in Cloud Logging.

No results were found for the provided query.

操作成功。
Error executing action "Execute Query". Reason: ERROR_REASON

操作失败。

检查与服务器的连接、输入参数或凭据。

脚本结果

下表介绍了使用 Execute Query 操作时脚本结果输出的值:

脚本结果名称 值
is_success True 或 False

Ping

使用 Ping 操作测试与日志记录服务的连接。

此操作不适用于 Google SecOps 实体。

操作输入

无。

操作输出

Ping 操作提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
“支持请求墙”表格 不可用
丰富化表 不可用
JSON 结果 不可用
输出消息 可用
脚本结果 可用
输出消息

Ping 操作会提供以下输出消息:

输出消息 消息说明
Successfully connected to the Cloud Logging server with the provided connection parameters! 操作成功。
Failed to connect to the Cloud Logging server! Error is ERROR_REASON

操作失败。

检查与服务器的连接、输入参数或凭据。

脚本结果

下表介绍了使用 Ping 操作时脚本结果输出的值:

脚本结果名称 值
is_success True 或 False

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。