身份验证范围不足错误使用 Google API
Insufficient authentication scopes error using Google API
我设置 Google SDK 以使用 Google API 和 Application Default Credentials。对于我的本地计算机,创建了一个凭据 json 文件并将其路径设置为 GOOGLE_APPLICATION_CREDENTIALS
作为环境变量。这按预期工作,没有问题。
但是,当应用程序部署到 Google Cloud VM 时,会抛出以下错误:
[Google_Service_Exception]
{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"errors": [
{
"message": "Request had insufficient authentication scopes.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
根据documentation,内置服务帐户应该与虚拟机实例相关联。为了让它工作,我尝试像在本地机器上那样使用凭据 json 文件(工作正常),但它也没有工作。
请注意,错误消息是关于范围的,而不是授权问题。如何使其在 Compute Engine VM 实例上运行?
给客户端初始化代码:
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Pubsub::PUBSUB);
更新
现已支持。您必须 停止 实例才能更改 API 范围。
https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
原回答
事实证明,我必须为 Google Cloud Console 上的服务启用 Cloud API 访问范围以获得 VM 实例详细信息:https://console.cloud.google.com/compute/instances
很遗憾,我无法更改它,因为 Google Cloud 目前不支持它。我必须启动一个新实例才能启用服务 API 访问权限。
https://googlecloudplatform.uservoice.com/forums/302595-compute-engine/suggestions/13101552-ability-to-change-cloud-api-access-scopes-on-launc
现在可以了。您的实例必须 stopped 然后它可以在编辑 vm 页面的控制台中更改其范围列表,或者在 SDK 中使用 :
gcloud compute instances stop [vmname]
gcloud beta compute instances set-scopes [vmname] --scopes="[scopes list]"
请注意,使用 SDK 方式,第二条命令将使用列表中的范围进行重置。目前不具备仅附加新范围的能力。
我设置 Google SDK 以使用 Google API 和 Application Default Credentials。对于我的本地计算机,创建了一个凭据 json 文件并将其路径设置为 GOOGLE_APPLICATION_CREDENTIALS
作为环境变量。这按预期工作,没有问题。
但是,当应用程序部署到 Google Cloud VM 时,会抛出以下错误:
[Google_Service_Exception]
{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"errors": [
{
"message": "Request had insufficient authentication scopes.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
根据documentation,内置服务帐户应该与虚拟机实例相关联。为了让它工作,我尝试像在本地机器上那样使用凭据 json 文件(工作正常),但它也没有工作。
请注意,错误消息是关于范围的,而不是授权问题。如何使其在 Compute Engine VM 实例上运行?
给客户端初始化代码:
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Pubsub::PUBSUB);
更新
现已支持。您必须 停止 实例才能更改 API 范围。 https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
原回答
事实证明,我必须为 Google Cloud Console 上的服务启用 Cloud API 访问范围以获得 VM 实例详细信息:https://console.cloud.google.com/compute/instances
很遗憾,我无法更改它,因为 Google Cloud 目前不支持它。我必须启动一个新实例才能启用服务 API 访问权限。 https://googlecloudplatform.uservoice.com/forums/302595-compute-engine/suggestions/13101552-ability-to-change-cloud-api-access-scopes-on-launc
现在可以了。您的实例必须 stopped 然后它可以在编辑 vm 页面的控制台中更改其范围列表,或者在 SDK 中使用 :
gcloud compute instances stop [vmname]
gcloud beta compute instances set-scopes [vmname] --scopes="[scopes list]"
请注意,使用 SDK 方式,第二条命令将使用列表中的范围进行重置。目前不具备仅附加新范围的能力。