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.objectViewer
将 storage.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
可用的数百个权限中的任何其他权限,而其他角色则缺少。
我有一个 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.objectViewer
将 storage.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
可用的数百个权限中的任何其他权限,而其他角色则缺少。