BigQuery AEAD 函数的键集管理最佳做法

Best practices for keyset management for BigQuery AEAD function

我的目标是构建一个基于 BigQuery 的安全解决方案。 我使用受 CMEK 保护的 BigQuery tables。 另外,我有一个在 table 中写入数据的数据流作业。 它使用 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 中所述:

"While AEAD algorithms are quite useful, they do nothing to address the issues of key generation and key management".

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

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

Cloud Dataflow 可以通过代码 Java 或 Python 访问 CMEK。但是,您需要查看 Tableau 文档以了解如何 configure/connect 到 KMS 中的 CMEK。

  1. 从您分享的 link 中,我可以读到 AEAD 密钥集是字节表示形式还是 json 纯文本文件;所以,我可以想象两条路径来管理键集:

    • 如果您想将它们带出 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;

然后,users/apps 无法访问键集,他们应该以这种方式查询以检索视图中的数据:

SELECT customer_id from customers_pii;