【问题标题】:Dataflow, loading a file with a customer supplied encryption key数据流,使用客户提供的加密密钥加载文件
【发布时间】:2019-01-13 20:26:59
【问题描述】:

尝试使用 CSEK 加载 GCS 文件时出现数据流错误

[ERROR] The target object is encrypted by a customer-supplied encryption key

我打算在数据流端尝试 AES 解密,但我发现如果不传递加密密钥,我什至无法获取文件。

还有其他方法可以从数据流中加载 CSEK 加密的 Google Cloud Storage 文件吗?例如使用谷歌云存储 API,获取流句柄然后将其传递给数据流?

    // Fails
    p.apply("Read from source", TextIO.read().from("gs://my_bucket/myfile")).apply(..); 

【问题讨论】:

    标签: google-cloud-platform google-cloud-storage google-cloud-dataflow apache-beam


    【解决方案1】:

    documentation Cloud Dataflow 目前不支持使用客户提供的加密密钥加密的对象。我开了一个feature request 来实现它。

    请注意,如果没有该加密密钥,您将无法在 Cloud Storage 中获取使用客户提供的加密密钥 (CSEK) 上传的文件。

    documentation

    如果您使用客户提供的加密密钥或客户端 加密,您必须安全地管理您的密钥并确保它们 没有丢失。如果您丢失了钥匙,您将无法再阅读 您的数据,并且您继续为对象的存储付费 直到你删除它们。

    如果我们还有 CSE 密钥,访问该文件的示例 Java 代码是:

    byte[] content = storage.readAllBytes(
        bucketName, blobName, BlobSourceOption.decryptionKey(decryptionKey));
    

    here 中描述了使用 CSEK 获取文件的所有其他可能方法。

    【讨论】:

    • 谢谢,但我需要从数据流(Apache Beam)中获取它。如果 apache beam 会从 google storage api 获取输入流,那也足够了,但我找不到这样做的方法
    • 真的很不幸,数据流没有开箱即用的方法来访问 GCS 中的加密文件。编写一些使用 google apis 库来获取流并将其作为值提供者呈现出来的东西可能不会太痛苦
    • 添加到这个好答案。即使您可以访问原始加密对象,数据块也不会使用 CSEK 加密。 CSEK 用于加密(包装)实际加密数据的原始块密钥 (DEK)。每个数据块使用不同的 DEK。
    猜你喜欢
    • 1970-01-01
    • 2019-08-10
    • 2022-01-25
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多