Google Cloud API服务授权失败 - 禁止访问

时间:2018-03-25 12:34:53

标签: java google-cloud-platform google-cloud-datastore google-cloud-storage

尝试通过Java客户端访问Google云端服务时,我目前收到以下错误:

Caused by: 
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 
Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "xyz.iam.gserviceaccount.com does not have 
    storage.buckets.list access to project 123456.",
    "reason" : "forbidden"
  } ],
  "message" : "xyz.iam.gserviceaccount.com does not have 
storage.buckets.list access to project 123456."
}

到目前为止,我有:

  • 使用Google云帐户的登录详细信息安装并授权sdk
  • 将服务帐户xyz的GOOGLE_APPLICATION_CREDENTIALS添加到我的环境变量中,并带有json密钥的路径
  • 给定给定项目的服务帐户(xyz)权限(123456)
  • 启用对Storage API和Speech API(将来的目标目标)的权限

如何为给定项目的给定列表或api提供服务帐户的访问权限?

4 个答案:

答案 0 :(得分:2)

该消息非常具体,不会留下太多疑问,但如果出现问题,请分享当前分配给您的服务帐户的角色:

  

“xyz.iam.gserviceaccount.com没有       storage.buckets.list访问项目123456。“

您在https://console.cloud.google.com/iam-admin/iam/project中分配给服务帐户的角色可能没有storage.buckets.list访问权限。

要查看特定角色是否具有storage.buckets.list访问权限,请在https://console.cloud.google.com/iam-admin/roles中搜索访问权限。这将输出具有此访问权限的角色列表,您可以查看您的服务帐户是否具有其中一个。

答案 1 :(得分:1)

也可能是您设置了一个不存在的项目。例如,通过在gcloud cli gcloud config set project personal上运行以下命令,而项目的实际ID为personal-267000,如下所示

gcloud projects list | grep personal personal-267000 personal 203784673875

因此,gcloud config set project personal-267000正确设置后,您的命令应该可以正常工作。测试最简单的方法是触发以下cli命令gsutil ls。不要忘记确保您也使用了想要的帐户:gcloud config configurations list

答案 2 :(得分:0)

如果您项目中使用的存储桶,您可以随时尝试以您的用户身份运行gsutil ch command

gsutil acl ch -u your-service-account@example.com:WRITE gs://your-bucket

答案 3 :(得分:0)

您需要为服务帐户提供“存储管理员”访问权限。可以在https://console.cloud.google.com/iam-admin/iam?project={your-project}

中找到

单击“继承”下的铅笔以编辑权限。