Google 云 API 服务授权失败 - 禁止访问
Google Cloud API Service authorisation failure - forbidden access
我目前在尝试通过 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 密钥的路径
- 给定项目 (123456) 的服务帐户 (xyz) 权限
- 已启用对存储 API 和语音 API 的权限(未来的预期目标)
如何为给定列表或api为给定项目提供对服务帐户的访问权限?
如果正在使用的存储桶在您的项目中,您可以随时尝试 运行 gsutil ch
command 作为您的用户:
gsutil acl ch -u your-service-account@example.com:WRITE gs://your-bucket
该消息非常具体,没有留下太多疑问,但如果有问题,请分享当前分配给您的服务帐户的角色:
"xyz.iam.gserviceaccount.com does not have
storage.buckets.list access to project 123456."
可能是您在 https://console.cloud.google.com/iam-admin/iam/project
中分配给服务帐户的角色没有 storage.buckets.list
访问权限。
要查看特定角色是否具有 storage.buckets.list
访问权限,请在 https://console.cloud.google.com/iam-admin/roles
中搜索 访问权限。这将输出具有此访问权限的角色列表,您可以查看您的服务帐户是否具有其中之一。
也有可能是你设置的项目不存在。例如,通过 运行 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
您需要为服务帐户提供“存储管理员”访问权限。这可以在 https://console.cloud.google.com/iam-admin/iam?project={your-project}
中找到
单击“继承”下的铅笔以编辑权限。
我目前在尝试通过 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 密钥的路径
- 给定项目 (123456) 的服务帐户 (xyz) 权限
- 已启用对存储 API 和语音 API 的权限(未来的预期目标)
如何为给定列表或api为给定项目提供对服务帐户的访问权限?
如果正在使用的存储桶在您的项目中,您可以随时尝试 运行 gsutil ch
command 作为您的用户:
gsutil acl ch -u your-service-account@example.com:WRITE gs://your-bucket
该消息非常具体,没有留下太多疑问,但如果有问题,请分享当前分配给您的服务帐户的角色:
"xyz.iam.gserviceaccount.com does not have storage.buckets.list access to project 123456."
可能是您在 https://console.cloud.google.com/iam-admin/iam/project
中分配给服务帐户的角色没有 storage.buckets.list
访问权限。
要查看特定角色是否具有 storage.buckets.list
访问权限,请在 https://console.cloud.google.com/iam-admin/roles
中搜索 访问权限。这将输出具有此访问权限的角色列表,您可以查看您的服务帐户是否具有其中之一。
也有可能是你设置的项目不存在。例如,通过 运行 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
您需要为服务帐户提供“存储管理员”访问权限。这可以在 https://console.cloud.google.com/iam-admin/iam?project={your-project}
中找到单击“继承”下的铅笔以编辑权限。