Cloud Build服务帐户无法访问storage.objects.get

尼尔斯·乌特迪克(Niels Uitterdijk)

我正在尝试使用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: [email protected] does not have storage.objects.get access to the Google Cloud Storage object., forbidden

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

然后

我猜想[email protected]-是Cloud Build服务帐户,前缀(数字)是运行Cloud Build的项目的编号。您能否检查Cloud Build API是否已启用?并且Cloud Build服务帐户具有相关权限,好吗?

在运行时中,默认情况下,云功能在[email protected]服务帐户下运行,其中PROJECT_IDs是项目的ID,该云功能在其中部署(并应运行)。这是App Engine的默认服务帐户。

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

据我对您的特定示例的全面了解,将使用默认的App Engine服务帐户。

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

您能否检查云功能运行时服务帐户是否具有访问云存储桶的相关权限?请记住,云功能可能会部署到一个项目中,而存储桶可能会在另一个项目中。

在您的帖子中,您提到您拥有“具有某些权限的经过身份验证的服务帐户”。如果您使用默认的App Engine帐户部署服务帐户,该服务帐户是做什么用的?可能我错过了一些东西。“为了使用非默认服务帐户部署功能,部署人员必须iam.serviceAccounts.actAs对正在部署的服务帐户具有权限。” -使用非默认身份所需的权限-如果是这种情况-请您也检查一下吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

服务帐户没有对Google Cloud Storage的storage.objects.get访问权限

结合使用服务帐户和数据流-获取storage.objects.get访问错误

错误:匿名呼叫者没有storage.objects.get访问Google Cloud Storage对象

带有Java中的服务帐户的Google Cloud Storage-403调用者没有对bucket的storage.objects.list访问权限

Cloud ML Service帐户无法访问Cloud Storage,并且未在IAM和管理面板中列出

Cloud Dataproc无法访问Cloud Storage存储桶

无法使用默认服务帐户和Google云库从Google Kubernetes Engine访问Google Cloud Storage

通过Python中的服务帐户访问Google Cloud Storage的权限

创建符号链接后,Laravel Storage :: get无法访问

没有 storage.objects.get 访问权限

带有错误的Google Cloud Storage“上传无法完成”:错误:“ storage.objects.create”

无法访问MS Cloud API

Sequelize无法访问GCP Cloud SQL

无法访问 Cloud Firestore 中的阵列

Google Cloud run 无法访问 Cloud SQL

在 Pivotal Cloud Foundry 中创建服务代理时无法访问“计划”部分

AccessDeniedException:403 没有 storage.buckets.get 访问 Google Cloud Storage 存储桶的权限

使用带有boto的服务帐户通过gcs_oauth2_boto_plugin访问GAE中的Cloud Storage

从Google Cloud Storage提供Google客户服务帐户的keyFilename

Google Cloud Datastore 和服务帐户:限制访问权限

StorageException:匿名调用者没有storage.objects.get访问权限

Capybara / Poltergeist无法访问服务器(连接被拒绝+ GET'/ identify')

无法使用gcloud和服务帐户(403)运行Firebase测试实验室测试,没有storage.objects.create

Google Cloud Composer(Apache Airflow)无法访问日志文件

已安装Google Cloud SDK,但无法访问gcloud

Cloud Explorer-无法访问开发Blob容器

为什么我无法访问 GCP active cloud shell?

无法访问Docker容器中的Spring Cloud Config

无法访问Google Cloud Compute实例外部IP