使用 Docker 将 Security Command Center 数据发送到 Elastic Stack

本页介绍了如何使用 Docker 用于托管您的 Elastic Stack 的容器 安装并自动发送 Security Command Center 发现结果、资产、审核日志和安全内容 Elastic Stack。还介绍了如何管理导出的数据。

Docker 是一个用于管理容器中的应用的平台。Elastic Stack 是一个安全信息和事件管理 (SIEM) 平台,可从一个或多个来源提取数据,并使安全团队能够管理对突发事件的响应并执行实时分析。本指南中讨论的 Elastic Stack 配置包含 4 个组件:

  • Filebeat:安装在边缘主机(例如虚拟机)上的轻量级代理,可以配置为收集和转发数据
  • Logstash:一项转换服务,用于提取数据,将其映射到必填字段,并将结果转发到 Elasticsearch
  • Elasticsearch:存储数据的搜索数据库引擎
  • Kibana:驱动信息中心,使您能够直观呈现和分析数据

在本指南中,您需要设置 Docker,确保正确配置所需的 Security Command Center 和 Google Cloud 服务,并使用自定义模块将发现结果、资产、审核日志和安全来源发送到 Elastic Stack。

下图展示了将 Elastic Stack 与 Security Command Center 搭配使用时的数据路径。

Security Command Center 和 Elastic Stack 集成(点击可放大)
Security Command Center 和 Elastic Stack 集成(点击可放大)

配置身份验证和授权

在连接到 Elastic Stack 之前,您需要在要连接的每个 Google Cloud 组织中创建一个 Identity and Access Management (IAM) 服务账号,并为该账号授予 Elastic Stack 所需的组织级和项目级 IAM 角色。

创建服务账号并授予 IAM 角色

以下步骤使用 Google Cloud 控制台。对于其他方法,请参阅本部分末尾的链接。

对您要从中导入 Security Command Center 数据的每个 Google Cloud 组织完成以下步骤。

  1. 在创建 Pub/Sub 主题的同一项目中,使用 Google Cloud 控制台的服务账号页面创建一个服务账号。如需查看相关说明,请参阅创建和管理服务账号
  2. 授予该服务账号以下角色:

    • Pub/Sub Admin (roles/pubsub.admin)
    • Cloud Asset Owner (roles/cloudasset.owner)
  3. 复制您刚创建的服务账号的名称。

  4. 使用 Google Cloud 控制台中的项目选择器切换到组织级层。

  5. 打开组织的 IAM 页面:

    转到 IAM

  6. 在 IAM 页面上,点击授予访问权限。此时将打开授予访问权限面板。

  7. 授予访问权限面板中,完成以下步骤:

    1. 新的主账号字段的添加主账号部分,粘贴服务账号的名称。
    2. 分配角色部分中,使用角色字段向服务账号授予以下 IAM 角色:

      • Security Center Admin Editor (roles/securitycenter.adminEditor)
      • Security Center Notification Configurations Editor (roles/securitycenter.notificationConfigEditor)
      • Organization Viewer (roles/resourcemanager.organizationViewer)
      • Cloud Asset Viewer (roles/cloudasset.viewer)
      • Logs Configuration Writer (roles/logging.configWriter)
    3. 点击保存。安全账号会显示在 IAM 页面的权限标签页上的按主账号查看下方。

      通过继承,该服务账号也会成为组织的所有子项目中的主账号,并且适用于项目级层的角色被列为继承的角色。

如需详细了解如何创建服务账号并授予角色,请参阅以下主题:

向 Elastic Stack 提供凭据

向 Elastic Stack 提供 IAM 凭据的方式有所不同,具体取决于您托管 Elastic Stack 的位置。

配置通知

对您要从中导入 Security Command Center 数据的每个 Google Cloud 组织完成以下步骤。

  1. 设置发现结果通知,如下所示:

    1. 启用 Security Command Center API。
    2. 创建过滤条件以导出所需的发现结果和资产。
    3. 创建四个 Pub/Sub 主题:发现结果、资源、审核日志和资产各一个。NotificationConfig 必须使用您为发现结果创建的 Pub/Sub 主题。

    您将需要此任务中的组织 ID、项目 ID 和 Pub/Sub 主题名称来配置 Elastic Stack。

  2. 为您的项目启用 Cloud Asset API

安装 Docker 和 Elasticsearch 组件

请按照以下步骤在您的环境中安装 Docker 和 Elasticsearch 组件。

安装 Docker Engine 和 Docker Compose

您可安装 Docker 以在本地或云提供商处使用。如需开始使用,请完成 Docker 产品文档中的以下指南:

安装 Elasticsearch 和 Kibana

您在安装 Docker 中安装的 Docker 映像包含 Logstash 和 Filebeat。如果您尚未安装 Elasticsearch 和 Kibana,请使用以下指南安装应用:

您需要这些任务中的以下信息才能完成本指南:

  • Elastic Stack:主机、端口、证书、用户名和密码
  • Kibana:主机、端口、证书、用户名和密码

下载 GoApp 模块

本部分介绍如何下载 GoApp 模块,这是一个由 Security Command Center 维护的 Go 程序。该模块会自动安排 Security Command Center API 调用,并定期检索 Security Command Center 数据以便在 Elastic Stack 中使用。

如需安装 GoApp,请执行以下操作:

  1. 在终端窗口中,安装 wget,这是一个用于从网络服务器检索内容的免费软件实用程序。

    对于 Ubuntu 和 Debian 发行版,请运行以下命令:

      # apt-get install wget
    

    对于 RHEL、CentOS 和 Fedora 发行版,请运行以下命令:

      # yum install wget
    
  2. 安装 unzip,它是一种用于提取 ZIP 文件内容的免费软件实用程序。

    对于 Ubuntu 和 Debian 发行版,请运行以下命令:

    # apt-get install unzip
    

    对于 RHEL、CentOS 和 Fedora 发行版,请运行以下命令:

    # yum install unzip
    
  3. 为 GoogleSCCElasticIntegration 安装软件包创建一个目录:

    mkdir GoogleSCCElasticIntegration
    
  4. 下载 GoogleSCCElasticIntegration 安装软件包:

    wget -c https://storage.googleapis.com/security-center-elastic-stack/GoogleSCCElasticIntegration-Installation.zip
    
  5. 将 GoogleSCCElasticIntegration 安装软件包的内容解压缩到 GoogleSCCElasticIntegration 目录中:

    unzip GoogleSCCElasticIntegration-Installation.zip -d GoogleSCCElasticIntegration
    
  6. 创建工作目录以存储和运行 GoApp 模块组件:

    mkdir WORKING_DIRECTORY
    

    WORKING_DIRECTORY 替换为目录名称。

  7. 导航到 GoogleSCCElasticIntegration 安装目录:

    cd ROOT_DIRECTORY/GoogleSCCElasticIntegration/
    

    ROOT_DIRECTORY 替换为包含 GoogleSCCElasticIntegration 目录的目录的路径。

  8. installconfig.ymldashboards.ndjsontemplates 文件夹(包含 filebeat.tmpllogstash.tmpldocker.tmpl 文件)移至您的 目录。

    mv install/install install/config.yml install/templates/docker.tmpl install/templates/filebeat.tmpl install/templates/logstash.tmpl install/dashboards.ndjson WORKING_DIRECTORY
    

    WORKING_DIRECTORY 替换为工作目录的路径。

安装 Docker 容器

如需设置 Docker 容器,您需要从 Google Cloud 下载并安装包含 Logstash 和 Filebeat 的预格式化映像。如需了解 Docker 映像,请转到 Google Cloud 控制台中的 Container Registry 存储库。

转到 Container Registry

在安装过程中,您可以使用 Security Command Center 和 Elastic Stack 凭据配置 GoApp 模块。

  1. 导航到您的工作目录:

    cd /WORKING_DIRECTORY
    

    WORKING_DIRECTORY 替换为工作目录的路径。

  2. 验证您的工作目录中是否显示以下文件:

      ├── config.yml
      ├── install
      ├── dashboards.ndjson
      ├── templates
          ├── filebeat.tmpl
          ├── docker.tmpl
          ├── logstash.tmpl
    
  3. 在文本编辑器中,打开 config.yml 文件并添加请求的变量。如果某个变量不是必需的,可以留空。

    变量 说明 需要
    elasticsearch Elasticsearch 配置部分。 必需
    host Elastic Stack 主机的 IP 地址。 必需
    password 您的 Elasticsearch 密码。 可选
    port Elastic Stack 主机的端口。 必需
    username 您的 Elasticsearch 用户名。 可选
    cacert Elasticsearch 服务器的证书(例如 path/to/cacert/elasticsearch.cer)。 可选
    http_proxy 包含用户名、密码、IP 地址和端口的链接 (例如 http://USER:PASSWORD@PROXY_IP:PROXY_PORT). 可选
    kibana Kibana 配置部分。 必需
    host Kibana 服务器绑定到的 IP 地址或主机名。 必需
    password 您的 Kibana 密码。 可选
    port Kibana 服务器的端口。 必需
    username 您的 Kibana 用户名。 可选
    cacert Kibana 服务器的证书(例如 path/to/cacert/kibana.cer)。 可选
    cron Cron 配置部分。 可选
    asset 资产 Cron 配置部分(例如 0 */45 * * * *)。 可选
    source 来源 Cron 配置部分(例如 0 */45 * * * *)。如需了解详情,请参阅 Cron 表达式生成器 可选
    organizations 您的 Google Cloud 组织配置部分。如需添加多个 Google Cloud 组织,请复制从 - id:subscription_nameresource 的所有内容。 必需
    id 您的组织 ID。 必需
    client_credential_path 以下之一:
    • JSON 文件的路径(如果您使用服务账号密钥)。
    • 凭据配置文件(如果您使用工作负载身份联合,如准备工作中所述)
    • 如果这是要在其中安装 Docker 容器的 Google Cloud 组织,请勿指定任何内容。
    可选,具体取决于您的环境
    update 是否从旧版本升级,n 表示否,y 表示是 可选
    project 您的项目 ID 部分。 必需
    id 包含 Pub/Sub 主题的项目的 ID。 必需
    auditlog Pub/Sub 主题和审核日志订阅部分。 可选
    topic_name 审核日志的 Pub/Sub 主题名称 可选
    subscription_name 审核日志的 Pub/Sub 订阅名称 可选
    findings 发现结果的 Pub/Sub 主题和订阅部分。 可选
    topic_name 发现结果的 Pub/Sub 主题的名称。 可选
    start_date 开始迁移发现结果的可选日期,例如 2021-04-01T12:00:00+05:30 可选
    subscription_name 发现结果的 Pub/Sub 订阅的名称。 可选
    asset 资产配置部分。 可选
    iampolicy IAM 政策的 Pub/Sub 主题和订阅部分。 可选
    topic_name IAM 政策的 Pub/Sub 主题的名称。 可选
    subscription_name IAM 政策的 Pub/Sub 订阅的名称。 可选
    resource 资源的 Pub/Sub 主题和订阅部分。 可选
    topic_name 资源的 Pub/Sub 主题的名称。 可选
    subscription_name 资源的 Pub/Sub 订阅的名称。 可选

    config.yml 文件示例

    以下示例展示了一个包含两个 Google Cloud 组织的 config.yml 文件。

    elasticsearch:
      host: 127.0.0.1
      password: changeme
      port: 9200
      username: elastic
      cacert: path/to/cacert/elasticsearch.cer
    http_proxy: http://user:password@proxyip:proxyport
    kibana:
      host: 127.0.0.1
      password: changeme
      port: 5601
      username: elastic
      cacert: path/to/cacert/kibana.cer
    cron:
      asset: 0 */45 * * * *
      source: 0 */45 * * * *
    organizations:
      – id: 12345678910
        client_credential_path:
        update:
        project:
          id: project-id-12345
        auditlog:
          topic_name: auditlog.topic_name
          subscription_name: auditlog.subscription_name
        findings:
          topic_name: findings.topic_name
          start_date: 2021-05-01T12:00:00+05:30
          subscription_name: findings.subscription_name
        asset:
          iampolicy:
            topic_name: iampolicy.topic_name
            subscription_name: iampolicy.subscription_name
          resource:
            topic_name: resource.topic_name
            subscription_name: resource.subscription_name
      – id: 12345678911
        client_credential_path:
        update:
        project:
          id: project-id-12346
        auditlog:
          topic_name: auditlog2.topic_name
          subscription_name: auditlog2.subscription_name
        findings:
          topic_name: findings2.topic_name
          start_date: 2021-05-01T12:00:00+05:30
          subscription_name: findings1.subscription_name
        asset:
          iampolicy:
            topic_name: iampolicy2.topic_name
            subscription_name: iampolicy2.subscription_name
          resource:
            topic_name: resource2.topic_name
            subscription_name: resource2.subscription_name
    

  4. 运行以下命令以安装 Docker 映像并配置 GoApp 模块。

    chmod +x install
    ./install
    

    GoApp 模块会下载 Docker 映像、安装该映像并设置容器。

  5. 此过程完成后,从安装输出中复制 WriterIdentity 服务账号的电子邮件地址。

    docker exec googlescc_elk ls
    docker exec googlescc_elk cat Sink_}}HashId{{
    

    您的工作目录应具有以下结构:

      ├── config.yml
      ├── dashboards.ndjson
      ├── docker-compose.yml
      ├── install
      ├── templates
          ├── filebeat.tmpl
          ├── logstash.tmpl
          ├── docker.tmpl
      └── main
          ├── client_secret.json
          ├── filebeat
          │          └── config
          │                   └── filebeat.yml
          ├── GoApp
          │       └── .env
          └── logstash
                     └── pipeline
                                └── logstash.conf
    

更新审核日志的权限

如需更新权限以便审核日志可流向您的 SIEM,请执行以下操作:

  1. 前往 Pub/Sub 主题页面。

    前往 Pub/Sub

  2. 选择包含 Pub/Sub 主题的项目。

  3. 选择您为审核日志创建的 Pub/Sub 主题。

  4. 权限中,将您在第 4 步中复制的 WriterIdentity 服务账号添加为新的主账号并为其分配 Pub/Sub Publisher 角色。审核日志政策更新完成。

Docker 和 Elastic Stack 配置已完成。您现在可以设置 Kibana

查看 Docker 日志

  1. 打开一个终端,然后运行以下命令来查看容器信息(包括容器 ID)。记下安装 Elastic Stack 的容器的 ID。

    docker container ls
    
  2. 如需启动容器并查看其日志,请运行以下命令:

    docker exec -it CONTAINER_ID /bin/bash
    cat go.log
    

    CONTAINER_ID 替换为安装了 Elastic Stack 的容器的 ID。

设置 Kibana

首次安装 Docker 容器时,请完成以下步骤。

  1. 使用文本编辑器打开 kibana.yml

    sudo vim KIBANA_DIRECTORY/config/kibana.yml
    

    KIBANA_DIRECTORY 替换为 Kibana 安装文件夹的路径。

  2. 更新以下变量:

    • server.port:用于 Kibana 后端服务器的端口;默认值为 5601
    • server.host:Kibana 服务器将绑定到的 IP 地址或主机名
    • elasticsearch.hosts:用于查询的 Elasticsearch 实例的 IP 地址和端口
    • server.maxPayloadBytes:传入服务器请求的最大载荷大小(以字节为单位);默认值为 1048576
    • url_drilldown.enabled:一个布尔值,用于控制从 Kibana 信息中心导航到内部或外部网址的能力;默认值为 true

    完成后的配置如下所示:

      server.port: PORT
      server.host: "HOST"
      elasticsearch.hosts: ["http://ELASTIC_IP_ADDRESS:ELASTIC_PORT"]
      server.maxPayloadBytes: 5242880
      url_drilldown.enabled: true
    

导入 Kibana 信息中心

  1. 打开 Kibana 应用。
  2. 在导航菜单中,转到堆栈管理,然后点击已保存的对象
  3. 点击导入,导航到工作目录,然后选择 dashboards.ndjson。系统会导入信息中心并创建索引模式。

升级 Docker 容器

如果您部署了先前版本的 GoApp 模块,则可以升级到较新版本。将 Docker 容器升级到新版本时,您可以保留现有的服务账号设置、Pub/Sub 主题和 ElasticSearch 组件。

如果要从不使用 Docker 容器的集成升级,请参阅升级到最新版本

  1. 如果您要从 v1 升级,请完成以下操作:

    1. Logs Configuration Writer (roles/logging.configWriter) 角色添加到服务账号。

    2. 为审核日志创建一个 Pub/Sub 主题。

  2. 如果您在其他云中安装 Docker 容器,请配置工作负载身份联合下载凭据配置文件

  3. (可选)为了避免在导入新信息中心时出现问题,请从 Kibana 中移除现有信息中心:

    1. 打开 Kibana 应用。
    2. 在导航菜单中,点击 Stack Management(堆栈管理),然后点击 Saved Objects(已保存的对象)。
    3. 搜索 Google SCC
    4. 选择要移除的所有信息中心。
    5. 点击 Delete(删除)。
  4. 移除现有的 Docker 容器:

    1. 打开终端并停止容器:

      docker stop CONTAINER_ID
      

      CONTAINER_ID 替换为安装了 Elastic Stack 的容器的 ID。

    2. 移除 Docker 容器:

      docker rm CONTAINER_ID
      

      如有必要,请在容器 ID 前面添加 -f 来强制移除容器。

  5. 完成下载 GoApp 模块中的第 1 步到第 7 步。

  6. 将现有 config.env 文件从先前安装移动到 \update 目录中。

  7. 如有必要,请授予运行 ./update 的可执行权限:

    chmod +x ./update
    ./update
    
  8. 运行 ./update 以将 config.env 转换为 config.yml

  9. 验证 config.yml 文件是否包含您的现有配置。如果不包含,请重新运行 ./update

  10. 如需支持多个 Google Cloud 组织,请在 config.yml 文件中添加其他组织配置。

  11. config.yml 文件移动到 install 文件所在的工作目录中。

  12. 完成安装 Docker 中的步骤。

  13. 完成更新审核日志的权限中的步骤。

  14. 按照导入 Kibana 信息中心中的说明导入新信息中心。此步骤将覆盖现有的 Kibana 信息中心。

查看和修改 Kibana 信息中心

您可以使用 Elastic Stack 中的自定义信息中心直观呈现和分析您的发现结果、资产和安全来源。信息中心会显示关键发现结果,并帮助您的安全团队确定修复的优先级。

概览信息中心

概览信息中心包含一系列图表, 您的 Google Cloud 组织中发现结果的数量(按严重级别、类别和状态划分)。 发现结果是根据 Security Command Center 的内置服务(例如 Security Health AnalyticsWeb Security ScannerEvent Threat DetectionContainer Threat Detection)以及您启用的任何集成服务进行编译的。

要按错误配置或漏洞等条件过滤内容,您可以选择发现结果类

其他图表显示哪些类别、项目和资产生成最多的发现结果。

资产信息中心

可在资产信息中心查看显示 Google Cloud 资产的表。这些表显示了资产所有者、按资源类型和项目划分的资产计数,以及最近添加和更新的资产。

您可以按组织、资产名称、资产类型和父级资产过滤资产数据,并快速地深入查看特定资产的发现结果。如果您点击资产名称,系统会将您重定向到 Google Cloud 控制台中的 Security Command Center 资产页面,并显示所选资产的详细信息。

审核日志信息中心

审核日志信息中心显示一系列图表和表格,其中显示审核日志信息。信息中心中包含的审核日志包括管理员活动、数据访问、系统事件和政策拒绝审核日志。表格包括时间、严重程度、日志类型、日志名称、服务名称、资源名称和资源类型。

您可以按组织、来源(例如项目)、严重程度、日志类型和资源类型来过滤数据。

发现结果信息中心

发现结果信息中心包含显示最新发现结果的图表。这些图表提供有关发现结果的数量、严重程度、类别和状态的信息。您还可以查看一段时间内的有效发现结果,以及具有最多发现结果的项目或资源。

您可以按组织和发现结果类来过滤数据。

如果您点击发现结果名称,系统会将您重定向到 Google Cloud 控制台中的 Security Command Center 的发现结果页面,并显示所选发现结果的详细信息。

来源信息中心

来源信息中心会显示发现结果和安全来源的总数、按来源名称所示的发现结果数量,以及包含所有安全来源的表。表列包括名称、显示名称和说明。

添加列

  1. 导航到信息中心。
  2. 点击修改,然后点击修改可视化
  3. 添加子存储桶下,选择拆分行
  4. 在列表中,选择字词汇总。
  5. 降序下拉菜单中,选择升序或降序。在大小字段中,输入表的最大行数。
  6. 选择要添加的列,然后点击更新
  7. 保存更改。

隐藏或移除列

  1. 转至信息中心。
  2. 点击修改
  3. 如需隐藏列,请点击列名称旁边的公开范围(眼睛)图标。
  4. 如需移除列,请点击列名称旁边的 X(删除)图标。

卸载与 Elasticsearch 的集成

请完成以下部分以移除 Security Command Center 与 Elasticsearch 之间的集成。

移除信息中心、索引和索引模式

如果您要卸载此解决方案,请移除信息中心。

  1. 前往信息中心。

  2. 搜索 Google SCC,然后选择所有信息中心。

  3. 点击 Delete dashboards(删除信息中心)。

  4. 前往 Stack Management(栈管理)> Index Management(索引管理)

  5. 关闭以下索引:

    • gccassets
    • gccfindings
    • gccsources
    • gccauditlogs
  6. 前往 Stack Management(栈管理)> Index Patterns(索引模式)

  7. 关闭以下格式:

    • gccassets
    • gccfindings
    • gccsources
    • gccauditlogs

卸载 Docker

  1. 删除 Pub/Sub 的 NotificationConfig。如需查找 NotificationConfig 的名称,请运行以下命令:

    docker exec googlescc_elk ls
    docker exec googlescc_elk cat NotificationConf_}}HashId{{
    
  2. 移除资产、发现结果、IAM 政策和审核日志的 Pub/Sub Feed。 如需查找 Feed 的名称,请运行以下命令:

    docker exec googlescc_elk ls
    docker exec googlescc_elk cat Feed_}}HashId{{
    
  3. 移除审核日志的接收器。如需查找接收器的名称,请运行以下命令:

    docker exec googlescc_elk ls
    docker exec googlescc_elk cat Sink_}}HashId{{
    
  4. 要查看容器信息(包括容器 ID),请打开终端并运行以下命令:

    docker container ls
    
  5. 停止容器:

    docker stop CONTAINER_ID
    

    CONTAINER_ID 替换为安装了 Elastic Stack 的容器的 ID。

  6. 移除 Docker 容器:

    docker rm CONTAINER_ID
    

    如有必要,请在容器 ID 前面添加 -f 来强制移除容器。

  7. 移除 Docker 映像:

    docker rmi us.gcr.io/security-center-gcr-host/googlescc_elk_v3:latest
    
  8. 删除工作目录和 docker-compose.yml 文件:

    rm -rf ./main docker-compose.yml
    

后续步骤