【问题标题】:GCP encryption thru Beam / Dataflow APIs for Bigquery and Cloud SQLGCP 通过 Beam / Dataflow API 加密 Bigquery 和 Cloud SQL
【发布时间】:2018-07-25 19:18:51
【问题描述】:

上下文:我们正在尝试使用 GCP Dataflow (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 提供加密密钥?
  • 如果当前版本无法实现,那么可能的工作是什么 周围?

如果需要更多信息,请告知。

【问题讨论】:

  • 这是一个真正的新功能(仍处于测试阶段)。 BigQuery 客户端库甚至不支持它,因此 Beam/Dataflow 将无法支持它。这些表格是提前知道的,还是动态的?
  • @Graham Polley,感谢您的回复!表格将是动态的。正如你提到的,我注意到 GCP 文档提到 BQ Client Lib 不支持加密设置。
  • @glytching,感谢分享 JIRA!
  • 您是否需要为每个动态表使用单独的加密密钥,还是为所有动态表提供一个?

标签: encryption google-cloud-platform google-bigquery google-cloud-dataflow apache-beam


【解决方案1】:

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

如果您事先知道表名,则可以使用 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

您需要在表格对象上设置此部分: “加密配置”:{ “kmsKeyName”:字符串 } 更多详情见表:https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource

【讨论】:

  • 感谢您的回复!主要问题是表格是动态的并且事先不知道。你建议的工作就在那里,但不幸的是,这在这里行不通。如此有效,除非谷歌在 lib 中提供官方支持,否则尝试这样做似乎没有意义。等待声明。谢谢!
  • 前几天发布了一个更新的bigquery客户端库,现在支持表加密:github.com/GoogleCloudPlatform/google-cloud-java/releases
  • 感谢您的信息!我会检查这一点并相应地关闭票证。
猜你喜欢
  • 2022-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2015-12-14
  • 2016-11-02
相关资源
最近更新 更多