外部访问Google Cloud Datastore的权限被拒绝

时间:2019-02-11 11:51:44

标签: google-app-engine google-cloud-datastore google-cloud-storage

我想使用自己服务器上的Python程序通过google-cloud-datastore和google-cloud-storage访问AppEngine项目的数据存储(和存储)数据。

与我的AppEngine登台服务器一起使用,方法是创建一个服务帐户并授予其所有者对项目的访问权限。

对生产AppEngine实例执行相同操作失败

google.api_core.exceptions.PermissionDenied: 403 Missing or insufficient permissions.

部分问题可能是我使用了错误的项目来创建服务帐户。我的云控制台中有多个同名项目。如何识别正确的一个?

如何获得有关该问题的更多详细信息?

1 个答案:

答案 0 :(得分:0)

首先,请注意,数据存储区和云存储是2种不同的产品,具有2种不同的访问方法。

数据存储区与GAE项目紧密相关-每个项目都有自己的数据存储区。外部访问过程通常在How do I use Google datastore for my web app which is NOT hosted in google app engine?中捕获。

切换项目(从您的情况过渡到生产)时,请记住两点:

  • 如您所见,您需要更改正在访问的项目。

  • 您还需要更改加载的凭据并用于访问以匹配您选择的项目,因为每个项目在上述过程中都配置了自己的服务帐户密钥

对于google-cloud-datastore库,这两个参数都是通过datastore.Client()调用参数(重点是我的)同时配置的:

  

class google.cloud.datastore.client.Client( project = None ,   namespace = None,凭据= None ,_ http = None,_use_grpc = None)

     
      
  • 项目(str)–(可选)要传递给代理API方法的项目。
  •   
  • 凭据(凭据)–(可选)用于此客户端的OAuth2凭据。如果未传递(并且未传递_http对象),   退回到从环境推断的默认值。
  •   

Cloud Storage完全独立于GAE,您使用的GAE项目/凭据(如果有)与存储桶/对象访问限制没有任何关系。从一个GAE项目切换到另一个GAE项目,从google-cloud-storage库的角度来看,您无需执行任何操作

要消除由多个具有相同名称的项目造成的混乱,只需转到IAM & admin Settings页,从顶部蓝色栏上的下拉列表中选择相应的项目,然后使用有意义的名称对其进行重命名(单击Project name框中编辑名称,然后单击SAVE)。然后重新检查您是否为所需项目使用了正确的键。