我创建了一个服务号,并将Dataflow开发人员角色、Compute Viewer角色和Storage Object Admin角色分配给临时存储桶。然后,我使用我的管理员用户帐户(具有项目所有者角色)创建了另一个存储桶,名为gs://outputbucket。最后,我提交了一个带有以下cmd的数据流作业:
export GOOGLE_APPLICATION_CREDENRTIALS=<path-to-credential>
TMPBUCKET=temporarybucket
OUTBUCKET=outputbucket
PROJECT=myprojectid
python -m apache_beam.examples.wordcount \
--input gs://dataflow-samples/shakespeare/kinglear.txt \
--output gs://$OUTBUCKET/wordcount/outputs \
--runner DataflowRunner \
--project $PROJECT \
--temp_location gs://$TMPBUCKET/tmp/
同样,我创建了一个从现有的Cloud Pub/Sub到BigQuery模板的数据流作业。它可以在未经许可的情况下写入同一项目中的任何表。有人能解释这怎么可能吗?
此外,根据Google的最小权限原则,这是否是一个潜在的安全问题?
与此命令一起使用的服务号
export GOOGLE_APPLICATIONS_CREDENRTIALS=<path-to-credential>
用于创建Dataflow管道,但管道工作人员不使用它。
为此,您必须按照此处所述在管道选项中添加服务号电子邮件。如果没有,则使用的是计算引擎服务号。
这取决于您使用什么服务号来运行作业或用户(我猜)
根据Google文档Dataflow控制器服务帐户,默认情况下,工作人员使用项目的计算引擎服务号作为控制器服务号。