ERROR: (gcloud.builds.submit) HTTPError 403: *** does not have storage.objects.get access to the Google Cloud Storage object

ERROR: (gcloud.builds.submit) HTTPError 403: *** does not have storage.objects.get access to the Google Cloud Storage object

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

但是 Github 操作退出时出现错误。这是错误消息:

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 的角色不存在 - 至少不在我的角色列表中。

一个小问题:

Is there a way to check what role is needed for a given cloud action? For example seeing this in my logs storage.objects.get I'd like to see what roles do provide access to this.

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

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

对于你这边的问题,你可以直接从控制台使用 IAM Policy troubleshooter。设置您的主体(电子邮件)、资源和权限。行不行你马上就知道了

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

OP 提到的另一个问题是引用角色 roles/viewer, which is viewer in all resources for a project, rather than a more specific viewer role like 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 可用的数百个权限中的任何其他权限,而其他角色则缺少。