无法从本地App Engine开发服务器访问BigQuery

dan*_*mux 23 google-app-engine google-bigquery google-oauth google-api-python-client

这是一个与python Google AppEngine应用程序和Google的BigQuery之间的服务器到服务器授权有关的问题,但可能与其他云服务相关.

tldr; 是否可以让App Engine本地开发服务器使用远程BigQuery服务进行身份验证?更好的是有一个本地BigQuery?

我知道AppAssertionCredentials目前不能在本地开发服务器上运行,尽管这本身就非常令人沮丧.

它适用于标准的Python代码,在本地开发服务器沙箱之外的另一种方法,详细介绍在这里,因为即使PyCrypto启用了沙盒不允许一些POSIX模块如"PWD"不为本地开发服务器工作.

我有AppAssertionCredentials远程服务器,并在上工作SignedJwtAssertionCredentials方法了本机Python工作本地,因此服务帐户设置正确.

导入在try/except块中的oauth2client/crypt.py内失败 - 在将它们注释掉后,很容易看到沙箱白名单异常.

我已经摆弄了添加'pwd'到白名单,然后又出现了另一个问题,所以我匆匆走回那个兔子洞.

我已经尝试将PyCrypto直接包含在项目中并得到类似的结果.

我也试过OpenSSL,结果相似.

我找了一个当地的appengine特定的PyCrypto无济于事,我错过了吗?我应该说这是在Mac OSX上 - 也许我应该启动一个Linux机箱然后放手一搏?

aei*_*erg 39

最近发布的Google App Engine SDK在开发服务器上添加了对AppAssertionCredentials方法的支持.要在本地使用此方法,请将以下参数添加到dev_appserver.py:

$ dev_appserver.py --help
...
Application Identity:
  --appidentity_email_address APPIDENTITY_EMAIL_ADDRESS
                        email address associated with a service account that
                        has a downloadable key. May be None for no local
                        application identity. (default: None)
  --appidentity_private_key_path APPIDENTITY_PRIVATE_KEY_PATH
                        path to private key file associated with service
                        account (.pem format). Must be set if
                        appidentity_email_address is set. (default: None)
Run Code Online (Sandbox Code Playgroud)

要使用这些:

  1. Google Developer Console中,选择一个项目,然后导航到"API&auth" - >"凭据" - >"创建新客户端ID".

  2. 选择"服务帐户",然后按照提示下载PKCS12(.p12)格式的私钥.记下服务帐户的电子邮件地址.

  3. 确保将该服务帐户电子邮件地址添加到包含其需要访问的数据的任何项目的"权限"选项卡中,默认情况下将其添加到创建它的项目团队中.

  4. 使用以下命令将PKCS12格式转换为PKCS1格式:

    $ cat /path/to/xxxx-privatekey.p12 | openssl pkcs12 -nodes -nocerts -passin pass:notasecret | openssl rsa > /path/to/secret.pem

  5. 开始dev_appserver.py于:

    $ dev_appserver.py --appidentity_email_address xxxx@developer.gserviceaccount.com --appidentity_private_key_path /path/to/secret.pem ...

  6. 在生产中使用appidentity模块并AppAssertionCredentials以与您通常在本地相同的方式使用模块.

请确保它/path/to/secret.pem位于应用程序源目录之外,以便不会意外地将其部署为应用程序的一部分.

  • 是否有一些与Java SDK相同的内容? (2认同)