BigQuery AEAD功能的键集管理的最佳做法

问题描述

我的目标是建立一个基于BigQuery的安全解决方案。 我使用受cmeK保护的BigQuery表。 另外,我有一个数据流作业,将数据写入表中。 它使用AEAD函数加密某些值。 https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions 我使用Tableau从BigQuery读取数据。并使用AEAD函数解密一些值。

我需要一种与AEAD一起使用的安全可靠的密钥集管理方法。 加密期间,密钥集应可用于数据流。 另外,密钥集应该在Tableau中可用以进行解密。

解决方法

作为我的简要说明,您的用例包括使用CMEK和AEAD对数据进行静态加密,以使Cloud Dataflow和Tableau等外部工具可以访问数据。

我认为市长的问题是,AEAD无法解决Standard documentation中所述的密钥管理问题:

“虽然AEAD算法非常有用,但它们无济于事 密钥生成和密钥管理问题”。

不过,我可以想到以下方法:

  1. 要管理CMEK,可能要使用Cloud KMS

Cloud Dataflow可以通过代码Java或Python访问CMEK。但是,您将需要查看Tableau文档以了解如何在KMS中配置/连接到CMEK。

  1. 从您共享的链接中,我可以读取以字节表示形式或纯文本格式的json文件形式的AEAD密钥集;因此,我可以可视化管理密钥集的两条路径:

    • 如果要将它们带到BigQuery(jsons)之外,则可以将它们作为秘密进行管理,并使用Secret Manager之类的工具来允许您使用Java或Python来管理秘密,您可以使用这些工具与Cloud Dataflow集成的语言。我不清楚Tableau如何使用这种方法。

    • 您可以将BigQuery中的键集保持在其数据附近,并执行配置,使您的应用仅访问其有权查看的数据。在这种情况下,BiQuery中的Authorized Views将为您提供帮助。您将需要在BA中执行其他配置并构建sql查询以创建视图。然后,Dataflow和Tableau可以透明地连接并从授权视图读取。

作为第二点的示例,您可以使用此访问键集的查询来创建授权视图customers_pii

  SELECT
  ecd.customer_id as customer_id,AEAD.DECRYPT_BYTES(
    (SELECT ck.keyset
     FROM aead.CustomerKeysets AS ck
     WHERE ecd.customer_id = ck.customer_id),ecd.encrypted_animal,CAST(ecd.customer_id AS STRING)
  ) AS favorite_animal
FROM aead.EncryptedCustomerData AS ecd;

然后,用户/应用程序无法访问键集,他们应该以这种方式查询以在视图中检索数据:

SELECT customer_id from customers_pii;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...