将日志导出到 SIEM 系统

本页面介绍了如何将日志从 Google Distributed Cloud (GDC) 网闸隔离配置导出到外部安全信息和事件管理 (SIEM) 系统。通过这种集成,可以实现中心化日志分析和增强的安全监控。

日志导出的核心涉及部署 SIEMOrgForwarder 自定义资源。此资源充当配置文件,指定指定用于接收日志的外部 SIEM 实例的详细信息。通过在 SIEMOrgForwarder 文件中定义这些参数,管理员可以建立一个简化且安全的日志导出流水线。

准备工作

如需获得管理 SIEMOrgForwarder 自定义资源所需的权限,请让您的 IAM 组织管理员为您授予关联的 SIEM 导出组织角色之一。

根据您需要的访问权限和权限级别,您可能会在项目命名空间中获得此资源的 creator、editor 或 viewer 角色。如需了解详情,请参阅准备 IAM 权限。

获得必要权限后,请在将日志导出到外部 SIEM 系统之前完成以下步骤:

  1. 建立连接:确保 GDC 与外部 SIEM 目标之间存在连接。如有需要,请与基础设施运营商 (IO) 协作,建立与客户网络的上行链路连接。

  2. 设置环境变量:设置以下环境变量,以便运行本页面中的命令:

    • kubeconfig 文件的路径:

      export KUBECONFIG=KUBECONFIG_PATH
      

      将 KUBECONFIG_PATH 替换为 Management API 服务器的 kubeconfig 文件的路径。

    • 您的项目命名空间:

      export PROJECT_NAMESPACE=PROJECT_NAMESPACE
      

配置日志导出

在同一命名空间中创建 Secret 和 SIEMOrgForwarder 自定义资源。您可以使用任何项目命名空间。每个 SIEMOrgForwarder 都会从组织中的所有集群导出平台日志,因此您无需在其他项目或集群中创建这些资源。

最佳实践是使用 platform-obs 命名空间,因为 SIEMOrgForwarder 仅导出平台日志。SIEM Export Org 角色还会授予对授予这些角色的命名空间中所有 Secret 的读取权限,因此请让您的 IAM 组织管理员仅向平台管理员授予这些角色。

将日志导出到外部 SIEM 系统:

  1. 提供一个令牌,用于将日志记录堆栈连接到 SIEM 系统。如需执行此操作,您必须在项目命名空间中创建一个 Secret,以存储令牌(对于 Splunk)和密码(对于 Elastic SIEM):

    cat <<EOF | kubectl --kubeconfig=${KUBECONFIG} apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: SECRET_NAME
      namespace: ${PROJECT_NAMESPACE}
    type: Opaque
    stringData:
      SECRET_FIELD: FIELD_VALUE
    EOF
    

    替换以下内容:

    • SECRET_NAME:Secret 的名称。
    • SECRET_FIELD:您要存储 Secret 的字段的名称。对于 Elastic,请使用与自定义资源中的 HTTP_USER_NAME 相同的值。
    • FIELD_VALUE:FIELD_VALUE 是 Splunk 的令牌和 Elastic 的密码。
    • TOKEN:您的令牌。
  2. 在项目命名空间中部署 SIEMOrgForwarder 自定义资源。您必须通过在审核日志或运维日志之间进行选择来指定日志类型。如需为这两种日志类型配置日志导出,您必须为每种类型部署一个 SIEMOrgForwarder 资源。

    以下示例展示了如何将配置应用于 Splunk 的 SIEMOrgForwarder 自定义资源:

      cat <<EOF | kubectl --kubeconfig=${KUBECONFIG} apply -f -
      apiVersion: logging.gdc.goog/v1
      kind: SIEMOrgForwarder
      metadata:
        name: SIEM_ORG_FORWARDER
        namespace: ${PROJECT_NAMESPACE}
      spec:
        source: LOG_TYPE
        destinations:
          splunkOutputs:
            - host: SIEM_HOST
              token:
                name: SECRET_NAME
                field: SECRET_FIELD
              tls: "TLS"
              netConnectTimeout: NET_CONNECT_TIMEOUT
      EOF
    

    替换以下内容:

    • SIEM_ORG_FORWARDER:SIEMOrgForwarder 定义文件的名称。
    • LOG_TYPE:要导出的日志类型。可接受的值为 audit 和 operational。
    • SIEM_HOST:SIEM 主机的名称。
    • SECRET_NAME:Secret 的名称。
    • SECRET_FIELD:您存储 Secret 的字段的名称。
    • TLS:传输层安全协议 (TLS) 的状态。可接受的值为 "On" 和 "Off"。
    • NET_CONNECT_TIMEOUT:等待建立连接的最长时间(以秒为单位)。例如,值为 180 表示等待 180 秒。

    以下示例展示了如何将配置应用于 Elastic 的 SIEMOrgForwarder 自定义资源:

      cat <<EOF | kubectl --kubeconfig=${KUBECONFIG} apply -f -
      apiVersion: logging.gdc.goog/v1
      kind: SIEMOrgForwarder
      metadata:
        name: SIEM_ORG_FORWARDER
        namespace: ${PROJECT_NAMESPACE}
      spec:
        source: LOG_TYPE
        destinations:
          elasticOutputs:
            - host: SIEM_HOST
              port: SIEM_PORT
              http_credential:
                http_user: HTTP_USER_NAME
                http_passwd: SECRET_NAME
              tls: "TLS"
              netConnectTimeout: NET_CONNECT_TIMEOUT
              index: INDEX
      EOF
    

    替换以下内容:

    • SIEM_ORG_FORWARDER:SIEMOrgForwarder 定义文件的名称。
    • LOG_TYPE:要导出的日志类型。可接受的值为 audit 和 operational。
    • SIEM_HOST:SIEM 主机的名称。
    • SIEM_PORT:SIEM 实例的端口。
    • HTTP_USER_NAME:SIEM 实例的用户名。此值还必须是存储密码的 Secret 中的 SECRET_FIELD 键。
    • SECRET_NAME:Secret 的名称。
    • TLS:传输层安全协议 (TLS) 的状态。可接受的值为 "On" 和 "Off"。
    • NET_CONNECT_TIMEOUT:等待建立连接的最长时间(以秒为单位)。例如,值为 180 表示等待 180 秒。
    • INDEX:Elastic 实例的索引。如果未指定,系统将使用日志类型(audit 或 operational)。此字段是可选字段。
  3. 验证已部署的 SIEMOrgForwarder 自定义资源的状态:

      kubectl --kubeconfig=${KUBECONFIG} describe siemorgforwarder/SIEM_ORG_FORWARDER \
          -n ${PROJECT_NAMESPACE}
    

    根据日志类型,检查以下状态:

    • 审核日志:检查 AuditLoggingReady 状态。
    • 操作日志:检查 OperationalLoggingReady 状态。