java - 将服务帐户与 Dataflow 一起使用 - 获取 storage.objects.get 访问错误
问题描述
我正在尝试从项目A到项目B运行数据流作业。
我可以毫无问题地执行项目 B 中的作业,但是当我尝试从项目 A 的存储中读取输入文件时,作业失败并显示“xxxxx-compute@developer.gserviceaccount.com 没有 storage.objects.get 访问 gs ://xxxx-桶”
这很奇怪,因为我在 Dataflow 作业选项中设置服务帐户凭据,如下所示:
Set<String> scopeList = new HashSet<String>();
scopeList.addAll(DataflowScopes.all());
PipelineOptionsFactory.register(CustomOptions.class);
CustomOptions customOptions = PipelineOptionsFactory.fromArgs(args)
.withValidation()
.as(CustomOptions.class);
customOptions.setGcpCredential(GoogleCredentials.fromStream(new ByteArrayInputStream(credentialContent.getBytes())).createScoped(scopeList));
看起来之前的代码没有做任何事情,因为错误中显示的凭据是计算服务帐户,与我在管道选项中设置的不同。
也许我做错了什么。
数据流代码中服务帐户的权限是:
- 数据流管理员
- 数据流工作者
- 服务帐号用户
- 存储管理员
所有这些权限都在项目 B 中。这就是为什么我可以毫无问题地执行从项目 A 到项目 B 的数据流作业。
解决方案
推荐阅读
- c - Glob 中的“未排序”订单从何而来?
- php - 向 FCM API 发送请求时收到无效的 JSON 有效负载
- android - 带有通知和嵌套多个图的 Jetpack 导航图问题
- python - 如果正则表达式不匹配,则在 pandas str.extract() 之后保留原始字符串值
- laravel - 我无法访问附加到数据透视表的数组?
- python - 在 1000 个类别的 imagenet 数据集上重新训练 Vgg16 keras 模型,从而降低预训练权重的准确性
- python - 将子图保存为图像?怎么做
- c++ - 如何在 CComboBoxEx 中获取当前选定的文本?
- ruby-on-rails - 每月第一个星期四运行 rake 任务的 Cron 表达式
- c# - 从 appservice 调用 Azure webjob