如何使用Python3.7在Google App Engine标准环境上为Google云存储签名url?

tch*_*udo 7 google-app-engine python-3.x google-cloud-storage

我找不到一种方法可以在使用 Python3.7 的 Google App Engine 标准环境中获得有效的签名网址。

我在这里查看了文档: https: //cloud.google.com/storage/docs/access-control/signing-urls-manually

在 Google App Engine 应用程序中,您可以使用App Engine App Identity服务对字符串进行签名。

但是 App Engine App Identity 依赖于google.appengine包,在 python 3.7 env 上不可用,如此处解释

专有 App Engine API 在 Python 3 中不可用。本节列出了推荐的替代品。

总体目标是您的应用程序应该完全可移植并在任何标准 Python 环境中运行。您编写的是标准 Python 应用程序,而不是 App Engine Python 应用程序。作为这一转变的一部分,您不再需要为应用程序的核心功能使用专有的 App Engine API 和服务。目前,App Engine API 在 Python 3.7 运行时中不可用。

sdk 上的所有 api 都依赖于google.appenginepython 3.7 env 并引发异常:在此处EnvironmentError('The App Engine APIs are not available.')引发 依赖于专有 api 的异常:

try:
    from google.appengine.api import app_identity
except ImportError:
    app_identity = None
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用许多解决方案,ServiceAccountCredentials.from_json_keyfile_dict(service_account_dict)但我必须直接在应用程序引擎上上传带有凭据的文件,但我无法执行此操作,因为项目凭据将在 git 或 ci 上公开。

我真的很想依赖应用程序引擎的默认凭据,就像其他 Google Cloud api 一样,storage.Client()例如开箱即用的。

有什么建议吗?

Paw*_*ara 1

对于与 Google Cloud 的 Python 交互,请使用App Engine 标准 Python 3 运行时支持的Python 客户端。

要使用 App Engine Standard 中的 google-cloud-storage 访问 Cloud Storage:

  1. 添加对requirements.txt的依赖 > google-cloud-storage==1.14.0
  2. 使用存储客户端库storage.Client()仅进行身份验证。

根据您需要实现的目标,我还建议尝试不同的可能方法:

  1. 允许匿名访问存储在存储桶中的公共数据。
  2. 对于签名 URL API 调用,请使用方法:projects.serviceAccounts.signBlob。文档包括示例:

还可以使用appengine api 对 blob 进行签名

google.appengine.api.app_identity.sign_blob()
Run Code Online (Sandbox Code Playgroud)