Application Default Credentials でGoogle APIを使用するようにGoogle SDKを設定しました。私のローカルマシンでは、認証情報の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スコープを変更するには、インスタンスをstopする必要があります。 https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
元の答え
VMインスタンスの詳細: https://console.cloud.google.com/compute /インスタンス
残念ながら、現時点では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の方法では、2番目のコマンドがリストのスコープでリセットされることに注意してください。現在、新しいスコープを追加するだけの機能は利用できません。