最佳实践 - 使用受限服务帐户将无界 PCollection 写入 GCS 存储桶

试图使我的问题尽可能广泛:

使用 TextIO 将无界 PCollection 写入 GCS 存储桶时,同时使用具有最小权限原则且没有 GCS 删除访问权限的服务帐户,数据流中会出现以下错误:

Error trying to copy gs://[Temporary beam file] to gs://[JSON We expect]: {"code":403,"errors":[{"domain":"global","message":"[Service Account] does not have storage.objects.delete access to [JSONFile]","reason":"forbidden"}],"message":"[Service Account] does not have storage.objects.delete access to [JSON File]"}

考虑到我们不允许服务帐户对我们正在使用的存储桶进行删除访问,并且数据流管道正在尝试清理文件碎片,上述错误是有道理的。

然而,问题是,此时的最佳做法是提供对数据流服务帐户的删除访问权限并继续使用 TextIO?还是在我们想要摄取的 PCollection 上使用 DoFn 并使用 DoFn 使用 GCS API 将每个单独的元素逐步写入 GCS 存储桶会更好吗?从而颠覆了碎片清理的问题。


BIG阳
浏览 74回答 1
1回答

翻翻过去那场雪

有一个withTempDirectory功能TextIO应该允许您将临时存储桶设置为服务帐户具有更高权限的存储桶。我相信这TextIO会将文件放入tempLocation您的管道中。您可以将tempLocation管道设置在安全性不那么关键的存储桶中,并将结果写入安全存储桶。如果这些替代方案中的任何一个有帮助,LMK。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java