【问题标题】:Permission denied on external access to Google Cloud Datastore拒绝外部访问 Google Cloud Datastore 的权限
【发布时间】:2019-02-11 11:51:44
【问题描述】:

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

这适用于我的 AppEngine 暂存服务器,方法是创建一个服务帐户并为其授予所有者访问权限(对项目)。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    首先,请注意,Datastore 和 Cloud Storage 是两种不同的产品,具有两种不同的访问方式。

    数据存储区与 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, credentials=None, _http=None, _use_grpc=None)

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

    云存储完全独立于 GAE,您使用的 GAE 项目/凭据(如果有)与存储桶/对象访问限制无关。从一个 GAE 项目切换到另一个 GAE 项目时,您无需从 google-cloud-storage 库的角度做任何事情

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

    【讨论】:

    • 我知道数据存储和云存储是两种不同的产品,但我在数据存储中存储了对 blob(在云存储中)的引用。我使用 GOOGLE_APPLICATION_CREDENTIALS 来设置密钥文件。正如我在帖子中所说,我的代码(和关键文件)在登台服务器(一个自己的 AppEngine 项目)上工作。所以我的问题可能与生产项目的密钥文件有关。一个问题是我有几个同名的项目(无论出于何种原因)。我尝试了用于查看日志的 AppEngine 项目的密钥文件,但没有成功。
    • 我认为您需要项目 ID(这是唯一的),而不是名称:console.cloud.google.com/iam-admin/settings
    • 我从 AppEngine 仪表板中获取了项目 ID,为该项目 ID 创建了一个自己的服务帐户,创建了一个 JSON 密钥,并为 IAM 赋予了项目所有者角色。 (这与我为它工作的登台项目所做的相同)。问题是,我的权限被拒绝了。
    • 实际上 Google Cloud Storage API 可以使用密钥,但 Google Datastore 访问却不能。
    • 我理解这个概念,但我仍然不知道哪个项目在做什么(以及我是否仍然需要所有这些)。无数服务帐户和密钥也存在同样的问题
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 2021-04-19
    • 2016-06-02
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多