【问题标题】:ERROR: (gcloud.builds.submit) HTTPError 403: *** does not have storage.objects.get access to the Google Cloud Storage object错误:(gcloud.builds.submit)HTTPError 403:***没有 storage.objects.get 访问 Google Cloud Storage 对象
【发布时间】:2021-07-07 16:30:13
【问题描述】:

我有一个 Github Action 可以将我的源代码提交到 Google Cloud Build。提交确实有效。正在触发 Cloud Build 作业。

但是,Github Action 退出并出现错误。这是错误信息:

ERROR: (gcloud.builds.submit) HTTPError 403: <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>*** does not have storage.objects.get access to the Google Cloud Storage object.</Details></Error>

我正在使用自定义服务帐户。这些是我分配给它的角色。我不知道为什么仍然会抛出错误。

Cloud Build Service Account
Cloud Build Viewer
Environment User and Storage Object Viewer
Cloud Storage for Firebase Viewer
Storage Object Viewer

我在另一个问题中读到,此问题已通过提供角色 Viewer 得到解决,但一个名为 Viewer 的角色不存在 - 至少在我的角色列表中不存在。

一个小问题:

有没有办法检查给定的云操作需要什么角色?例如在我的日志中看到这个storage.objects.get 我想看看哪些角色确实提供了对此的访问权限。

【问题讨论】:

  • roles/viewerthis documentation 中有解释。
  • 也可以在控制台here看到角色。
  • @Jofre 这实际上是解决方案!我不明白发生了什么。为什么它可以与“查看器”一起使用,但不能与“存储对象查看器”甚至“存储管理员”一起使用?我无法理解其背后的概念
  • 我正在添加一个包含一些信息的答案。

标签: google-cloud-platform google-cloud-storage google-cloud-build


【解决方案1】:

在 GCP 中的 IAM 角色上,确保您已通过 roles/storage.objectViewerstorage.objects.get 添加到正确的用户/帐户。 您可以在此处找到所有 IAM 角色:https://cloud.google.com/storage/docs/access-control/iam-roles

如果所有角色都签出,则很可能是服务帐户的身份验证问题,只是使用旧的或不正确的凭据进行身份验证。

【讨论】:

  • 不正确的凭据是什么意思?我正在通过 Github Actions 使用服务帐户并使用服务帐户密钥。我没有更改密钥 - 正如我所说,提交到云运行工作正常。怎么可能只有一件事可以在这里工作?正如您在上面看到的,我已经设置了“存储对象查看器”角色。这应该足够了吧?
【解决方案2】:

OP 提到的另一个问题是引用角色 roles/viewer,它是项目所有资源中的查看者,而不是像 roles/storage.objectViewer 这样更具体的查看者角色。

请注意,每个角色中的权限数量非常不同,roles/viewer 角色中可能存在roles/storage.objectViewer 中不可用的权限,但它是构建工作所必需的。

我猜在某个时候该帐户会尝试执行buckets.get,并且由于roles/storage.objectViewer 角色没有明确的storage.buckets.get 权限,因此会出现访问错误。该权限由 roles/viewer 项目角色 1 授予。

无论如何,roles/viewer 角色可以通过控制台here 找到,或者通过 SDK 使用类似这样的命令:

gcloud iam service-accounts add-iam-policy-binding <YOUR_SERVICE_ACCOUNT>@<YOUR_PROJECT>.iam.gserviceaccount.com --member='<YOUR_SERVICE_ACCOUNT>@<YOUR_PROJECT>.iam.gserviceaccount.com' --role='roles/viewer'

1 我只是在猜测,但缺少的权限可能是 roles/viewer 可用的数百个权限中的任何其他权限,并且其他角色缺少。

【讨论】:

    【解决方案3】:

    对于您的问题,您可以直接从控制台使用IAM Policy troubleshooter。设置您的主体(电子邮件)、资源和权限。您将立即知道是否可以。

    但是,正如 DIGI 所说,我知道您没有使用正确的凭据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2021-04-24
      • 2018-12-26
      • 1970-01-01
      • 2022-10-31
      • 2018-01-18
      • 2021-04-14
      相关资源
      最近更新 更多