4

我將Google SDK設置爲使用Google API Application Default Credentials。對於我的本地機器,創建一個憑據json文件並將其路徑設置爲GOOGLE_APPLICATION_CREDENTIALS作爲環境變量。這是按預期工作,沒有問題。使用Google API的認證範圍錯誤不足

然而,當應用程序部署到谷歌雲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); 

回答

4

原來,我不得不啓用對谷歌雲端控制檯服務VM實例細節雲API訪問範圍:https://console.cloud.google.com/compute/instances

不幸的是,我不能沒有改變,因爲Google雲暫時不支持它。我不得不啓動一個新實例來啓用服務API訪問。 https://googlecloudplatform.uservoice.com/forums/302595-compute-engine/suggestions/13101552-ability-to-change-cloud-api-access-scopes-on-launc

+0

看來,截至2016年12月,您可以更改停止的VM上的訪問範圍。現在有關此鏈接的回覆:https://googlecloudplatform.uservoice.com/forums/302595-compute-engine/suggestions/13101552-ability-to-change-cloud-api-access-scopes-on-launc –

2

現在有可能。您的實例必須停止,然後它可以有它的範圍列表從控制檯在編輯VM頁面改變,或者在SDK中使用:

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

要知道,與SDK的方式,第二個命令將使用列表中的範圍重置。目前還不具備僅追加新範圍的功能。

相關問題