当前位置: 首页 > 知识库问答 >
问题:

用于Bigquery和云SQL的GCP加密通过Beam/Dataflow API

伯洋
2023-03-14

上下文:我们正在尝试使用GCP数据流(Apache Beam)将一些CSV格式的数据加载到GCP BigQuery中。这是第一次(针对每个表)通过BigQueryIO API创建BQ表。客户要求之一是GCP上的数据需要使用客户提供/管理的加密密钥进行加密。

问题陈述:在创建表时,我们无法找到通过 API 指定“自定义加密密钥”的任何方法。 GCP 文档详细介绍了如何通过 GCP BQ 控制台指定自定义加密密钥,但在 DataFlow 代码中找不到任何通过 API 指定它的内容。

代码段:

String tableSpec = new StringBuilder().append(PipelineConstants.PROJECT_ID).append(":")
    .append(dataValue.getKey().target_dataset).append(".").append(dataValue.getKey().target_table_name)
    .toString();

ValueProvider<String> valueProvider = StaticValueProvider.of("gs://bucket/folder/");

dataValue.getValue().apply(Count.globally()).apply(ParDo.of(new RowCount(dataValue.getKey())))
    .apply(ParDo.of(new SourceAudit(runId)));

dataValue.getValue().apply(ParDo.of(new PreProcessing(dataValue.getKey())))
    .apply(ParDo.of(new FixedToDelimited(dataValue.getKey())))
    .apply(ParDo.of(new CreateTableRow(dataValue.getKey(), runId, timeStamp)))
    .apply(BigQueryIO.writeTableRows().to(tableSpec)
        .withSchema(CreateTableRow.getSchema(dataValue.getKey()))
        .withCustomGcsTempLocation(valueProvider)
        .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
        .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));

问:如果有人能告诉我们

  • 是否可以通过Beam API提供加密密钥
  • 如果当前版本不可行,可能的解决方法是什么

如果需要其他信息,请告知。

共有1个答案

宋俊民
2023-03-14

客户提供的加密密钥是一项新功能,并非所有库都已更新以支持它。

如果您事先知道表名,则可以使用UI/CLI或API创建表,然后运行正常流程将数据加载到该表中。那对你来说可能是一个工作环境。

https://cloud.google.com/bigquery/docs/customer-managed-encryption#create_table

创建表的API:https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/insert

您需要在表对象上设置此部分:“encryptionConfiguration”:{“kmsKeyName”:string}有关表的详细信息:https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource

 类似资料:
  • 我正在尝试使用GCP模板执行管道:https://cloud.google.com/dataflow/docs/templates/provided-templates#cloud-storage-text-to-bigquery 但我得到了错误: 任何人都可以共享一个工作的CSV文件以用作运行该管道的输入吗?

  • 我在通过云 SQL 身份验证代理将 GCP 计算引擎虚拟机连接到配置了专用 IP(非公共)的云 SQL 实例时遇到问题。 执行后 我看到以下输出: 我还没有看到上面关于这个主题的任何教程的最后陈述。 我< code>CTRL-C退出上述操作,然后显示: 然后,我运行以下命令以连接到我的云 SQL 实例: 返回: 输入密码后返回: 以下是一些附加信息: 我的虚拟机 (Ubuntu) 与我的云 SQL

  • GCP建议通过私有IP连接使用云SQL代理https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine#before_you_begin.如果应用程序不想利用云SQL代理,而是选择私有IP连接,则没有建议、文档或流程来确保私有IP连接的安全或建立必要的身份验证。 除了专用 IP 连接之外,应用程序还应执行哪些操作,以使其等效于云

  • 但是添加应该在GKE集群中为服务提供一个sidecar,并允许它连接到SQL?

  • 我正在尝试建立一个Apache Beam管道,该管道使用Apache Beam读取Kafka并写入BigQuery。我使用这里的逻辑筛选出一些坐标:https://www.talend.com/blog/2018/08/07/development-data-processing-job-using-apache-beam-streaming-pipeline/TLDR:主题中的消息的格式为id,

  • 如何使用带有DataflowRunner的apache光束从Google BigQuery数据集获取表列表? 我找不到如何从指定的数据集中获取表。我想使用数据流的并行处理编程模型将表从位于美国的数据集迁移到位于欧盟的数据集。