使用Google api客户端php和JSON凭据的Google云存储,但在一段时间后出现403错误

使用Google api客户端php和JSON凭据的Google云存储,但在一段时间后出现403错误,php,sdk,google-cloud-storage,google-cloud-platform,http-status-code-403,Php,Sdk,Google Cloud Storage,Google Cloud Platform,Http Status Code 403,我正在尝试使用Google api客户端php SDK提供的Google云存储服务和JSON凭据,并应用如下示例代码: putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json"); $client = new Google_Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google_Service_Sto

我正在尝试使用Google api客户端php SDK提供的Google云存储服务和JSON凭据,并应用如下示例代码:

putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json");
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Storage::DEVSTORAGE_FULL_CONTROL);

$storage = new Google_Service_Storage($client);
$ret = $storage->buckets->listBuckets("project-id");
但是,在我创建凭证的最初几个小时后,这些代码是正常的,但在几个小时后,我仍然收到相同代码/凭证文件的“权限被拒绝”错误

PHP Fatal error:  Uncaught exception 'Google_Service_Exception' with message '{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "forbidden",
    "message": "Forbidden"
   }
  ],
  "code": 403,
  "message": "Forbidden"
 }
}

我不知道这是代码级别还是服务级别的问题

确保您的服务帐户在GCP中具有正确的权限:

在控制台中,转到:

Api管理器>凭据>管理服务帐户>权限>添加成员


在弹出屏幕上,粘贴您的服务帐户的电子邮件地址,并为其提供“可编辑”访问权限。这样就可以了。

您使用的服务帐户是否可能不是具有“项目id”的项目成员?否。此服务帐户由项目所有者创建,并且此服务帐户在创建后的前几个小时内有效。能否检查此服务帐户是否对bucket/对象具有权限?我认为默认bucket权限已授予所有项目所有者,不是吗?我正在开始列表桶操作。此外,此错误是突然发生的,相同的代码/凭证工作正常,直到创建服务帐户的几个小时后。