我有一个Github操作将我的源代码提交给Google 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
的角色并不存在——至少在我的角色列表中不存在。
一个小问题:
有没有办法检查给定的云操作需要什么角色?例如,在我的日志
storage.objects.get
中看到这一点,我想看看哪些角色可以访问它。
在GCP中的IAM角色上,确保已通过roles/storage.objectViewer
将storage.objects.get
添加到正确的用户/帐户。您可以在此处找到列出的所有IAM角色:https://cloud.google.com/storage/docs/access-control/iam-roles
如果所有角色都签出了,那么很可能是服务帐户的身份验证问题,只是使用旧的或不正确的凭据进行身份验证。
OP提到的另一个问题是引用角色roles/viewer
,它是项目所有资源中的查看器,而不是像roles/storage.objectViewer
这样更具体的查看器角色。
请注意,每个角色中的权限数量非常不同,roles/viewer
角色中可能有一个权限在roles/storage.objectViewer
中不可用,但这是构建工作所必需的。
我猜在某个时刻,帐户会尝试执行buckets.get
,由于roles/storage.objectViewer
角色没有明确的storage.buckets.get
权限,因此会出现访问错误。该权限授予roles/viewer
项目角色1。
无论如何,roles/viewer
角色可以通过这里的控制台找到,也可以通过带有以下命令的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
可用的数百个权限中的任何一个,也可能是其他角色缺少的权限。
对于您的次要问题,您可以直接从控制台使用IAM策略疑难解答。设置您的主体(电子邮件(、资源和权限。你会立刻知道它是否正常。
然而,正如DIGI所说,我知道你没有使用正确的凭据。