本页面介绍如何使用 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 搭配使用时的数据路径。
配置身份验证和授权
在连接到 Elastic Stack 之前,您需要在要连接的每个 Google Cloud 组织中创建一个 Identity and Access Management (IAM) 服务账号,并为该账号授予 Elastic Stack 所需的组织级和项目级 IAM 角色。
创建服务账号并授予 IAM 角色
以下步骤使用 Google Cloud 控制台。对于其他方法,请参阅本部分末尾的链接。
对您要从中导入 Security Command Center 数据的每个 Google Cloud 组织完成以下步骤。
- 在创建 Pub/Sub 主题的同一项目中,使用 Google Cloud 控制台的服务账号页面创建一个服务账号。如需查看相关说明,请参阅创建和管理服务账号。
授予该服务账号以下角色:
- Pub/Sub Admin (
roles/pubsub.admin
) - Cloud Asset Owner (
roles/cloudasset.owner
)
- Pub/Sub Admin (
复制您刚刚创建的服务账号的名称。
使用 Google Cloud 控制台中的项目选择器切换到组织级层。
打开组织的 IAM 页面:
在 IAM 页面上,点击授予访问权限。此时将打开授予访问权限面板。
在授予访问权限面板中,完成以下步骤:
- 在新的主账号字段的添加主账号部分,粘贴服务账号的名称。
在分配角色部分中,使用角色字段向服务账号授予以下 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
) 点击保存。该服务账号会显示在 IAM 页面的权限标签页上的按主账号查看下方。
通过继承,该服务账号也会成为组织的所有子项目中的主账号。适用于项目级层的角色会列为继承的角色。
如需详细了解如何创建服务账号并授予角色,请参阅以下主题:
向 Elastic Stack 提供凭据
向 Elastic Stack 提供 IAM 凭据的方式有所不同,具体取决于您托管 Elastic Stack 的位置。
如果您在 Google Cloud 中托管 Docker 容器,请考虑以下事项:
将服务账号添加到将托管 Kubernetes 节点的虚拟机。如果您使用多个 Google Cloud 组织,请将此服务账号添加到其他组织,并为其授予 IAM 角色(请参阅创建服务账号并授予 IAM 角色中的第 5 步到第 7 步)。
如果您在服务边界中部署 Docker 容器,请创建入站和出站规则。如需了解相关说明,请参阅在 VPC Service Controls 中授予边界访问权限。
如果您在本地环境中托管 Docker 容器,请为每个 Google Cloud 组织创建服务账号密钥。您需要使用 JSON 格式的服务账号密钥来完成本指南。
如需了解安全存储服务账号密钥的最佳实践,请参阅管理服务账号密钥的最佳实践。
如果您在其他云中安装 Docker 容器,请配置工作负载身份联合并下载凭据配置文件。如果您使用多个 Google Cloud 组织,请将此服务账号添加到其他组织,并为其授予 IAM 角色(请参阅创建服务账号并授予 IAM 角色中的第 5 步到第 7 步)。
配置通知
对您要从中导入 Security Command Center 数据的每个 Google Cloud 组织完成以下步骤。
设置发现结果通知,如下所示:
- 启用 Security Command Center API。
- 创建过滤条件以导出发现结果和资产。
- 创建四个 Pub/Sub 主题:发现结果、资源、审核日志和资产各一个。
NotificationConfig
必须使用您为发现结果创建的 Pub/Sub 主题。
您将需要此任务中的组织 ID、项目 ID 和 Pub/Sub 主题名称来配置 Elastic Stack。
为您的项目启用 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
,请执行以下操作:
在终端窗口中,安装 wget,这是一个用于从网络服务器检索内容的免费软件实用程序。
对于 Ubuntu 和 Debian 发行版,请运行以下命令:
apt-get install wget
对于 RHEL、CentOS 和 Fedora 发行版,请运行以下命令:
yum install wget
安装
unzip
,它是一种用于提取 ZIP 文件内容的免费软件实用程序。对于 Ubuntu 和 Debian 发行版,请运行以下命令:
apt-get install unzip
对于 RHEL、CentOS 和 Fedora 发行版,请运行以下命令:
yum install unzip
为 GoogleSCCElasticIntegration 安装软件包创建一个目录:
mkdir GoogleSCCElasticIntegration
下载 GoogleSCCElasticIntegration 安装软件包:
wget -c https://storage.googleapis.com/security-center-elastic-stack/GoogleSCCElasticIntegration-Installation.zip
将 GoogleSCCElasticIntegration 安装软件包的内容解压缩到
GoogleSCCElasticIntegration
目录中:unzip GoogleSCCElasticIntegration-Installation.zip -d GoogleSCCElasticIntegration
创建工作目录以存储和运行
GoApp
模块组件:mkdir WORKING_DIRECTORY
将
WORKING_DIRECTORY
替换为目录名称。导航到
GoogleSCCElasticIntegration
安装目录:cd ROOT_DIRECTORY/GoogleSCCElasticIntegration/
将
ROOT_DIRECTORY
替换为包含GoogleSCCElasticIntegration
目录的目录的路径。将
install
、config.yml
、dashboards.ndjson
和templates
文件夹(其中包含filebeat.tmpl
、logstash.tmpl
和docker.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 控制台中的 Artifact Registry 代码库。
在安装过程中,您可以使用 Security Command Center 和 Elastic Stack 凭据配置 GoApp
模块。
导航到您的工作目录:
cd /WORKING_DIRECTORY
将
WORKING_DIRECTORY
替换为工作目录的路径。验证您的工作目录中是否显示了以下文件:
├── config.yml ├── install ├── dashboards.ndjson ├── templates ├── filebeat.tmpl ├── docker.tmpl ├── logstash.tmpl
在文本编辑器中,打开
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:
中的所有内容复制到resource
下的subscription_name
。必需 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
运行以下命令以安装 Docker 映像并配置
GoApp
模块。chmod +x install ./install
GoApp
模块会下载 Docker 映像、安装该映像并设置容器。此过程完成后,从安装输出中复制 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,请执行以下操作:
前往 Pub/Sub 主题页面。
选择包含 Pub/Sub 主题的项目。
选择您为审核日志创建的 Pub/Sub 主题。
在权限中,将您在第 4 步中复制的 WriterIdentity 服务账号添加为新的主账号并为其分配 Pub/Sub Publisher 角色。审核日志政策更新完成。
Docker 和 Elastic Stack 配置已完成。您现在可以设置 Kibana。
查看 Docker 日志
打开一个终端,然后运行以下命令来查看容器信息(包括容器 ID)。记下安装 Elastic Stack 的容器的 ID。
docker container ls
如需启动容器并查看其日志,请运行以下命令:
docker exec -it CONTAINER_ID /bin/bash cat go.log
将
CONTAINER_ID
替换为安装了 Elastic Stack 的容器的 ID。
设置 Kibana
首次安装 Docker 容器时,请完成以下步骤。
使用文本编辑器打开
kibana.yml
。sudo vim KIBANA_DIRECTORY/config/kibana.yml
将
KIBANA_DIRECTORY
替换为 Kibana 安装文件夹的路径。更新以下变量:
server.port
:用于 Kibana 后端服务器的端口;默认值为 5601server.host
:Kibana 服务器将绑定到的 IP 地址或主机名elasticsearch.hosts
:用于查询的 Elasticsearch 实例的 IP 地址和端口server.maxPayloadBytes
:传入服务器请求的最大载荷大小(以字节为单位);默认值为 1048576url_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 信息中心
- 打开 Kibana 应用。
- 在导航菜单中,转到堆栈管理,然后点击已保存的对象。
- 点击导入,导航到工作目录,然后选择 dashboards.ndjson。系统会导入信息中心并创建索引模式。
升级 Docker 容器
如果您部署了先前版本的 GoApp
模块,则可以升级到较新版本。将 Docker 容器升级到新版本时,您可以保留现有的服务账号设置、Pub/Sub 主题和 ElasticSearch 组件。
如果要从不使用 Docker 容器的集成升级,请参阅升级到最新版本。
如果您要从 v1 升级,请完成以下操作:
将 Logs Configuration Writer (
roles/logging.configWriter
) 角色添加到服务账号。为审核日志创建一个 Pub/Sub 主题。
如果您在其他云中安装 Docker 容器,请配置工作负载身份联合并下载凭据配置文件。
(可选)为了避免在导入新信息中心时出现问题,请从 Kibana 中移除现有信息中心:
- 打开 Kibana 应用。
- 在导航菜单中,点击 Stack Management(堆栈管理),然后点击 Saved Objects(已保存的对象)。
- 搜索 Google SCC。
- 选择要移除的所有信息中心。
- 点击 Delete(删除)。
移除现有的 Docker 容器:
打开终端并停止容器:
docker stop CONTAINER_ID
将
CONTAINER_ID
替换为安装了 Elastic Stack 的容器的 ID。移除 Docker 容器:
docker rm CONTAINER_ID
如有必要,请在容器 ID 前面添加
-f
来强制移除容器。
完成下载 GoApp 模块中的第 1 步至第 7 步。
将现有
config.env
文件从先前安装移动到\update
目录中。如有必要,请授予可执行文件权限以运行
./update
:chmod +x ./update ./update
运行
./update
以将config.env
转换为config.yml
。验证
config.yml
文件是否包含您的现有配置。如果不包含,请重新运行./update
。如需支持多个 Google Cloud 组织,请将其他组织配置添加到
config.yml
文件中。将
config.yml
文件移至install
文件所在的工作目录中。完成安装 Docker 中的步骤。
完成更新审核日志的权限中的步骤。
按照导入 Kibana 信息中心中的说明导入新信息中心。此步骤将覆盖现有的 Kibana 信息中心。
查看和修改 Kibana 信息中心
您可以使用 Elastic Stack 中的自定义信息中心直观呈现和分析您的发现结果、资产和安全来源。信息中心会显示关键发现结果,并帮助您的安全团队确定修复的优先级。
概览信息中心
概览信息中心包含一系列图表,其中按严重级别、类别和状态显示 Google Cloud 组织中发现结果的总数。发现结果是根据 Security Command Center 的内置服务(例如 Security Health Analytics、Web Security Scanner、Event Threat Detection 和 Container Threat Detection)以及您启用的任何集成服务进行编译的。
要按错误配置或漏洞等条件过滤内容,您可以选择发现结果类。
其他图表显示哪些类别、项目和资产生成最多的发现结果。
资产信息中心
可在资产信息中心查看显示 Google Cloud 资产的表。这些表显示了资产所有者、按资源类型和项目划分的资产计数,以及最近添加和更新的资产。
您可以按组织、资产名称、资产类型和父级资产过滤资产数据,并快速地深入查看特定资产的发现结果。如果您点击资产名称,系统会将您重定向到 Google Cloud 控制台中的 Security Command Center 资产页面,并显示所选资产的详细信息。
审核日志信息中心
审核日志信息中心显示一系列图表和表格,其中显示审核日志信息。信息中心中包含的审核日志包括管理员活动、数据访问、系统事件和政策拒绝审核日志。表格包括时间、严重程度、日志类型、日志名称、服务名称、资源名称和资源类型。
您可以按组织、来源(例如项目)、严重程度、日志类型和资源类型来过滤数据。
发现结果信息中心
发现结果信息中心包含显示最新发现结果的图表。这些图表提供有关发现结果的数量、严重程度、类别和状态的信息。您还可以查看一段时间内的有效发现结果,以及具有最多发现结果的项目或资源。
您可以按组织和发现结果类来过滤数据。
如果您点击发现结果名称,系统会将您重定向到 Google Cloud 控制台中的 Security Command Center 的发现结果页面,并显示所选发现结果的详细信息。
来源信息中心
来源信息中心会显示发现结果和安全来源的总数、按来源名称所示的发现结果数量,以及包含所有安全来源的表。表列包括名称、显示名称和说明。
添加列
- 导航到信息中心。
- 点击修改,然后点击修改可视化。
- 在添加子存储桶下,选择拆分行。
- 在列表中,选择字词汇总。
- 在降序下拉菜单中,选择升序或降序。在大小字段中,输入表的最大行数。
- 选择要添加的列,然后点击更新。
- 保存更改。
隐藏或移除列
- 转至信息中心。
- 点击修改。
- 如需隐藏列,请点击列名称旁边的公开范围(眼睛)图标。
- 如需移除列,请点击列名称旁边的 X 或删除图标。
卸载与 Elasticsearch 的集成
请完成以下部分以移除 Security Command Center 与 Elasticsearch 之间的集成。
移除信息中心、索引和索引模式
如果您要卸载此解决方案,请移除信息中心。
前往信息中心。
搜索 Google SCC,然后选择所有信息中心。
点击 Delete dashboards(删除信息中心)。
前往 Stack Management(栈管理)> Index Management(索引管理)。
关闭以下索引:
- gccassets
- gccfindings
- gccsources
- gccauditlogs
前往 Stack Management(栈管理)> Index Patterns(索引模式)。
关闭以下模式:
- gccassets
- gccfindings
- gccsources
- gccauditlogs
卸载 Docker
删除 Pub/Sub 的 NotificationConfig。如需查找 NotificationConfig 的名称,请运行以下命令:
docker exec googlescc_elk ls docker exec googlescc_elk cat NotificationConf_}}HashId{{
移除资产、发现结果、IAM 政策和审核日志的 Pub/Sub Feed。 如需查找 Feed 的名称,请运行以下命令:
docker exec googlescc_elk ls docker exec googlescc_elk cat Feed_}}HashId{{
移除审核日志的接收器。如需查找接收器的名称,请运行以下命令:
docker exec googlescc_elk ls docker exec googlescc_elk cat Sink_}}HashId{{
要查看容器信息(包括容器 ID),请打开终端并运行以下命令:
docker container ls
停止容器:
docker stop CONTAINER_ID
将
CONTAINER_ID
替换为安装了 Elastic Stack 的容器的 ID。移除 Docker 容器:
docker rm CONTAINER_ID
如有必要,请在容器 ID 前面添加
-f
来强制移除容器。移除 Docker 映像:
docker rmi us.gcr.io/security-center-gcr-host/googlescc_elk_v3:latest
删除工作目录和
docker-compose.yml
文件:rm -rf ./main docker-compose.yml