如何解决Google云功能无法访问GCS存储桶中的数据
我有一个云功能正在触发数据流。对于此过程,应获取保存在gcs存储桶中的数据流模板。
使用具有编辑者角色的默认服务帐户(链接到云功能),我可以提取此文件。 但是,如果使用具有以下角色的自定义服务帐户,则会显示403状态。
Cloud Build Service Account
Cloud Build Service Agent
Cloud Functions Service Agent
Container Registry Service Agent
Dataflow Developer
Storage Object Admin
我得到的错误是
2020-10-21 11:14:20.820 WARN 1 --- [p2094777811-167] .a.b.s.e.g.u.RetryHttpRequestInitializer : Request failed with code 403,performed 0 retries due to IOExceptions,performed 0 retries due to unsuccessful status codes,HTTP framework says request can be retried,(caller responsible for retrying): https://dataflow.googleapis.com/v1b3/projects/<project id>/locations/australia-southeast1/templates:launch?gcsPath=gs://<path>/templates/i-template.
我错过任何角色吗?请帮忙
解决方法
该错误消息表示您没有执行该操作所需的权限:
RetryHttpRequestInitializer:请求失败,代码为403,由于IOExceptions,执行了0次重试,由于状态代码不成功,执行了0次重试,HTTP框架表示可以重试该请求,(调用方负责重试):https://dataflow.googleapis.com/v1b3/projects/ / locations / australia-southeast1 / templates:launch?gcsPath = gs:/// templates / i-template。
您提到,通过使用Editor
角色,您可以执行操作而不会出现问题。这是因为,作为 Editor ,您可以在绝大多数资源上完成许多任务:查看者权限,以及修改状态的操作(例如更改现有资源)的权限。
您可以参考此documentation,以获取有关基本角色定义的更多信息。
现在,您可以将权限范围缩小到最小权限集,这将使您可以更好地控制每个资源。为此,我建议您添加Cloud Functions Developer
和Dataflow Admin
角色。
作为CF开发人员,您将完全有权使用功能,操作和位置。然后, Dataflow Admin 角色包含创建和管理数据流作业的所有必要权限,还包含一些Cloud Storage权限,例如 storage.buckets.get 和创建,获取和列出对象。
最后,请确保您对触发源(即云存储)具有必要的权限,并且使用Storage Admin
就足够了。
请注意,您始终可以通过查看每种Google Cloud资源的predefined roles表来仔细检查您的角色及其权限,以防您需要进一步缩小范围。
,如果您要授予存储对该服务帐户的读取访问权限(假设您没有使用fine grained permissions),则至少缺少该帐户的Storage Object Viewer role
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。