许多组织会部署用于存储机密信息的数据仓库,以便分析数据以用于各种业务目的。本文档适用于使用 BigQuery 部署和保护数据仓库安全的数据工程师和安全管理员。它是安全蓝图的一部分,由以下各项组成:
包含一组 Terraform 配置和脚本的 GitHub 代码库。Terraform 配置会在 Google Cloud 中设置环境,以支持用于存储机密数据的数据仓库。
使用此蓝图实现的架构、设计和安全控制的指南(本文档)。
部署示例环境的演示。
本文档讨论了以下内容:
可用于帮助保护生产环境中的数据仓库安全的架构和 Google Cloud 服务。
在 Google Cloud 中创建、部署和操作数据仓库时有关数据治理的最佳做法,包括数据去标识化、差分处理机密数据和列级访问权限控制。
本文档假定您已按照 Google Cloud 企业基础蓝图中所述配置了一组基本的安全控制措施。它可以帮助您在现有安全控制机制上额外增加一层控制机制,以帮助保护数据仓库中的机密数据。
数据仓库使用场景
此蓝图支持以下应用场景:
将 Google Cloud 中的数据导入安全的 BigQuery 数据仓库(本文档)
概览
借助 BigQuery 等数据仓库,企业可以分析其业务数据以获取数据分析。分析师可以访问存储在数据仓库中的业务数据,以生成数据分析。如果您的数据仓库包含机密数据,则必须采取相应的措施,以便在存储数据时、在数据传输过程中或在分析数据时确保业务数据的安全性、机密性、完整性和可用性。在此蓝图中,您将执行以下操作:
- 配置有助于保护对机密数据的访问的控制机制。
- 配置有助于保护数据流水线的控制机制。
- 为不同的角色配置适当的职责分离。
- 设置模板以查找机密数据并对其进行去标识化。
- 设置适当的安全控制机制和日志记录以帮助保护机密数据。
- 使用数据分类和政策标记来限制对数据仓库中特定列的访问权限
架构
如需创建机密数据仓库,您需要先将数据归类为机密和非机密,然后将数据存储在单独的边界内。下图显示了如何对注入的数据进行分类、去标识化和存储。本文档还介绍了如何按需重标识机密数据以进行分析。
该架构结合使用了以下 Google Cloud 服务和功能:
Identity and Access Management (IAM) 和 Resource Manager 限制访问权限和细分资源。访问权限控制和资源层次结构遵循最小权限原则。
VPC Service Controls 通过设置授权、访问权限控制和安全数据交换来创建隔离服务和资源的安全边界。边界如下所示:
接受传入数据(批量或流式)并对其进行去标识化的数据注入边界。单独的着陆可用区有助于保护其余工作负载免受传入数据的影响。
可以重标识机密数据并将其存储在受限区域的机密数据边界。
存储加密密钥并定义哪些数据被视为机密数据的治理边界。
这些边界旨在保护传入的内容,通过设置额外的访问权限控制和监控来隔离机密数据,并将治理与仓库中的实际数据分开。治理包括密钥管理、数据目录管理和日志记录。
Cloud Storage 和 Pub/Sub 按如下方式接收数据:
Cloud Storage:在去标识化之前接收和存储批量数据。默认情况下,Cloud Storage 会使用 TLS 来加密传输中的数据,此外也会对存储空间中的数据进行加密。加密密钥是客户管理的加密密钥 (CMEK)。您可以使用 Identity and Access Management、访问控制列表 (ACL) 和政策文档等安全控制措施来帮助保护对 Cloud Storage 存储桶的访问。如需详细了解支持的访问权限控制,请参阅访问权限控制概览。
Pub/Sub:在去标识化之前接收和存储流式数据。Pub/Sub 通过 CMEK 使用身份验证、访问权限控制和消息级加密等功能来保护您的数据。
两个 Dataflow 流水线用于对机密数据进行去标识化和重标识,如下所示:
- 第一个流水线使用假名化对机密数据进行去标识化。
- 第二个流水线在已获授权的用户需要访问权限时重标识机密数据。
为了保护数据,Dataflow 会为每个流水线使用唯一的服务账号和加密密钥,并采用访问权限控制。Dataflow 会使用 Streaming Engine 将流水线移至后端服务,以确保流水线执行的安全性。如需了解详情,请参阅 Dataflow 安全性和权限。
敏感数据保护在注入期间对机密数据进行去标识化。
敏感数据保护会根据检测到的 infoType 或记录对结构化和非结构化数据进行去标识化。
Cloud HSM 负责托管密钥加密密钥 (KEK)。Cloud HSM 是一种云端硬件安全模块 (HSM) 服务。
Data Catalog 会在数据注入期间自动使用元数据(也称为政策标记)对机密数据进行分类。Data Catalog 还会使用元数据来管理对机密数据的访问权限。如需了解详情,请参阅 Data Catalog 概览。如需控制对数据仓库内数据的访问权限,请将政策标记应用于包含机密数据的列。
BigQuery 会将机密数据存储在机密数据边界内。
Security Command Center 在一个中心位置监控和审核来自 Google Cloud 环境的安全发现结果。
组织结构
您可以对组织的资源进行分组,以便对其进行管理,并将测试环境与生产环境分离。借助 Resource Manager,您可以按项目、文件夹和组织对资源进行逻辑分组。
下图展示了一个资源层次结构,其中的文件夹代表不同环境(例如引导、通用、生产、非生产(或预演)和开发)。您可以将蓝图中的大多数项目部署到生产文件夹中,并将数据治理项目部署到用于治理的通用文件夹中。
文件夹
您可以使用文件夹将生产环境和治理服务与非生产环境和测试环境隔离开来。下表介绍了企业基础蓝图中此蓝图使用的文件夹。
文件夹 | 说明 |
---|---|
Prod | 包含具有云资源的项目,此类资源已经过测试并且可供使用。 |
常用 | 包含组织的集中式服务,例如治理项目。 |
您可以更改这些文件夹的名称,以与组织的文件夹结构保持一致,但我们建议您保持类似的结构。如需了解详情,请参阅 Google Cloud 企业基础蓝图。
项目
您可以使用项目隔离环境的某些部分。下表介绍了组织内所需的项目。您将在运行 Terraform 代码时创建这些项目。您可以更改这些项目的名称,但我们建议您保持类似的项目结构。
项目 | 说明 |
---|---|
数据提取 | 包含接收数据以及对机密数据进行去标识化所需的服务。 |
治理 | 包含用于提供密钥管理、日志记录和数据编目功能的服务。 |
非机密数据 | 包含存储已去标识化的数据所需的服务。 |
机密数据 | 包含存储和重标识机密数据所需的服务。 |
除了这些项目之外,您的环境还必须包含负责托管 Dataflow Flex 模板作业的项目。流式数据流水线需要使用 Flex 模板作业。
将角色和群组映射到项目
您必须为组织中的不同用户群组授予对构成机密数据仓库的项目的访问权限。以下部分介绍了针对您创建的项目中的用户群组和角色分配的蓝图建议。您可以自定义群组以匹配组织的现有结构,但我们建议您保持类似的职责划分和角色分配。
数据分析师群组
数据分析师负责分析仓库中的数据。此群组需要不同项目中的角色,如下表所述。
项目映射 | 角色 |
---|---|
数据提取 |
需要访问机密数据的数据分析师具有的其他角色: |
机密数据 |
|
非机密数据 |
|
数据工程师群组
数据工程师负责设置和维护数据流水线和仓库。此群组需要不同项目中的角色,如下表所述。
项目映射 | 角色 |
---|---|
数据提取 | |
机密数据 |
|
非机密数据 |
|
网络管理员群组
网络管理员负责配置网络。通常,他们是网络团队的成员。
网络管理员需要在组织级层具有以下角色:
roles/logging.viewer
安全管理员群组
安全管理员负责管理安全控制,例如访问权限、密钥、防火墙规则、VPC Service Controls 和 Security Command Center。
安全管理员需要在组织级层具有以下角色:
安全分析师群组
安全分析师负责监控并响应安全突发事件和敏感数据保护发现结果。
安全分析师需要在组织级层具有以下角色:
roles/cloudkms.viewer
roles/logging.viewer
roles/securitycenter.findingsEditor
以下 Security Command Center 角色之一:
roles/securitycenter.findingsBulkMuteEditor
roles/securitycenter.findingsMuteSetter
roles/securitycenter.findingsStateSetter
了解您需要的安全控制措施
本部分讨论 Google Cloud 中用于保护数据仓库的安全控制措施。您需要考虑如下关键安全原则:
采用最小权限原则来保护访问权限。
通过细分设计和政策来保护网络连接。
保护每项服务的配置。
根据风险级别对数据进行分类和保护。
了解托管数据仓库的环境的安全要求。
配置充分的监控和日志记录机制,以进行检测、调查和响应。
用于数据注入的安全控制措施
如需创建数据仓库,您必须从其他 Google Cloud 来源(例如数据湖)转移数据。您可以使用以下方式之一将数据转移到 BigQuery 上的数据仓库:
使用 Cloud Storage 的批量作业。
使用 Pub/Sub 的流式作业。为了帮助在注入期间保护数据,您可以使用防火墙规则、访问权限政策和加密。
网络和防火墙规则
Virtual Private Cloud (VPC) 防火墙规则可控制流向边界的数据流。您可以创建拒绝所有出站流量的防火墙规则,但来自 restricted.googleapis.com
特殊域名的特定 TCP 端口 443 连接除外。restricted.googleapis.com
网域具有以下优势:
- 在工作负载与 Google API 和服务通信时,该网域可使用专用 Google 访问通道缩小网络受攻击面。
- 该网络可确保您仅使用支持 VPC Service Controls 的服务。
如需了解详情,请参阅配置专用 Google 访问通道。
您必须为每个 Dataflow 作业配置单独的子网。单独的子网可确保要去标识化的数据与要重标识的数据正确分离。
数据流水线要求您在防火墙中打开 TCP 端口,如 dwh-networking
模块代码库中的 dataflow_firewall.tf
文件所定义。如需了解详情,请参阅配置互联网访问权限和防火墙规则。
如需拒绝资源使用外部 IP 地址,请将 compute.vmExternalIpAccess
组织政策设置为拒绝全部。
边界控制措施
如架构图所示,您需要将机密数据仓库的资源放入单独的边界中。如需让不同边界中的服务共享数据,请创建边界网桥。边界网桥允许受保护的服务请求其边界外的资源。这些网桥可建立以下连接:
它们会将数据注入项目连接到治理项目,以便在注入期间进行去标识化。
它们会连接非机密数据项目和机密数据项目,以便在数据分析师请求时可以重标识机密数据。
它们会将机密项目连接到数据治理项目,以便在数据分析师请求时进行重标识。
除了边界网桥之外,您还可以使用出站流量规则来允许受服务边界保护的资源访问边界外的资源。在此解决方案中,您将配置出站流量规则,以获取位于外部项目的 Cloud Storage 中的外部 Dataflow Flex 模板作业。如需了解详情,请参阅访问边界外的 Google Cloud 资源。
访问政策
为帮助确保只有特定身份(用户或服务)才能访问资源和数据,您需要启用 IAM 群组和角色。
为帮助确保只有特定来源才能访问您的项目,您需要为 Google 组织启用访问权限政策。我们建议您创建访问权限政策,以指定请求的允许 IP 地址范围,并且仅允许来自特定用户或服务账号的请求。如需了解详情,请参阅访问权限级别特性。
用于注入的密钥管理和加密
这两种注入选项都使用 Cloud HSM 来管理 CMEK。您可以使用 CMEK 密钥在注入期间帮助保护数据。敏感数据保护使用您配置的检测器加密机密数据,从而进一步保护您的数据。
如需注入数据,请使用以下加密密钥:
用于注入过程的 CMEK 密钥,该密钥还供 Dataflow 流水线和 Pub/Sub 服务使用。注入过程有时称为提取、转换和加载 (ETL) 过程。
Cloud HSM 使用敏感数据保护为数据去标识化过程封装的加密密钥。
两个 CMEK 密钥,一个用于非机密数据项目中的 BigQuery 仓库,另一个用于机密数据项目中的仓库。如需了解详情,请参阅密钥管理。
您可以指定 CMEK 位置,用于确定可存储密钥并使其可供访问的地理位置。您必须确保 CMEK 与资源位于同一位置。默认情况下,CMEK 每 30 天轮替一次。
如果贵组织的合规性义务要求您从 Google Cloud 外部管理自己的密钥,则您可以启用 Cloud External Key Manager。如果您使用外部密钥,则您需要自行负责密钥管理活动,包括密钥轮替。
服务账号和访问权限控制
服务账号是 Google Cloud 可用于代表您运行 API 请求的身份。服务账号可确保用户身份无法直接访问服务。如需实现职责分离,请创建具有特定用途的不同角色的服务账号。这些服务账号在 data-ingestion
模块和 confidential-data
模块中定义。服务账号如下所示:
用于对机密数据进行去标识化的 Dataflow 流水线的 Dataflow 控制器服务账号。
用于对机密数据进行重标识的 Dataflow 流水线的 Dataflow 控制器服务账号。
用于从批量文件注入数据的 Cloud Storage 服务账号。
用于从流式服务注入数据的 Pub/Sub 服务账号。
用于运行创建 Dataflow 流水线的 Dataflow 批量作业的 Cloud Scheduler 服务账号。
下表列出了分配给每个服务账号的角色:
服务账号 | 名称 | 项目 | 角色 |
---|---|---|---|
Dataflow 控制器 此账号用于去标识化。 |
sa-dataflow-controller |
数据提取 | |
Dataflow 控制器 此账号用于重标识。 |
sa-dataflow-controller-reid |
机密数据 | |
Cloud Storage | sa-storage-writer |
数据提取 |
|
Pub/Sub | sa-pubsub-writer |
数据提取 |
|
Cloud Scheduler | sa-scheduler-controller |
数据提取 |
|
数据去标识化
您可以使用敏感数据保护在注入阶段对结构化和非结构化数据进行去标识化。对于结构化数据,您可以使用基于字段的记录转换来对数据进行去标识化。如需查看此方法的示例,请参阅 /examples/de_identification_template/
文件夹。此示例会检查结构化数据中是否包含任何信用卡号和卡 PIN 码。对于非结构化数据,您可以使用信息类型来对数据进行去标识化。
如需对标记为机密的数据进行去标识化,您可以使用敏感数据保护和 Dataflow 流水线对其进行标记化处理。此流水线会从 Cloud Storage 中获取数据,处理数据,然后将其发送到 BigQuery 数据仓库。
如需详细了解数据去标识化过程,请参阅数据治理。
用于数据存储的安全控制措施
您可以配置以下安全控制,以帮助保护 BigQuery 仓库中的数据:
列级访问权限控制
角色受限的服务账号
组织政策
机密项目与非机密项目之间的 VPC Service Controls 边界,具有适当的边界网桥
加密和密钥管理
列级访问权限控制
为了帮助保护机密数据,请对 BigQuery 仓库中的特定列使用访问权限控制。如需访问这些列中的数据,数据分析师必须具有 Fine-Grained Reader 角色。
如需在 BigQuery 中定义列的访问权限,请创建政策标记。例如,bigquery-confidential-data
示例模块中的 taxonomy.tf
文件可创建以下标记:
3_Confidential
政策标记,用于包含极敏感信息(如信用卡号)的列。有权访问此标记的用户也能够访问标记有2_Private
或1_Sensitive
政策标记的列。2_Private
政策标记,用于包含敏感个人身份信息 (PII)(例如某人的名字)的列。有权访问此标记的用户也有权访问标记有1_Sensitive
政策标记的列。用户无权访问标记有3_Confidential
政策标记的列。1_Sensitive
政策标记,用于包含无法公开的数据(例如信用额度)的列。有权访问此标记的用户无权访问标记有2_Private
或3_Confidential
政策标记的列。
任何未标记的内容都可供所有有权访问数据仓库的用户使用。
这些访问权限控制可确保即使在重标识数据后,仍无法读取数据,除非为用户明确授予了访问权限。
角色受限的服务账号
您必须限制对机密数据项目的访问权限,以便只有已获授权的用户才能查看机密数据。为此,您需要创建一个具有 roles/iam.serviceAccountUser
角色的服务账号,授权用户必须模拟该角色。服务账号模拟使用户无需下载服务账号密钥便可使用服务账号,从而提高项目的整体安全性。该模拟会创建允许拥有 roles/iam.serviceAccountTokenCreator
角色的授权用户下载的短期令牌。
组织政策
此蓝图包含企业基础蓝图使用的组织政策限制条件,并添加了一些额外的限制条件。如需详细了解企业基础蓝图使用的限制条件,请参阅组织政策限制条件。
下表介绍了在 org_policies
模块中定义的其他组织政策限制条件:
政策 | 限制条件名称 | 推荐的值 |
---|---|---|
限制资源部署到特定物理位置。如需了解其他值,请参阅值组。 |
gcp.resourceLocations
|
以下值之一:in:us-locations in:eu-locations in:asia-locations
|
停用服务账号创建功能 |
iam.disableServiceAccountCreation
|
true
|
为在项目中创建的虚拟机启用 OS Login。如需了解详情,请参阅管理组织中的 OS Login 和 OS Login。 |
compute.requireOsLogin
|
true
|
根据 IP 地址将新转发规则仅限于内部。 | compute.restrictProtocolForwardingCreationForTypes
|
INTERNAL
|
定义 Compute Engine 资源可以使用的一组共享 VPC 子网。 |
compute.restrictSharedVpcSubnetworks
|
projects/PROJECT_ID/regions/REGION/s
ubnetworks/SUBNETWORK-NAME 。将 SUBNETWORK-NAME 替换为您希望蓝图使用的专用子网的资源 ID。 |
停用将串行端口输出记录到 Cloud Logging 的功能。 | compute.disableSerialPortLogging |
true |
用于存储和重标识的密钥管理和加密
您可以为机密数据管理单独的 CMEK 密钥,以便对数据进行重标识。您可以使用 Cloud HSM 来保护您的密钥。如需重标识数据,请使用以下密钥:
Dataflow 流水线用于重标识过程的 CMEK 密钥。
敏感数据保护用于对数据进行去标识化的原始加密密钥。
机密数据项目中的 BigQuery 仓库的 CMEK 密钥。
如上文用于注入的密钥管理和加密中所述,您可以指定 CMEK 位置和轮替周期。如果您的组织需要,您可以使用 Cloud EKM。
运维控制措施
您可以启用日志记录和 Security Command Center 高级层级功能,例如安全运行状况分析和威胁检测。这些控制措施可帮助您执行以下操作:
监控谁在访问您的数据。
确保已设置适当的审核流程。
支持突发事件管理和运维团队能够应对可能发生的问题。
Access Transparency
Access Transparency 可在 Google 支持人员要求访问您的数据时为您提供实时通知。每当有人访问内容时,系统都会生成 Access Transparency 日志,并且只有具备正当业务理由(例如支持请求)的 Google 员工才能获取访问权限。我们建议您启用 Access Transparency。
日志记录
为了帮助您满足审核要求并深入了解您的项目,请使用您要跟踪的服务的数据日志配置 Google Cloud Observability。centralized-logging
模块会配置以下最佳做法:
跨所有项目创建聚合日志接收器。
将日志存储在相应区域中。
将 CMEK 密钥添加到日志记录接收器。
对于项目中的所有服务,您的日志必须包含有关数据读取和写入的信息以及有关管理员所读取内容的信息。如需了解其他日志记录最佳实践,请参阅检测控制措施。
提醒和监控
部署蓝图后,您可以设置提醒,以通知您的安全运营中心 (SOC) 可能存在安全突发事件。例如,您可以使用提醒,让安全分析师知道 IAM 权限何时发生更改。如需详细了解如何配置 Security Command Center 提醒,请参阅设置发现结果通知。对于 Security Command Center 未发布的其他提醒,您可以使用 Cloud Monitoring 设置此类提醒。
其他安全注意事项
此蓝图中的安全控制措施已经过 Google Cybersecurity Action 团队和第三方安全团队审核。如需通过 NDA 请求 STRIDE 威胁模型和摘要评估报告的访问权限,请发送电子邮件至 secured-dw-blueprint-support@google.com。
除了此解决方案中介绍的安全控制措施之外,您还应检查和管理使用此解决方案时重叠且相互作用的关键方面的安全性和风险。其中包括:
用于配置、部署和运行 Dataflow 作业的代码。
与此解决方案搭配使用的“数据分类”分类。
您在数据仓库中存储和分析的数据集的内容、质量和安全性。
在其中部署解决方案的整体环境,包括:
- 连接到此解决方案的网络的设计、分段和安全性。
- 组织的 IAM 控制的安全性和治理。
- 您向其授予对此解决方案一部分的基础架构的访问权限,以及有权访问在该基础架构中存储和管理的数据的操作者的身份验证和授权设置。
综合应用
如需实现本文档中所述的架构,请执行以下操作:
确定您将使用企业基础蓝图部署蓝图还是单独部署蓝图。如果您选择不部署企业基础蓝图,请确保您的环境设置了类似的安全基准。
查看有关蓝图的自述文件,并确保满足所有前提条件。
在测试环境中,部署演示以查看解决方案的实际运用。在测试过程中,请考虑以下各项:
使用 Security Command Center 根据您的合规性要求扫描新创建的项目。
将您自己的示例数据添加到 BigQuery 仓库中。
与企业中的数据分析师合作,测试他们对机密数据的访问权限,以及他们是否可以按照预期的方式与 BigQuery 中的数据进行交互。
将蓝图部署到生产环境中。
后续步骤
查看 Google Cloud 企业基础蓝图,了解基准安全环境。
如需查看蓝图的详细信息,请参阅 Terraform 配置自述文件。
如需了解更多最佳实践和蓝图,请参阅安全最佳实践中心。