程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cloud Build 服务帐号无权访问 storage.objects.get大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Cloud Build 服务帐号无权访问 storage.objects.get?

开发过程中遇到Cloud Build 服务帐号无权访问 storage.objects.get的问题如何解决?下面主要结合日常开发的经验,给出你关于Cloud Build 服务帐号无权访问 storage.objects.get的解决方法建议,希望对你解决Cloud Build 服务帐号无权访问 storage.objects.get有所启发或帮助;

我正在尝试使用 Google Cloud Functions 从存储桶中的文件打印某些内容。 我将文件存储在一个存储桶中,一个经过身份验证的服务帐户,其中包含 Storage adminCloud Run adminservice Account UserCloud Functions admin 以及以下 python 脚本。

def from_storage(event,context):
    import Json
    from Google.cloud import storage

    clIEnt = storage.ClIEnt(project='my-project')
    try:
        bucket = clIEnt.geT_Bucket('my-storage')
    except Exception as e:
        print('Bucket not found.')
        print(E)
    try:
        blob = bucket.blob('Hello_World.Json')
        data = Json.load(blob.download_as_String())
        return data
    except Exception as e:
        print('Error loading file:')
        print(E)

我尝试使用以下代码部署它:

gcloud functions deploy from_storage --runtime python39 --triger-http --allow-unauthenticated

我收到一个错误消息,即正在部署的服务帐户(似乎是一个自动创建的服务帐户)没有 storage.objects.get 权限:

ERROR: (gcloud.functions.deploy) OperationError: code=3,message=Build Failed: Could not resolve storage source: GoogleAPI: Error 403: 488395598433@cloudbuild.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object.,forbIDden

我觉得这很奇怪,因为我在 IAM 中看不到此服务帐户,也无法在 Cloud Functions 中访问其权限。任何帮助将不胜感激!

解决方法

我猜 488395598433@cloudbuild.gserviceaccount.com - 是一个 Cloud Build 服务帐户,其中前缀(数字)是运行 Cloud Build 的项目的编号。您能检查一下 Cloud Build API 是否已启用吗?并且 Cloud Build 服务帐户具有相关权限,好吗?

在运行时,默认情况下,云函数在 PROjeCT_ID@appspot.gserviceaccount.com 服务帐户下运行,其中 PROjeCT_ID 是项目的 ID,该云函数在其中部署(并且应该运行)。这是 App ENGIne 默认服务帐户。

可以(并推荐)根据最小权限原则创建专用服务帐户。在这种情况下,您可以使用相应的参数部署云函数(不在您的示例中)。

据我对您的特定示例的最佳理解,将使用默认的 App ENGIne 服务帐户。

无论哪种情况,云函数运行时服务帐户都应具有相关权限(IAM 权限/角色)以使用 API 和资源(在任何项目中)。

请问云函数运行时服务账号是否有访问云存储桶的相关权限?请记住,云功能可能部署在一个项目中,而存储桶可能在另一个项目中

在您的帖子中,您提到您有一个“经过身份验证的服务帐户”,具有某些权限。如果您使用默认的 App ENGIne 帐户部署服务帐户,那么该服务帐户的用途是什么?可能我错过了什么。 “为了使用非默认服务帐户部署函数,部署者必须对正在部署的服务帐户具有 iam.serviceAccounts.actAs 权限。” - 来自 Permissions required to use non-default identities 如果您是这种情况 - 请您也检查一下好吗?

,

如果您在其他服务帐户中看不到“xxxxxxxxxxxx@cloudbuild.gserviceaccount.com”。因此,我认为在激活 Cloud Build API 时出了点问题。您能否先禁用 Cloud Build API,然后重新启用它,看看是否能解决问题?

如果在重新启用 Cloud Build API 后仍然看不到其服务帐户,请通过“IAM & Admin”->“IAM”页面手动添加它,授予其 Cloud Build 服务帐户角色。

> ,


Configure Access for Cloud Build service Account 和此 link 解释了自动创建的 Cloud Build 服务帐户开始时的权限(在自动创建时授予)。

根据我的经验以及我猜测的幕后情况,我收到了这个错误,您可能也遇到了,因为您是第一次使用 Cloud Build 服务。所以我在第一次运行脚本时遇到了错误,但是在后续运行中错误消失了。这意味着在服务器上授予权限需要时间。

大佬总结

以上是大佬教程为你收集整理的Cloud Build 服务帐号无权访问 storage.objects.get全部内容,希望文章能够帮你解决Cloud Build 服务帐号无权访问 storage.objects.get所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: