适用于 Apache Flink 的 BigQuery 引擎安全性和权限

使用适用于 Apache Flink 的 BigQuery 引擎创建部署和运行作业时,您可以使用权限系统来确保对文件和资源的安全访问。本文档介绍以下概念:

  • Managed Flink 服务代理是什么以及如何使用
  • 什么是托管式 Flink 默认工作负载身份以及如何使用
  • 创建部署和作业所需的角色和权限
  • 访问作业所用资源所需的角色和权限
  • 适用于 Apache Flink 的 BigQuery 引擎使用的各类数据以及数据安全

准备工作

适用于 Apache Flink 的 BigQuery 引擎服务账号

服务账号是由应用或虚拟机 (VM) 实例(而非单个用户)使用的特殊账号。您可以向服务账号授予权限,以允许服务账号访问资源或应用。服务代理是一种由 Google 自动提供的服务账号。服务代理可让服务代表您访问资源。

在运行适用于 Apache Flink 的 BigQuery 引擎部署和作业的过程中,适用于 Apache Flink 的 BigQuery 引擎服务会代表您操作资源。当您在适用于 Apache Flink 的 BigQuery 引擎服务上创建部署并运行作业时,该服务会使用服务代理。例如,适用于 Apache Flink 的 BigQuery 引擎使用服务代理来验证为作业提供的子网是否存在。

使用适用于 Apache Flink 的 BigQuery Engine 时,系统会创建两个服务账号:受管理的 Flink 服务代理受管理的 Flink 默认工作负载身份

托管式 Flink 服务代理

Managed Flink 服务代理由 Google 自动创建和管理。这样,适用于 Apache Flink 的 BigQuery 引擎便可代表您访问资源。托管式 Flink 服务代理的电子邮件地址为:

service-PROJECT_NUMBER@gcp-sa-managedflink.iam.gserviceaccount.com
  • 此账号专供适用于 Apache Flink 的 BigQuery 引擎使用,并且是您项目的专属账号。
  • 由于 Google Cloud 服务预期会拥有相应项目及其资源的读写权限,因此建议您不要更改系统为您的项目自动设定的默认权限。如果托管式 Flink 服务代理失去对某个项目的权限,适用于 Apache Flink 的 BigQuery 引擎将无法执行管理任务。
  • 如果您从 Identity and Access Management (IAM) 政策中移除该服务代理的权限,该账号将仍然存在,因为它归 BigQuery Engine for Apache Flink 服务所有。

托管式 Flink 默认工作负载身份

托管式 Flink 默认工作负载身份是自动创建的服务账号。如需成功运行作业,您需要向此服务账号授予访问作业使用的资源(例如 Cloud Storage 存储分区和 BigQuery 表)的权限。

托管式 Flink 默认工作负载身份的电子邮件地址为:

gmf-PROJECT_NUMBER-default@gcp-sa-managedflink-wi.iam.gserviceaccount.com

当您首次创建部署或作业时,适用于 Apache Flink 的 BigQuery 引擎会创建“托管的 Flink 默认工作负载身份”。创建该服务账号后,您需要向该服务账号添加角色,以便其可以访问作业使用的资源。如需了解详情,请参阅本文档的访问 Google Cloud 资源部分。适用于 Apache Flink 的 BigQuery 引擎使用 IAM 来管理对资源的访问权限。

如需向托管式 Flink 默认工作负载身份添加角色,请按以下步骤操作。在您向此服务账号授予角色之前,该账号不会显示在Google Cloud 控制台中。如需开始向此账号授予角色,请按照 gcloud CLI 说明操作。向此账号添加一个角色后,您可以使用 Google Cloud 控制台授予其他角色。

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    进入 IAM

  2. 选择您的项目。

  3. 选择包括 Google 提供的角色授权

  4. 在“托管式 Flink 默认工作负载身份”所在的行中,点击 修改主账号,然后点击 添加其他角色

  5. 在下拉列表中,选择要添加的角色。例如,如果适用于 Apache Flink 的 BigQuery 引擎作业需要从 Cloud Storage 存储桶读取,请添加 Storage Object Viewer 角色。

  6. 对作业中使用的资源所需的任何角色重复上述步骤,然后点击保存

如需详细了解如何授予角色,请参阅使用控制台授予 IAM 角色

gcloud CLI

如需向托管式 Flink 默认工作负载身份授予角色,请针对作业中使用的资源所需的任何角色运行以下命令。例如,如果您的适用于 Apache Flink 的 BigQuery 引擎作业需要从 Cloud Storage 存储桶读取数据,请添加 roles/storage.objectViewer

 gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:gmf-PROJECT_NUMBER-default@gcp-sa-managedflink-wi.iam.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
  • PROJECT_ID 替换为您的项目 ID。
  • PROJECT_NUMBER 替换为您的项目编号。 如需查找项目编号,请参阅识别项目或使用 gcloud projects describe 命令。
  • SERVICE_ACCOUNT_ROLE 替换为每个角色。

向您的用户账号授予角色

您需要向用于运行适用于 Apache Flink 的 BigQuery 引擎作业的 Google Cloud 账号授予以下角色之一:

  • Managed Flink Developer (roles/managedflink.developer)
  • Managed Flink Admin (roles/managedflink.admin)

如需了解详情,请参阅使用 IAM 进行访问权限控制

访问 Google Cloud 资源

适用于 Apache Flink 作业的 BigQuery Engine 可以访问同一 Google Cloud 项目或其他项目中的 Google Cloud 资源。这些资源可能包括:

为确保适用于 Apache Flink 的 BigQuery 引擎作业可以访问这些资源,您需要使用这些资源的相应访问权限控制机制,为受管 Flink 默认工作负载身份明确授予访问权限。

适用于 Apache Flink 的 BigQuery 引擎还使用防火墙规则来允许或拒绝传入和传出作业使用的资源的流量。您需要配置防火墙规则,以便作业能够访问您的资源。如需了解详情,请参阅防火墙规则

如果您将 Assured Workloads 功能与 Apache Flink 专用 BigQuery Engine 搭配使用(例如支持主权控制的欧盟区域),则作业访问的所有 Cloud Storage、BigQuery、Pub/Sub、I/O 连接器和其他资源都必须位于贵组织的 Assured Workloads 项目或文件夹中。

访问 Managed Service for Apache Kafka

Managed Service for Apache Kafka 使用两级访问权限控制:

  • Google Cloud中的 IAM 角色:这些角色用于控制哪些人可以使用 Google Cloud API 和工具管理您的 Managed Service for Apache Kafka 集群。您可以通过 Google Cloud 控制台或 IAM API 管理这些角色。如需了解详情,请参阅 IAM 文档

  • 来自开源 Apache Kafka 的 Apache Kafka ACL:这些 ACL 用于控制对 Managed Service for Apache Kafka 主题和集群内操作的访问权限,并在 Apache Kafka API 级别强制执行。您可以使用 Apache Kafka 授权 CLI 进行管理。

如果您使用 Google Cloud 来管理集群,IAM 角色是控制访问权限的主要机制。除了 IAM 权限之外,您还可以使用 Apache Kafka ACL 来限制对各个资源的访问权限。如需了解详情,请参阅使用 IAM 和 Apache Kafka ACL 进行访问权限控制

访问 BigQuery 数据集

您可以访问 BigQuery 数据集(位于使用适用于 Apache Flink 的 BigQuery 引擎的同一项目中或另一个项目中)。如要让 BigQuery 来源和接收器正常运行,受管 Flink 默认工作负载身份必须有权访问您的 BigQuery Engine for Apache Flink 作业从中读取数据或向其中写入数据的所有 BigQuery 数据集。

您可能需要配置 BigQuery,以向此账号明确授予访问权限。如需详细了解如何使用 BigQuery 页面BigQuery API 授予对 BigQuery 数据集的访问权限,请参阅 BigQuery 访问权限控制

在必要的 BigQuery 权限中,bigquery.datasets.get IAM 权限是作业访问 BigQuery 数据集所必需的权限。通常,大多数 BigQuery IAM 角色都包含 bigquery.datasets.get 权限,但 roles/bigquery.jobUser 角色属于例外。

访问 Cloud Storage 存储桶

如需向适用于 Apache Flink 的 BigQuery 引擎作业授予对 Cloud Storage 存储桶的访问权限,请使 Managed Flink Default Workload Identity 能够访问该存储桶。此账号至少需要拥有存储桶及其内容的读写权限。您可以使用适用于 Cloud Storage 的 IAM 权限来授予所需的访问权限。

如果您使用 gcloud CLI 将本地文件(例如 JAR 文件或 SQL 文件)上传到 Cloud Storage,则运行作业的用户账号需要拥有 storage.objects.create 权限才能写入 Cloud Storage 存储桶。

IAM 可控制整个Google Cloud 中的权限,并可让您在存储桶级层和项目级层授予权限。如需查看与 Cloud Storage 关联的 IAM 角色列表以及每个角色提供的权限,请参阅适用于 Cloud Storage 的 IAM 角色。如果您需要更好地控制权限,请创建自定义角色

如需为您的托管式 Flink 默认工作负载身份授予在存储桶中读取和写入数据所需的权限,请使用 gcloud storage buckets add-iam-policy-binding 命令。此命令会将您的适用于 Apache Flink 的 BigQuery 引擎项目服务代理添加到存储桶级政策中。

如需检索Google Cloud 项目中的 Cloud Storage 存储分区列表,请使用 gcloud storage buckets list 命令:

gcloud storage buckets list --project= PROJECT_ID

PROJECT_ID 替换为相应项目的 ID。

除非您受到限制资源共享的组织政策的限制,否则您可以访问与适用于 Apache Flink 的 BigQuery 引擎作业位于不同项目中的存储桶。如需详细了解网域限制,请参阅按网域限制身份

您还可以在 Google Cloud 控制台中设置存储桶权限。如需了解详情,请参阅设置存储桶权限

访问 Pub/Sub 主题和订阅

如需访问 Pub/Sub 主题或订阅,请使用 Pub/Sub 的 Identity and Access Management 功能为托管式 Flink 默认工作负载身份设置权限。

以下 Pub/Sub 角色的权限是相关的:

  • roles/pubsub.subscriber 是使用数据所必需的
  • roles/pubsub.editor 是创建 Pub/Sub 订阅所必需的
  • roles/pubsub.viewer推荐的权限,以便适用于 Apache Flink 的 BigQuery 引擎可以查询主题和订阅的配置。
  • 如果拥有订阅或主题的项目启用了 VPC Service Controls,则基于 IP 地址的入站流量规则不允许 Apache Flink 专用 BigQuery Engine 查询配置。在这种情况下,需要基于服务代理的入站流量规则。

数据访问权限和安全

适用于 Apache Flink 的 BigQuery 引擎服务适用于两种类型的数据:

  • 最终用户数据。这些数据由适用于 Apache Flink 的 BigQuery 引擎作业进行处理。一个典型作业会从一个或多个来源读取数据,实现数据转换,并将结果写入一个或多个接收器。所有来源和接收器都是不由适用于 Apache Flink 的 BigQuery 引擎直接管理的存储服务。

  • 运营数据。此数据包括管理适用于 Apache Flink 的 BigQuery 引擎作业所需的所有元数据。此类数据既包括用户提供的元数据(例如作业名称),也包括系统生成的元数据(例如作业 ID)。

适用于 Apache Flink 的 BigQuery 引擎服务使用多种安全机制来帮助确保数据的安全性和私密性。这些机制适用于下列情景:

  • 向服务提交作业
  • 评估作业
  • 在作业执行期间和执行之后请求访问遥测数据和指标

数据存放区域

适用于 Apache Flink 的 BigQuery Engine 服务的所有核心数据处理都在作业中指定的区域中执行。虽然作业可以选择从其他区域的来源和接收器读取和写入,但建议您将作业和资源放置在同一区域。实际的数据处理仅在指定运行适用于 Apache Flink 的 BigQuery Engine 作业的区域中进行。

适用于 Apache Flink 的 BigQuery 引擎是一项区域性服务。如需详细了解数据存储区域和区域,请参阅 适用于 Apache Flink 的 BigQuery Engine 区域

作业提交中的数据

Google Cloud 项目的 IAM 权限控制对 BigQuery Engine for Apache Flink 服务的访问权限。任何被授予托管式 Flink 管理员角色或托管式 Flink 开发者角色的主账号都可以向该服务提交作业。如需提交作业,您必须使用 Google Cloud CLI 进行身份验证。您完成身份验证后,系统将使用 HTTPS 协议提交您的作业。

作业评估中的数据

评估作业时,可能会生成临时数据,这些临时数据会存储在本地部署中。临时数据会进行静态加密,并且在作业评估结束后不会持久保存。

作业日志和遥测中的数据

Cloud Logging 中存储的信息主要由适用于 Apache Flink 的 BigQuery Engine 程序中的代码生成。适用于 Apache Flink 的 BigQuery 引擎服务可能还会在 Cloud Logging 中生成警告和错误数据,不过这些数据是该服务添加到日志中的唯一中间数据。Cloud Logging 是全球性服务。

遥测数据和关联指标均进行了静态加密,并且这些数据的访问权限由您的 Google Cloud 项目的读取权限控制。

建议您使用作业的基础云端资源中提供的安全机制。这些机制包括数据源和接收器(如 BigQuery 和 Managed Service for Apache Kafka)的数据安全功能。此外,最好不要在单个项目中混用不同的信任级别。