使用Google API时,身份验证范围错误不足

时间:2016-10-28 05:53:16

标签: google-api google-compute-engine google-api-php-client google-api-client

我将Google SDK设置为使用Application Default Credentials的Google API。对于我的本地计算机,创建了凭据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文件,就像我在本地机器上做的那样(工作正常)但它也没有用。

要注意,错误消息是关于范围但不是auth问题。如何使其在Compute Engine VM实例上运行?

提供客户端初始化代码:

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Pubsub::PUBSUB);

2 个答案:

答案 0 :(得分:7)

<强>更新

现在它受到支持。您必须停止实例才能更改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

答案 1 :(得分:2)

现在可以。您的实例必须已停止,然后可以通过编辑虚拟机页面或SDK中的控制台更改其范围列表:

gcloud compute instances stop [vmname] gcloud beta compute instances set-scopes [vmname] --scopes="[scopes list]"

请注意,使用SDK方式,第二个命令将使用列表中的范围重置。目前无法仅附加新范围。