我正在尝试通过DataFlow将数据从Google Cloud Pub / Sub发送到Google Cloud Storage存储桶。我使用模板创建了DataFlow。
当我使用默认权限设置存储桶时,我在作业日志中收到一条警告,“ somelong# -compute@developer.gserviceaccount.com没有storage.objects.get访问权限。 ..”,并且没有数据出现在存储桶中。
我向项目成员的查看者添加了“数据流管理员”权限,该警告消失了。
似乎该过程正在写入存储桶,大部分只是在查看它,所以我对a)为什么解决了我的问题感到困惑,b)不确定这是否是正确/适当的使用许可。
任何信息将不胜感激。
答案 0 :(得分:1)
somelong#-compute@developer.gserviceaccount.com
“ somelong#”是您的项目的项目编号。
我向项目成员的查看者添加了“数据流管理员”权限, 然后警告消失了。
角色roles/viewer
有权列出存储桶,但不能访问存储桶中的对象。
根据所提供的信息,我不确定您到底做了什么以及在哪里做了。如果您将角色roles/dataflow.admin
添加到每个用户或下面的用户所在的组,则可以。如果用户需要创建数据流作业并访问生成的数据,则数据流管理员是正确的角色。但是,缺少的是从何处启动这些作业。可能来自Compute实例,这就是为什么错误中列出了服务帐户的原因。服务帐户也需要权限。正如他们所说,答案在于细节,而您的问题缺少一些。
如果从Compute Engine实例启动Dataflow作业,则Compute Engine默认服务帐户(与您的错误消息中的帐户相同)需要Dataflow和Cloud Storage权限。 Dataflow.admin将授予服务帐户所需的权限。
如果数据流作业是从云(某人的桌面)外部启动的,则该用户的IAM成员帐户需要权限。
要查看角色具有的权限,可以使用CLI:
gcloud iam roles describe roles/dataflow.admin
这将返回以下信息。导入项目是权限列表:
description: Minimal role for creating and managing dataflow jobs.
etag: AA==
includedPermissions:
- compute.machineTypes.get
- dataflow.jobs.cancel
- dataflow.jobs.create
- dataflow.jobs.get
- dataflow.jobs.list
- dataflow.jobs.updateContents
- dataflow.messages.list
- dataflow.metrics.get
- resourcemanager.projects.get
- resourcemanager.projects.list
- storage.buckets.get
- storage.objects.create
- storage.objects.get
- storage.objects.list
name: roles/dataflow.admin
stage: GA
title: Dataflow Admin
从此列表中,您可以看到您授予某人/某物权限来创建,获取和列出存储桶中的对象。如果要求仅提供存储权限,则添加角色roles\storage.legacyBucketWriter
。