将外部网络中的数据导入安全的 BigQuery 数据仓库

Last reviewed 2023-08-15 UTC

许多组织会部署用于存储机密信息的数据仓库,以便分析数据以用于各种业务目的。本文档适用于使用 BigQuery 部署和保护数据仓库安全的数据工程师和安全管理员。它是安全蓝图的一部分,包括以下各项:

  • 包含一组 Terraform 配置和脚本的 GitHub 代码库。 Terraform 配置会在 Google Cloud 中设置环境,以支持用于存储机密数据的数据仓库。
  • 使用此蓝图实现的架构、设计和安全控制的指南(本文档)。

本文档讨论了以下内容:

  • 可用于帮助保护生产环境中的数据仓库安全的架构和 Google Cloud 服务。
  • 从外部网络(例如本地环境)将数据导入到 BigQuery 的最佳实践。
  • 在 Google Cloud 中创建、部署和操作数据仓库时有关数据治理的最佳做法,包括列级加密、差分处理机密数据和列级访问权限控制。

本文档假定您已按照 Google Cloud 企业基础蓝图中所述配置了一组基本的安全控制措施。它可以帮助您在现有安全控制机制上额外增加一层控制机制,以帮助保护数据仓库中的机密数据。

数据仓库用例

此蓝图支持以下应用场景:

概览

借助 BigQuery 等数据仓库,企业可以分析其业务数据以获取数据分析。分析师可以访问存储在数据仓库中的业务数据,以生成数据分析。如果您的数据仓库包含您认为机密的数据,则您必须采取措施在导入和存储、传输或分析业务数据时保护业务数据的安全性、机密性、完整性和可用性。在此蓝图中,您将执行以下操作:

  • 对位于 Google Cloud 之外(例如,位于本地环境中)的来源数据进行加密,然后将其导入 BigQuery。
  • 配置有助于保护对机密数据的访问的控制机制。
  • 配置有助于保护数据流水线的控制机制。
  • 为不同的角色配置适当的职责分离。
  • 设置适当的安全控制机制和日志记录以帮助保护机密数据。
  • 使用数据分类、政策标记、动态数据遮盖和列级加密来限制对数据仓库中特定列的访问权限。

架构

如需创建机密数据仓库,您需要安全地导入数据,然后将数据存储在 VPC Service Controls 边界中。下图展示了如何注入和存储数据。

适用于外部网络的安全数据仓库架构。

该架构结合使用了以下 Google Cloud 服务和功能:

  • 借助专用互连,您可以在自己的网络和 Google Cloud 之间传输数据。您可以使用其他连接选项,如选择 Network Connectivity 产品中所述。

  • Identity and Access Management (IAM)Resource Manager 限制访问权限和细分资源。访问权限控制和资源层次结构遵循最小权限原则。

  • VPC Service Controls 通过设置授权、访问权限控制和安全数据交换来创建隔离服务和资源的安全边界。边界如下所示:

    • 接受传入数据(批量或流式)的数据注入边界。单独的边界有助于保护其余工作负载免受传入数据的影响。
    • 将加密数据与其他工作负载隔离的数据边界。
    • 存储加密密钥并定义哪些数据被视为机密数据的治理边界。

    这些边界旨在保护传入的内容,通过设置额外的访问权限控制和监控来隔离机密数据,并将治理与仓库中的实际数据分开。治理包括密钥管理、数据目录管理和日志记录。

  • Cloud StoragePub/Sub 按如下方式接收数据:

    • Cloud Storage:接收和存储批量数据。默认情况下,Cloud Storage 会使用 TLS 加密传输中的数据,并使用 AES-256 加密存储空间中的数据。加密密钥是客户管理的加密密钥 (CMEK)。如需详细了解加密,请参阅数据加密选项

      您可以使用 Identity and Access Management、访问控制列表 (ACL) 和政策文档等安全控制措施来帮助保护对 Cloud Storage 存储桶的访问。如需详细了解支持的访问权限控制,请参阅访问权限控制概览

    • Pub/Sub:接收和存储流式数据。Pub/Sub 通过 CMEK 使用身份验证访问权限控制消息级加密等功能来保护您的数据。

  • Cloud Run functions 由 Cloud Storage 触发,并将 Cloud Storage 上传到注入存储桶的数据写入 BigQuery。

  • Dataflow 流水线会将流数据写入 BigQuery。为了保护数据,Dataflow 会使用唯一的服务账号和访问权限控制。Dataflow 会使用 Streaming Engine 将流水线移至后端服务,以确保流水线执行的安全性。如需了解详情,请参阅 Dataflow 安全性和权限

  • Cloud Data Loss Prevention (Cloud DLP) 会扫描存储在 BigQuery 中的数据,以查找未受保护的敏感数据。如需了解详情,请参阅使用 Cloud DLP 扫描 BigQuery 数据

  • Cloud HSM 负责托管密钥加密密钥 (KEK)。Cloud HSM 是一种云端硬件安全模块 (HSM) 服务。您可以使用 Cloud HSM 生成加密密钥,以便在将数据发送到 Google Cloud 之前对其进行加密。

  • Data Catalog 会在 BigQuery 中发现机密数据时,自动使用元数据(也称为政策标记)对其进行分类。Data Catalog 还会使用元数据来管理对机密数据的访问权限。如需了解详情,请参阅 Data Catalog 概览。如需控制对数据仓库内数据的访问权限,请将政策标记应用于包含机密数据的列。

  • BigQuery 会将加密数据和封装的加密密钥存储在不同的表中。

    BigQuery 采用各种安全控制措施来帮助保护内容,包括访问权限控制列级加密列级安全性数据加密

  • Security Command Center 在一个中心位置监控和审核来自 Google Cloud 环境的安全发现结果。

  • Cloud Logging 可从 Google Cloud 服务中收集所有日志,供您的分析和调查工具进行存储和检索。

  • Cloud Monitoring 可收集并存储有关 Google Cloud 服务的性能信息和指标。

  • 适用于 BigQuery 的数据分析器会自动扫描整个组织(包括所有文件夹和项目)中的所有 BigQuery 表和列中的敏感数据。

组织结构

您可以对组织的资源进行分组,以便对其进行管理,并将测试环境与生产环境分离。借助 Resource Manager,您可以按项目、文件夹和组织对资源进行逻辑分组。

下图展示了一个资源层次结构,其中的文件夹代表不同环境(例如引导、通用、生产、非生产(或预演)和开发)。此层次结构与企业基础蓝图使用的组织结构一致。您可以将蓝图中的大多数项目部署到生产文件夹中,并将数据治理项目部署到用于治理的通用文件夹中。

面向外部网络的安全数据仓库的资源层次结构。

如需了解备用资源层次结构,请参阅确定 Google Cloud 着陆区的资源层次结构

文件夹

您可以使用文件夹将生产环境和治理服务与非生产环境和测试环境隔离开来。下表介绍了企业基础蓝图中此蓝图使用的文件夹。

文件夹 说明
引导 包含部署企业基础蓝图所需的资源。
常用 包含组织的集中式服务,例如数据治理项目。
生产 包含具有云资源的项目,此类资源已经过测试并且可供使用。在此蓝图中,“Production”文件夹包含数据注入项目和数据项目。
非生产 包含其云资源当前正在测试并预演进行发布的项目。在此蓝图中,“非生产”文件夹包含数据注入项目和数据项目。
开发 包含其云资源当前正在开发的项目。在此蓝图中,“Development”文件夹包含数据注入项目和数据项目。

您可以更改这些文件夹的名称,以与组织的文件夹结构一致,但我们建议您保持类似的结构。如需了解详情,请参阅 Google Cloud 企业基础蓝图

项目

您可以使用项目隔离环境的某些部分。下表介绍了组织内所需的项目。您将在运行 Terraform 代码时创建这些项目。您可以更改这些项目的名称,但我们建议您保持类似的项目结构。

项目 说明
数据注入 包含接收数据以及将数据写入 BigQuery 所需的服务。
数据治理 包含用于提供密钥管理、日志记录和数据编目功能的服务。
数据 包含存储数据所需的服务。

除了这些项目之外,您的环境还必须包含负责托管 Dataflow Flex 模板作业的项目。流式数据流水线需要使用 Flex 模板作业。

将角色和群组映射到项目

您必须为组织中的不同用户群组授予对构成机密数据仓库的项目的访问权限。以下部分介绍了针对您创建的项目中的用户群组和角色分配的蓝图建议。您可以自定义群组以匹配组织的现有结构,但我们建议您保持类似的职责划分和角色分配。

数据分析师群组

数据分析师查看和分析数据仓库中的数据。该群组可以在将数据加载到数据仓库中后查看这些数据,并执行与加密数据查看者群组相同的操作。 此群组需要不同项目中的角色,如下表所述。

分配范围 角色
数据注入项目
数据项目
数据政策级别 Masked Reader (roles/bigquerydatapolicy.maskedReader)

加密的数据查看者群组

加密数据查看者群组可以通过 Cloud Looker Studio 和其他报告工具(例如 SAP Business Objects)查看 BigQuery 报告中的加密数据。加密数据查看者群组无法查看加密列中的明文数据。

此群组需要数据项目中的 BigQuery User (roles/bigquery.jobUser) 角色。此群组还需要数据政策级别的 Masked Reader (roles/bigquerydatapolicy.maskedReader)。

明文读取方群组

明文读取器组具有调用解密用户定义函数 (UDF) 以查看明文数据所需的权限,以及读取未屏蔽数据的额外权限。此群组需要数据项目中的角色,如下表所述。

此群组需要在数据项目中拥有以下角色:

此外,此群组还需要 Data Catalog 级别的 Fine-Grained Reader (roles/datacatalog.categoryFineGrainedReader) 角色。

数据工程师群组

数据工程师负责设置和维护数据流水线和仓库。此群组需要不同项目中的角色,如下表所述。

分配范围 角色
数据注入项目
数据项目
  • BigQuery Data Editor (roles/bigquery.dataeditor)
  • BigQuery Job User (roles/bigquery.jobUser)
  • Cloud Build Editor (roles/cloudbuild.builds.editor)
  • Cloud KMS Viewer (roles/cloudkms.viewer)
  • Compute Network User (roles/compute.networkuser)
  • Dataflow Admin (roles/dataflow.admin)
  • DLP Administrator (roles/dlp.admin)
  • Logs Viewer (roles/logging.viewer)

网络管理员群组

网络管理员负责配置网络。通常,他们是网络团队的成员。

网络管理员需要在组织级层具有以下角色:

  • Compute Admin (roles/compute.networkAdmin)
  • Logs Viewer (roles/logging.viewer)

安全管理员群组

安全管理员负责管理安全控制,例如访问权限、密钥、防火墙规则、VPC Service Controls 和 Security Command Center

安全管理员需要在组织级层具有以下角色:

安全分析师群组

安全分析师负责监控并响应安全突发事件和 Cloud DLP 发现结果。

安全分析师需要在组织级层具有以下角色:

群组访问流程示例

以下部分介绍了受保护数据仓库解决方案中两个群组的访问流程。

加密数据查看者群组的访问流程

下图显示了当加密数据查看者组中的用户尝试访问 BigQuery 中的加密数据时会发生什么情况。

加密的数据查看者群组的流程。

在 BigQuery 中访问数据的步骤如下:

  1. 加密的数据查看者会在 BigQuery 上执行以下查询以访问机密数据:

    SELECT ssn, pan FROM cc_card_table
    
  2. BigQuery 会按以下方式验证访问权限:

    • 使用有效且未过期的 Google Cloud 凭据对用户进行身份验证。
    • 请求的来源用户身份和 IP 地址是 VPC Service Controls 边界上的访问权限级别/入站规则中的许可名单的一部分。
    • IAM 会验证用户是否具有适当的角色,以及是否有权访问 BigQuery 表中所选的加密列。

BigQuery 会以加密格式返回机密数据。

明文读取方群组的访问流程

下图显示了当明文读取器组的用户尝试访问 BigQuery 中的加密数据时会发生什么情况。

明文读取方群组的流程。

在 BigQuery 中访问数据的步骤如下:

  1. 明文读取器会在 BigQuery 上执行以下查询,以访问解密格式的机密数据:

    SELECT decrypt_ssn(ssn) FROM cc_card_table
    
  2. BigQuery 会调用查询中的解密用户定义的函数 (UDF) 来访问受保护的列。

  3. 访问权限验证如下:

    • IAM 会验证用户是否具有适当的角色,以及是否有权访问 BigQuery 上的解密 UDF。
    • UDF 会检索用于保护敏感数据列的封装后数据加密密钥 (DEK)。

    解密 UDF 会调用 Cloud HSM 中的密钥加密密钥 (KEK) 来解开 DEK。解密 UDF 使用 BigQuery AEAD 解密函数解密敏感数据列。

  4. 用户有权访问敏感数据列中的明文数据。

了解您需要的安全控制措施

本部分讨论 Google Cloud 中用于保护数据仓库的安全控制措施。您需要考虑以下关键安全原则:

  • 采用最小权限原则来保护访问权限。
  • 通过细分设计和政策来保护网络连接。
  • 保护每项服务的配置。
  • 根据风险级别对数据进行分类和保护。
  • 了解托管数据仓库的环境的安全要求。
  • 配置充分的监控和日志记录机制,以进行检测、调查和响应。

用于数据注入的安全控制措施

如需创建数据仓库,您必须从本地环境中的其他来源、其他云或其他 Google Cloud 来源转移数据。本文档重点介绍如何从本地环境或其他云转移数据;如果您要从其他 Google Cloud 来源转移数据,请参阅将 Google Cloud 中的数据导入安全的 BigQuery 数据仓库

您可以使用以下方式之一将数据转移到 BigQuery 上的数据仓库:

  • 将数据加载到 Cloud Storage 存储桶中的批量作业。
  • 使用 Pub/Sub 的流式作业。

为了帮助在注入期间保护数据,您可以使用客户端加密、防火墙规则和访问权限级别政策。注入过程有时称为提取、转换和加载 (ETL) 过程

与 Google Cloud 建立了加密连接

您可以使用 Cloud VPN 或 Cloud Interconnect 来保护在 Google Cloud 和您的环境之间流动的数据。此蓝图建议使用专用互连,因为它提供直接连接和高吞吐量,这对于大量数据的流式传输非常重要。

如需允许从您的环境访问 Google Cloud,您必须在访问权限级别政策规则中定义列入许可名单的 IP 地址。

网络和防火墙规则

Virtual Private Cloud (VPC) 防火墙规则可控制流入边界的数据流。您可以创建拒绝所有出站流量的防火墙规则,但来自 restricted.googleapis.com 特殊域名的特定 TCP 端口 443 连接除外。restricted.googleapis.com 网域具有以下优势:

  • 在工作负载与 Google API 和服务通信时,该网域可使用专用 Google 访问通道缩小网络受攻击面。
  • 该网络可确保您仅使用支持 VPC Service Controls 的服务。

如需了解详情,请参阅配置专用 Google 访问通道

数据流水线要求您在防火墙中打开 TCP 端口,如 harness-projects 模块代码库中的 dataflow_firewall.tf 文件所定义。如需了解详情,请参阅配置互联网访问权限和防火墙规则

如需拒绝资源使用外部 IP 地址,请将为虚拟机实例定义允许的外部 IP 地址 (compute.vmExternalIpAccess) 组织政策设置为拒绝全部。

边界控制措施

架构图所示,您需要将数据仓库的资源放入单独的边界中。如需让不同边界中的服务共享数据,请创建边界网桥

边界网桥允许受保护的服务请求其边界外的资源。这些网桥可建立以下连接:

  • 它们会将数据注入项目连接到数据项目,以便将数据注入到 BigQuery 中。
  • 它们会将数据项目连接到数据治理项目,以便 Cloud DLP 可以扫描 BigQuery 以查找未受保护的机密数据。
  • 它们会将数据注入项目连接到数据治理项目,以便访问日志记录、监控和加密密钥。

除了边界网桥之外,您还可以使用出站流量规则来允许受边界保护的资源访问边界外的资源。在此解决方案中,您将配置出站流量规则,以获取位于外部项目的 Cloud Storage 中的外部 Dataflow Flex 模板作业。如需了解详情,请参阅访问边界外的 Google Cloud 资源

访问政策

为帮助确保只有特定身份(用户或服务)才能访问资源和数据,您需要启用 IAM 群组和角色。

为帮助确保只有特定来源才能访问您的项目,您需要为 Google 组织启用访问权限政策。我们建议您创建访问权限政策,以指定来自您内部部署环境的请求的允许 IP 地址范围,并且仅允许来自特定用户或服务账号的请求。如需了解详情,请参阅访问权限级别属性

客户端加密

在将敏感数据移入 Google Cloud 之前,请在本地对数据进行加密,以帮助保护静态和传输中的数据。您可以使用 Tink 加密库,也可以使用其他加密库。Tink 加密库与 BigQuery AEAD 加密兼容,该加密方案用于在数据导入后解密列级加密数据。

Tink 加密库使用 DEK,您可以在本地或通过 Cloud HSM 生成 DEK。如需封装或保护 DEK,您可以使用在 Cloud HSM 中生成的 KEK。KEK 是一个对称 CMEK 加密密钥集,安全存储在 Cloud HSM 中并使用 IAM 角色和权限进行管理。

在注入期间,封装的 DEK 和数据存储在 BigQuery 中。BigQuery 包含两个表:一个用于存储数据,另一个用于存储封装的 DEK。当分析师需要查看机密数据时,BigQuery 可以使用 AEAD 解密功能通过 KEK 解封 DEK,然后解密受保护的列。

此外,使用 Tink 的客户端加密功能还会对 BigQuery 中的敏感数据列进行加密,从而进一步保护您的数据。该蓝图使用以下 Cloud HSM 加密密钥:

  • 用于注入过程的 CMEK 密钥,该密钥还供 Pub/Sub、用于流式传输的数据流式传输流水线、Cloud Storage 批量上传以及 Cloud Run 函数工件(用于后续批量上传)使用。
  • Cloud HSM 使用 Tink 在您的网络上加密的数据所封装的加密密钥。
  • 数据项目中的 BigQuery 数据仓库的 CMEK 密钥。

您可以指定 CMEK 位置,用于确定可存储密钥并使其可供访问的地理位置。您必须确保 CMEK 与资源位于同一位置。默认情况下,CMEK 每 30 天轮替一次。

如果贵组织的合规性义务要求您从 Google Cloud 外部管理自己的密钥,则您可以启用 Cloud External Key Manager。如果您使用外部密钥,则您需要自行负责密钥管理活动,包括密钥轮替。

服务账号和访问权限控制

服务账号是 Google Cloud 可用于代表您运行 API 请求的身份。服务账号可确保用户身份无法直接访问服务。如需实现职责分离,请创建具有特定用途的不同角色的服务账号。这些服务账号在 data-ingestion-sa 模块data-governance-sa 模块中定义。

服务账号如下所示:

  • Cloud Storage 服务账号对注入存储桶运行自动批量数据上传流程。
  • Pub/Sub 服务账号可用于将数据流式传输到 Pub/Sub 服务。
  • Dataflow 流水线使用 Dataflow 控制器服务账号将数据从 Pub/Sub 转换并写入 BigQuery。
  • Cloud Run 函数服务账号会将从 Cloud Storage 上传的后续批量数据写入 BigQuery。
  • 存储空间上传服务账号允许 ETL 流水线创建对象。
  • Pub/Sub 写入服务账号可让 ETL 流水线将数据写入 Pub/Sub。

下表列出了分配给每个服务账号的角色:

名称 角色 分配范围
Dataflow 控制器服务账号 数据注入项目
数据项目
数据治理
Cloud Run functions 服务账号 数据注入项目
  • BigQuery Data Editor (roles/bigquery.dataEditor)
  • BigQuery Metadata Viewer (roles/bigquery.metadataViewer)
数据项目
Storage 上传服务账号 数据注入项目
Pub/Sub 写入服务账号 数据注入项目

用于数据存储的安全控制措施

您可以配置以下安全控制,以帮助保护 BigQuery 仓库中的数据:

  • 列级访问权限控制
  • 角色受限的服务账号
  • 动态遮盖敏感字段的数据
  • 组织政策
  • Cloud DLP 自动扫描和数据剖析器
  • 数据注入项目与数据项目之间的 VPC Service Controls 边界,具有适当的边界网桥
  • 加密和密钥管理,如下所示:
    • 使用存储在 Cloud HSM 中的 CMEK 密钥进行静态数据加密
    • 使用 Tink 和 BigQuery AEAD 加密的列级加密

动态数据遮盖

为了便于大规模共享和应用数据访问政策,您可以配置动态数据遮盖。借助动态数据遮盖功能,现有查询可以使用以下条件自动遮盖列数据:

  • 在查询运行时应用于列的数据遮盖规则。
  • 分配给运行查询的用户的角色。如需访问未经遮盖的列数据,数据分析师必须具有 Fine-Grained Reader 角色。

如需在 BigQuery 中定义列的访问权限,请创建政策标记。例如,在独立示例中创建的分类会为包含无法公开的数据(例如信用额度)的列创建 1_Sensitive 政策标记。系统会对这些列应用默认数据遮盖规则,以隐藏列的值。

任何未标记的内容都可供所有有权访问数据仓库的用户使用。这些访问权限控制可确保即使在将数据写入 BigQuery 后,仍无法读取敏感字段中的数据,除非为用户明确授予了访问权限。

列级加密和解密

借助列级加密,您可以在更细粒度级别对 BigQuery 中的数据进行加密。您可以选择在 BigQuery 中包含敏感数据的列,而不是加密整个表,并且系统只会加密这些列。BigQuery 使用 AEAD 加密和解密函数来创建密钥集,其中包含用于加密和解密的密钥。然后,这些密钥用于对表中的个别值进行加密和解密,以及轮替密钥集内的密钥。列级加密可对 BigQuery 中的加密数据提供双重访问权限控制,因为用户必须拥有表和加密密钥的权限,才能读取明文数据。

适用于 BigQuery 且已启用 Cloud DLP 的数据分析器

借助数据分析器,您可以识别 BigQuery 表中敏感数据和高风险数据的位置。数据剖析器会自动扫描和分析整个组织(包括所有文件夹和项目)中的所有 BigQuery 表和列。然后,数据分析器会输出指标,例如预测的 infoTypes、评估的数据风险和敏感度级别以及有关表的元数据。借助这些数据洞见,您可以就如何保护、共享和使用您的数据做出明智的决策。

角色受限的服务账号

您必须限制对数据项目的访问权限,以便只有已获授权的用户才能查看敏感数据字段。为此,您需要创建一个具有 roles/iam.serviceAccountUser 角色的服务账号,授权用户必须模拟该角色。服务账号模拟使用户无需下载服务账号密钥便可使用服务账号,从而提高项目的整体安全性。该模拟会创建允许拥有 roles/iam.serviceAccountTokenCreator 角色的授权用户下载的短期令牌。

组织政策

此蓝图包含企业基础蓝图使用的组织政策限制条件,并添加了一些额外的限制条件。如需详细了解企业基础蓝图使用的限制条件,请参阅组织政策限制条件

下表介绍了在 organization-policies 模块中定义的其他组织政策限制条件

政策 限制条件名称 推荐值
限制资源部署到特定物理位置 gcp.resourceLocations 以下项之一:
in:us-locations
in:eu-locations
in:asia-locations
要求使用 CMEK 保护 gcp.restrictNonCmekServices bigquery.googleapis.com
停用服务账号创建功能 iam.disableServiceAccountCreation true
停用服务账号密钥创建功能 disableServiceAccountKeyCreation true
为在项目中创建的虚拟机启用 OS Login compute.requireOsLogin true
停用对默认服务账号的自动角色授予功能 automaticIamGrantsForDefaultServiceAccounts true
允许使用的入站流量设置 (Cloud Run functions) cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_AND_GCLB
根据 IP 地址将新转发规则仅限于内部 compute.restrictProtocolForwardingCreationForTypes INTERNAL
停用将串行端口输出记录到 Cloud Logging 的功能 compute.disableSerialPortLogging true
定义 Compute Engine 资源可以使用的一组共享 VPC 子网 compute.restrictSharedVpcSubnetworks projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK-NAME

SUBNETWORK-NAME 替换为您希望蓝图使用的专用子网的资源 ID。

运营控制

您可以启用日志记录和 Security Command Center 高级层级功能,例如安全性分析和事件威胁检测。这些控制措施可帮助您执行以下操作:

  • 监控谁在访问您的数据。
  • 确保已设置适当的审核流程。
  • 针对配置错误的云资源生成检查结果。
  • 支持事件管理和运维团队能够应对可能发生的问题。

Access Transparency

Access Transparency 可在 Google 支持人员要求访问您的数据时为您提供实时通知。每当有人访问内容时,系统都会生成 Access Transparency 日志,并且只有具备正当业务理由(例如支持请求)的 Google 员工才能获取访问权限。我们建议您启用 Access Transparency

日志记录

为了帮助您满足审核要求并深入了解您的项目,请使用您要跟踪的服务的数据日志配置 Google Cloud Observabilityharness-logging 模块会配置以下最佳实践:

对于项目中的所有服务,您的日志必须包含有关数据读取和写入的信息以及有关管理员所读取内容的信息。如需了解其他日志记录最佳实践,请参阅企业基础蓝图中的检测控制措施

提醒和监控

部署蓝图后,您可以设置提醒,以通知您的安全运营中心 (SOC) 可能存在安全事件。例如,您可以使用提醒,让安全分析师知道 IAM 权限何时发生更改。如需详细了解如何配置 Security Command Center 提醒,请参阅设置发现结果通知。对于 Security Command Center 未发布的其他提醒,您可以使用 Cloud Monitoring 设置此类提醒

其他安全注意事项

除了此解决方案中介绍的安全控制措施之外,您还应检查和管理使用此解决方案时重叠且相互作用的关键方面的安全性和风险。这些安全注意事项包括:

  • 用于配置、部署和运行 Dataflow 作业和 Cloud Run functions 函数的代码的安全性。
  • 与此解决方案搭配使用的“数据分类”分类。
  • 生成和管理加密密钥。
  • 您在数据仓库中存储和分析的数据集的内容、质量和安全性。
  • 在其中部署解决方案的整体环境,包括:
    • 连接到此解决方案的网络的设计、分段和安全性。
    • 组织的 IAM 控制的安全性和治理。
    • 您向其授予对此解决方案一部分的基础架构的访问权限,以及有权访问在该基础架构中存储和管理的数据的操作者的身份验证和授权设置。

综合应用

如需实现本文档中所述的架构,请执行以下操作:

  1. 确定您将使用企业基础蓝图部署蓝图还是单独部署蓝图。如果您选择不部署企业基础蓝图,请确保您的环境设置了类似的安全基准。
  2. 为您的网络设置专用互连连接
  3. 查看有关蓝图的README,并确保满足所有前提条件。
  4. 按照组织结构中所述,验证您的用户身份具有贵组织“Development”文件夹的 iam.serviceAccountUseriam.serviceAccountTokenCreator 角色。如果您没有用于测试的文件夹,请创建文件夹配置访问权限
  5. 记录您的结算账号 ID、组织的显示名称、测试或演示文件夹的 ID,以及以下用户组的电子邮件地址:
    • 数据分析师
    • 加密的数据查看者
    • 明文读取器
    • 数据工程师
    • 网络管理员
    • 安全管理员
    • 安全分析师
  6. 创建数据、数据治理、数据注入和 Flex 模板项目。如需查看您必须启用的 API 列表,请参阅自述文件。
  7. 为 Terraform 创建服务账号,并为所有项目分配适当的角色。
  8. 设置访问权限控制政策。
  9. 在测试环境中,部署解决方案:

    1. 克隆并运行 Terraform 脚本,以在 Google Cloud 中设置环境。
    2. 在您的网络上安装 Tink 加密库
    3. 设置应用默认凭据,以便您可以在网络上运行 Tink 库。
    4. 使用 Cloud KMS 创建加密密钥
    5. 使用 Tink 生成加密密钥集
    6. 使用以下方法之一,通过 Tink 对数据进行加密:

    7. 使用流式上传或批量上传将加密的数据上传到 BigQuery。

  10. 验证授权用户是否可以使用 BigQuery AEAD 解密函数从 BigQuery 读取未加密的数据。例如,运行以下创建解密函数的代码:

    CREATE OR REPLACE FUNCTION `{project_id}.{bigquery_dataset}.decrypt`(encodedText STRING) RETURNS STRING AS
    (
    AEAD.DECRYPT_STRING(
    KEYS.KEYSET_CHAIN('gcp-kms://projects/myProject/locations/us/keyRings/myKeyRing/cryptoKeys/myKeyName', b'\012\044\000\321\054\306\036\026…..'),
    FROM_BASE64(encodedText), "")
    );
    

    运行创建视图查询:

    CREATE OR REPLACE VIEW `{project_id}.{bigquery_dataset}.decryption_view` AS
    
    SELECT
     Card_Type_Code,
     Issuing_Bank,
     Card_Number,
     `bigquery_dataset.decrypt`(Card_Number) AS Card_Number_Decrypted
    FROM `project_id.dataset.table_name`
    

    运行视图中的选择查询:

    SELECT
      Card_Type_Code,
      Issuing_Bank,
      Card_Number,
      Card_Number_Decrypted
    FROM
    `{project_id}.{bigquery_dataset}.decrypted_view`
    

    如需了解其他查询和用例,请参阅使用 Cloud KMS 进行列级加密

  11. 使用 Security Command Center 根据您的合规性要求扫描新创建的项目。

  12. 将蓝图部署到生产环境中。

后续步骤