Google App Engine - 对应用程序的部署版本进行身份验证
Posted
技术标签:
【中文标题】Google App Engine - 对应用程序的部署版本进行身份验证【英文标题】:Google App Engine - Issue authenticating deployed version of app 【发布时间】:2016-08-02 22:59:45 【问题描述】:我构建了一个简单的 Python 应用程序,可以在 Google App Engine 上运行。代码:
import webapp2
from oauth2client.contrib.appengine import AppAssertionCredentials
from apiclient.discovery import build
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('BigQuery App')
credentials = AppAssertionCredentials(
'https://www.googleapis.com/auth/sqlservice.admin')
service = discovery.build('bigquery', 'v2', credentials=credentials)
projectId = '<Project-ID>'
query_request_body =
"query": "SELECT a from Data.test LIMIT 10"
request = service.jobs().query(projectId=projectId, body=query_request_body)
response = request.execute()
self.response.write(response)
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
我能够在本地部署此代码 (http://localhost:8080) 并且一切正常,但是当我尝试使用以下命令将其部署到 GAE 时出现以下错误 500 服务器错误:
appcfg.py -A <Project-Id> -V v1 update .
这是我从错误报告控制台得到的错误:
error: An error occured while connecting to the server: DNS lookup failed for URL:http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/https://www.googleapis.com/auth/sqlservice.admin/?recursive=True
我认为这是一个身份验证问题,为了确保我的服务帐户已获得授权,我对服务帐户进行了 gcloud 身份验证,并且还从 SDK 设置了设置的环境变量。
我一直在尝试解决这个问题,非常感谢任何指针。谢谢。
此外,我一直在按照以下文档使用服务帐户身份验证:https://developers.google.com/identity/protocols/OAuth2ServiceAccount,其中说我不应该能够在本地运行 AppAsseritionCredenitals,这增加了我的困惑,因为我实际上可以没有错误。
编辑:
重新上传并重新授权我的服务帐户后,我能够连接到服务器。但是,授权错误继续:
HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/sqlserver-1384/queries?alt=json returned "Insufficient Permission">
【问题讨论】:
【参考方案1】:要修复“连接服务器时出错”,请按照此答案中列出的说明进行操作:https://***.com/questions/31651973/default-credentials-in-google-app-engine-invalid-credentials-error#= 然后重新上传应用
然后,要在请求时修复 HttpError 403 ...返回“权限不足”,您必须更改您请求的范围。就我而言,我要求:
credentials = AppAssertionCredentials(
'https://www.googleapis.com/auth/sqlservice.admin')
但是,Google BigQuery 的正确范围是:https://www.googleapis.com/auth/bigquery。看起来像这样:
credentials = AppAssertionCredentials(
'https://www.googleapis.com/auth/bigquery')
如果您使用不同的 API,请使用文档中概述的任何范围。
【讨论】:
以上是关于Google App Engine - 对应用程序的部署版本进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
将应用程序部署到Google App Engine时出现超时错误
Google App Engine - 无法链接到 github 存储库
Google App Engine 的用户 API 限制太多?