帮助保护从数据湖到数据仓库的流水线

简介

本文介绍一些安全控制措施,旨在帮助您管理从数据湖到数据仓库的流水线中的数据访问,并防止其发生数据渗漏。

本文使用示例流水线来介绍以下内容:

  • 配置 IAM 权限,向需要访问存储在数据湖到数据仓库流水线中的数据的一组角色授予访问权限。
  • 配置网络控制,以管理数据的访问路径并帮助防止数据渗漏。
  • 通过组织政策服务和 IAM 实施政策,帮助强制执行您的控制机制。
  • 在加密策略中使用 Cloud KMS。
  • 在流水线中使用 Cloud Data Loss Prevention API 对敏感数据进行分类和隐去(或标记化)处理。
  • 使用审核工具查看谁访问了您的数据。

架构

下图展示了示例流水线架构。

数据湖用例的架构

您可以将此架构用作各种数据湖用例的基础。如需确定最适合自己用例的架构,请参阅构建数据湖

本文中的示例与构建数据湖架构类似,但有一些区别。此批量分析架构还可执行以下操作:

  • 使用 Cloud Data Loss Prevention (Cloud DLP)。首先,系统会使用 Cloud DLP 扫描并处理所有数据,以识别并标记归类为敏感信息的数据,然后将其上传到数据湖中。数据需要经过一个排序和挖掘工作流进行清理、优化,使数据可供使用。
  • 将 BigQuery 和 Cloud Storage 用作已处理数据(即数据仓库)的最终目的地。
  • 支持使用 Cloud Data Studio 和 Datalab 查询存储在 BigQuery 和 Cloud Storage 中的数据。

术语

数据湖。以原生格式存储数据的存储库。此示例架构使用 Cloud Storage,具体说明请参阅构建数据湖将 Cloud Storage 用作数据湖部分。

数据仓库。一个中央存储库,用于存储来自一个或多个不同来源的集成数据。数据仓库将当前数据和历史数据存储在一个位置,您可在这里使用数据进行分析。在此示例架构中,数据仓库包含存储在 Cloud Storage 和 BigQuery 中的数据。这些服务取代了传统数据仓库的典型设置。也就是说,它们可集中存储组织中的所有分析数据。

角色

下表列出了与数据湖到数据仓库流水线相关的人员和服务。

角色 活动
数据上传者 将数据写入 Cloud Storage 数据湖的服务帐号或人员。

服务帐号会运行自动上传。
人员还可能会执行临时上传。
数据查看者 通过 Cloud Data Studio 和其他报告工具(如 SAP Business Objects)使用 BigQuery 报表中数据的人员。
数据分析师(不具备 SQL 知识) 在 Dataprep 中准备数据(例如,联接 BigQuery 反规范化表)以及开发 Google Data Studio 报告和使用其他工具的报告的人员。
数据分析师(具备 SQL 知识) 在 BigQuery 中执行临时分析操作(使用反规范化表)、在 BigQuery 中准备报表以及开发 Data Studio 报告和使用其他工具的报告的人员。
数据科学家 使用各种解决方案执行数据科学任务(包括统计数据分析和机器学习模型开发)的人员。

解决方案可能包括 AI Platform、Datalab、R Studio 和 SAS。

数据科学家可能会执行临时活动并开发模型。
数据工程师 开发将数据迁移到 Cloud Storage 和 BigQuery 的流水线的人员。在 BigQuery 中创建表,实现数据科学家开发的机器学习模型和流水线。除了使用 Dataflow、Dataproc、Cloud Composer 和 Dataprep by Trifacta 解决方案之外,还可以使用其他数据科学解决方案。
运维人员 利用编排、CI/CD 以及其他工具在生产环境中实现数据工程师执行的开发工作的人员。
他们为数据工程师和数据科学家提供使用环境,构建虚拟机映像以供 R Studio 和 Anaconda 等第三方数据科学解决方案使用。他们为数据湖和数据仓库设置 Cloud Storage 存储分区结构,并创建 BigQuery 数据集。
运营身份 用于运行流水线的服务帐号。

下表列出了客户工作角色和活动,以及它们与本文的示例架构的上述角色的映射关系。

客户工作角色 活动 角色
临时数据上传者 将数据直接上传到 Cloud Storage。 数据上传者
数据工程师 开发流水线,用于将数据迁移到 Cloud Storage 和 BigQuery、从 Cloud Storage 创建 BigQuery 表,以及使流水线正常运行。 数据工程师、
运维人员
数据仓库业务分析师 (DW-BA) 在将自己的数据加载到数据仓库中后进行查看。 数据分析师、
数据查看者
跨行业业务分析师 (CS-BA)
营销分析师
在将一组预定义的数据加载到数据仓库中后进行查看。(相当于访问多个 DW-BA。) 数据分析师、
数据查看者
超级业务分析师 查看数据湖和数据仓库中的所有数据,并在数据湖中使用 Dataprep 等工具。 数据分析师、
数据查看者

通常,客户工作角色并不是直接映射到上述角色。可能存在结合了不同角色的工作角色。关键是要指派具备相关技能的人员来执行这些活动。

访问权限控制的最佳做法

建议您遵循最小权限原则。本部分介绍 IAM,BigQuery 和 Cloud Storage 中的访问权限控制选项。

定义通过 IAM 授予访问权限的政策

您可以使用 IAM 向构成架构的 Google Cloud 资源授予权限。在授予权限之前,您必须准确了解人们在流水线中执行了哪些活动。这有助于您确定每个工作角色所需的访问权限级别。

按照 IAM 最佳做法指南定义您的 IAM 访问权限控制政策。

下图展示了示例架构中的工作角色与数据和服务的交互方式,以及这些交互发生的位置。

作业角色交互的架构。

数据上传

数据通过自动化流程上传到数据湖,偶尔通过临时流程上传。自动化流程只能向数据湖添加数据(即无法读取、删除或修改数据湖中的数据)。

运行自动上传流程的服务帐号以及任何临时数据加载者都必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

storage.objectCreator
Cloud Storage 存储分区 运行自动上传的服务帐号

临时数据上传者
(超级业务分析师)
允许上传者应用创建对象(但不允许查看、删除或覆盖对象)。

在示例架构中,数据将上传到指定的存储分区。存储分区位置在您调用上传者流程时定义。您可创建单独的上传者群组(如有必要,还可创建服务帐号),进一步隔离谁可以访问哪些存储分区。

在将数据上传到数据湖之前,您可能需要对敏感数据进行标记化或隐去处理。您可以使用 Cloud DLP API 执行此操作,本文稍后将对此进行说明。

数据处理

由于数据湖以数据的原始格式存储数据,因此通常必须先处理数据,然后才能将其加载到数据仓库中。例如,处理过程可能包括数据清理、重复信息删除和转换。Google Cloud 的数据处理工具包括 Cloud Composer、Dataproc、Dataflow、BigQuery 和 Dataprep。

数据工程师以及运行 Cloud Composer 作业的服务帐号必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

roles/composer.admin
项目 数据工程师 授予数据工程师对 Cloud Composer 资源的完全控制权限。(此角色不授予对存储分区中数据的直接访问权限。)

roles/composer.worker
项目 用于运行 Cloud Composer 的服务帐号 向服务帐号授予在与其关联的虚拟机上运行 Cloud Composer 环境所需的权限。

数据工程师可以通过 Identity-Aware Proxy (IAP) 访问 Cloud Composer 网页界面。Cloud Composer 是在 Apache Airflow 上构建的工作流编排服务,它可调用更多 API 来执行启动 Dataproc 集群等操作。与 Cloud Composer 环境关联的服务帐号需要具有相关权限,才能使用这些资源。该服务帐号必须至少具有 roles/composer.worker 权限

Dataflow 服务帐号必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

dataflow.worker
组织 用于执行 Dataflow 工作单元的服务帐号。 授予服务帐号执行 Dataflow 流水线的工作单元的权限。

您可以使用 Dataprep 直观地探索和转换来自不同的大型数据集的原始数据。您可以将 Dataprep 与 Dataflow 和 Cloud Composer 所用的自动化流程分开使用。

Dataprep 服务帐号和业务分析师必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

dataprep.ServiceAgent
项目 Dataprep 服务帐号 向 Dataprep 服务帐号授予权限,使其可以访问和修改数据集和存储空间,以及在项目中运行和管理 Dataprep 作业。

dataprep.user
项目 数据分析师 允许用户运行 Dataprep 应用。

数据仓库

在示例场景中,不同的数据分析师对数据仓库中的数据具有不同级别的访问权限。

业务分析师

数据仓库业务分析师 (DW-BA) 可在将数据加载到数据仓库中后查看这些数据。

DW-BA 具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限


bigquery.user

项目 DW-BA 使 DW-BA 能够针对由 bigquery.dataviewer 角色授予的权限所定义的数据集运行查询。

bigquery.dataviewer
BigQuery 数据集 DW-BA 使具有项目的 bigquery.user 角色的 DW-BA 可以对其在指定数据集中的数据运行查询。

storage.objectviewer
存储分区 DW-BA 授予查看联合数据源的权限(因为数据仓库中的数据存储在 Cloud Storage 和 BigQuery 中)。

DW-BA 可以使用用户管理的服务帐号启动 Dataproc 集群并对其数据运行 Hive 查询。服务帐号必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限


dataproc.editor

项目 DW-BA 授予启动 Dataproc 集群和运行作业的权限,这是对存储在 Cloud Storage 中的数据运行 Hive 查询的必要条件。

DW-BA 不需要使用将文件上传到 Cloud Storage 的功能,因为文件已上传。

DW-BA 必须具有以下 IAM 角色才能查看指定存储分区上的作业输出。

角色 资源 主帐号 权限

storage.objectviewer
存储分区 DW-BA 授予查看联合数据源的权限。

按照使用用户管理的服务帐号启动 Dataproc 集群的最佳做法进行操作。这样,在取消了最初启动作业的用户的访问权限后,可运行长时间运行的作业。您还可以为集群创建精细的访问和控制权限。

用户管理的服务帐号必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

dataproc.worker
项目 Dataproc 服务帐号 允许服务帐号启动和运行 Dataproc 集群。

要通过您的权限进一步细化,请参阅 Dataproc 粒度 IAM

跨行业业务分析师

在此情景中,跨行业业务分析师 (CS-BA) 或营销分析师可以在将一组预定义的数据加载到数据仓库中后查看这些数据。此访问权限相当于多个 DW-BA 视图。

在我们的示例中,CS-BA 可以查看的数据集和 Cloud Storage 存储分区位于同一项目中。

CS-BA 必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

bigquery.user
项目 CS-BA 使 CS-BA 可以对其具有 bigquery.dataviewer 角色的数据集运行查询。

bigquery.dataviewer
项目 CS-BA 使 CS-BA 可枚举项目中的所有数据集并读取数据集元数据,列出数据集中的表,以及从数据集表中读取数据和元数据。

storage.objectviewer
项目 CS-BA 授予查看联合数据源的权限。

如果您要使用受控数量的数据集和联合存储分区,则使用 DW-BA 配置就足够了。(您必须对每个存储分区和每个数据集授予相应权限,而不是在项目级层授予权限。)

超级业务分析师

在此情景中,超级业务分析师 (S-BA) 可以在将数据湖中的所有数据加载到数据仓库中后查看这些数据。

S-BA 必须具有以下 IAM 角色才能使用其所需资源。

角色 资源 主帐号 权限

bigquery.user
组织 S-BA 使 S-BA 可以对其具有 bigquery.dataviewer 角色的数据集运行查询。

bigquery.user 角色不针对用户尚未创建的数据集授予用户查询数据、查看表数据或查看表架构详细信息的权限。

角色 资源 主帐号 权限

bigquery.dataviewer
组织 S-BA 使 S-BA 可枚举项目中的所有数据集并读取数据集元数据,列出数据集中的表,以及从数据集表中读取数据和元数据。

storage.objectviewer
组织 S-BA 授予查看联合数据源的权限。

S-BA 还可以使用 Dataprep 来帮助转换要加载到数据仓库中的数据。

数据查看者

业务分析师还可以使用由 Data Studio 和 Datalab 生成的报告。Datalab 使用 Datalab 虚拟机服务帐号。您必须先向业务分析师和服务帐号授予以下 IAM 角色,然后才能运行笔记本以生成报告。

角色 资源 主帐号 权限

iam.serviceAccountUser
服务帐号 业务分析师 向业务分析师授予访问权限,以连接到 Datalab 实例。他们必须具有启动 Datalab 实例的服务帐号的 serviceAccountUser 角色。

Datalab 要求向单个用户授予对单个实例的访问权限。

您必须向用于启动 Datalab 实例的服务帐号授予对 BigQuery、Cloud Storage 和 Dataflow 的访问权限。该服务帐号必须具有以下 IAM 角色才能使用其所需的资源。

角色 资源 主帐号 权限

bigquery.user
组织 服务帐号 使 Datalab 服务帐号可以对其具有 bigquery.dataviewer 角色的数据集运行查询。

bigquery.dataviewer
组织 服务帐号 使服务帐号可枚举项目中的所有数据集、读取元数据、列出数据集中的表,以及读取表中的数据和元数据。

storage.objectviewer
组织 服务帐号 授予查看联合数据源的权限。

Data Studio 必须具有相应数据源的凭据才能访问 BigQuery 数据集。如需了解详情,请参阅数据源凭据

使用 BigQuery 设置精细的访问权限控制

例如,当您有多个业务分析师需要不同级别的访问权限时,您可以管理对 BigQuery 中数据视图的精细访问权限控制。在以下情景中:

  • 数据仓库业务分析师 (DW-BA) 可以查看其数据。
  • 跨行业业务分析师 (CS-BA) 或营销分析师可以在将一组预定义的数据加载到数据仓库中后查看这些数据。所需的访问权限相当于多个 DW-BA 视图。
  • 超级业务分析师 (S-BA) 可以查看数据湖中的所有数据,或在将其加载到数据仓库中后进行查看。

除了 IAM 权限之外,您还必须配置授权视图

授权视图可让您与特定用户和群组共享查询结果,而无需向其授予底层表的访问权限。在示例情景中,您可以为 DW-BA 和 CS-BA 提供精选视图。该视图是在与视图所查询的源数据不同的数据集中创建的。您可以根据视图向业务分析师授予对数据集的访问权限。

如需了解如何实现对 BigQuery 数据集的受限访问权限,请参阅保护数据工作负载用例:限制特定身份对数据的访问权限

在此情景中,您无需配置行级权限。但是,如果情景需要,您可以向不同的用户显示不同的行。您在表中再添加一个字段,在其中添加您要允许查看该行的用户。然后,创建一个使用 SESSION_USER() 函数的视图。SESSION_USER() 函数会返回当前的用户(他们用于进行 Google Cloud 身份验证的电子邮件地址)。如果 SESSION_USER() 返回您添加的字段中包含的用户,则该用户可以查看该行中的数据。

授予对 Cloud Storage 中特定对象的访问权限

通常,IAM 非常适合管理对存储分区及其中对象的访问权限,这也是此流水线中展示的方法。但是,Cloud Storage 具有更多的访问权限控制机制;如果您希望授予对存储分区中特定对象的访问权限时,则可在流水线中使用这些机制。为此,请使用访问权限控制列表签名网址

组织政策

您可以使用组织政策来配置对受支持的资源的限制。您可以针对受支持的资源配置限制条件。适用于示例流水线的限制条件如下所示:

  • 网域限定共享。限制可添加到已配置流水线的组织中 IAM 政策的一组用户。允许/拒绝列表必须指定一个或多个 Google Workspace 或 Cloud Identity 客户 ID。

    要使用 Cloud Composer,在创建环境之前必须停用政策限制条件,以便 Cloud Composer 可将所需的 ACL 应用到您的环境的 Cloud Storage 存储分区。创建环境后,您可以重新启用该政策限制条件。

    如需了解如何实现网域限定共享,请参阅保护数据工作负载用例:阻止非网域身份访问

  • 停用服务帐号密钥创建功能。通过将此限制条件设置为 TRUE,阻止创建服务帐号外部密钥。

  • 实施“仅限存储分区政策”。禁止评估分配给存储分区中的 Cloud Storage 对象的 ACL,以便只有 IAM 政策会授予对这些存储分区中对象的访问权限。

使用 IAP 执行身份和授权检查

Identity-Aware Proxy (IAP) 为通过 HTTPS 访问且托管在 Google Cloud 上的应用建立一个中央授权层。如果某一应用或资源受 IAP 保护,则只有具有正确 IAM 角色的用户才可以通过代理访问该应用或资源。如果用户尝试访问受 IAP 保护的资源,IAP 会执行身份验证和授权检查。在示例流水线中,IAP 用于访问 Cloud Composer 的网页界面

使用 VPC 定义安全边界

通过配置 VPC Service Controls,您可以定义围绕 Google Cloud 资源(如 Cloud Storage 存储分区和 BigQuery 数据集)的安全边界。这样可将数据限制在 Virtual Private Cloud (VPC) 内,从而帮助降低数据渗漏风险。

借助配置适用于本地主机的专用 Google 访问通道,本地主机可以通过数据中心到 Google Cloud 的 Cloud VPNCloud Interconnect 访问 Google API 和服务。本地主机不需要外部 IP 地址;而是使用内部 RFC 1918 IP 地址。

以下示例架构通过专用 Google 访问通道和 VPC Service Controls 来补充 IAM 控件,从而限制对包含数据湖和数据仓库的项目的访问权限。如果本地和 Google Cloud 之间的私密通信不可用,则为数据工程师和运营商实现紧急访问权限。此外,还配置了情境感知访问权限。

此配置如以下架构图所示:

数据工程师具有紧急访问权限的架构。

如需了解如何实现 VPC Service Controls 来帮助减少数据渗漏,请参阅缓解应用的数据渗漏问题帮助用户缓解数据渗漏问题

如需了解如何实现对 Google Cloud API 的代管访问权限,请参阅对 Google Cloud API 的代管访问权限

审核人员、地点和时间

Cloud Audit Logs 包含每个项目、文件夹和组织的下面三种审核日志流:

  • 管理活动
  • 系统事件
  • 数据访问

Google Cloud 服务会将审核日志条目写入这些日志,便于您了解在您的 Google Cloud 项目中“谁在何时何地执行了什么操作”。

管理活动日志包含 API 调用的日志条目或其他用于修改资源配置或元数据的管理操作。管理员活动日志始终处于启用状态。管理员活动审核日志不产生任何费用,且将保留 13 个月(400 天)。

数据访问日志可记录创建、修改或读取用户提供的数据的 API 调用。数据访问审核日志默认停用(BigQuery 中除外),原因是其大小可能会增加。

系统事件日志包含 Compute Engine 执行系统事件时的日志条目。例如,每次实时迁移都会记录为系统事件。系统事件审核日志可免费使用。

在示例流水线中,您将审核管理和数据访问日志。以下服务针对示例架构配置了数据访问审核日志

审核日志 IAM 角色已配置为限制对日志的访问接收器(未显示)还被配置为提供一种在默认保留期之后整理和保留日志的方法。要查看情景示例并了解如何配置日志记录导出策略,请参阅导出 Cloud Logging 的设计模式

保护 PII 数据

个人身份信息 (PII) 是与识别特定个人相关的任何信息。

默认情况下,Google Cloud 对静态存储的客户数据进行加密,无需您采取任何额外操作。

Google Cloud 中的数据会分成子文件区块进行存储,每个区块都在存储系统层级以单独的加密密钥进行加密。用于对区块中的数据进行加密的密钥称为“数据加密密钥”(DEK)。由于 Google 的密钥很多,且需要提供低延迟、高可用性的服务,因此这些密钥都存储在用其加密的数据附近。DEK 本身又会使用“密钥加密密钥”(KEK) 进行加密(或称“封装”)。客户可以选择其偏好的密钥管理解决方案,来管理为保护数据的 DEK 提供保护的 KEK。

对于敏感操作,您可能需要使用客户提供的加密密钥 (CSEK) 生成和管理您自己的密钥加密密钥,或者您可以使用 Cloud KMS 管理加密密钥。

在示例流水线中,当使用 Cloud DLP 对敏感数据进行标记化处理时,我们要求使用 Cloud KMS 管理密钥。

Cloud 数据泄露防护 (DLP) API 可让您以编程方式访问功能强大的敏感数据检查、分类和去标识化平台。

数据由 DLP API 进行处理。然后,处理后的数据会被写入接收器。

数据流水线流程的架构。

如果出于政策或法规遵从方面的原因,您需要在将数据写入数据湖之前识别敏感数据项并对其进行标记,您可以将 DLP API 与 Cloud KMS 结合使用。DLP API 可用于在上传过程中标记敏感数据项。如果您还需要进行去标记化处理(显示原始数据项),则可以使用最初用于标记数据项的 KMS 密钥和加密哈希。

用于识别和标记敏感数据项的架构。

如需详细了解如何实现标记化/去标记化流程,请参阅对文本中的敏感数据进行去标识化处理

当将数据上传到数据湖时,示例流水线架构会在提取阶段使用 Cloud DLP 对数据进行分类。使用 Cloud KMS 管理的密钥对检测到的任何敏感数据进行标记化处理。

后续步骤