如何将 python3 标准环境应用引擎 url 的请求限制到单个服务帐户?
How to restrict requests of python3 standard environment app engine urls to a single service account?
我有一个 python37 标准环境应用程序引擎 url 可在 /healthcheck 访问。
我已经生成并保存为 json.
的服务帐户密钥
包含所有预期字段:
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "project@appspot.gserviceaccount.com",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": ""
我想用两种不同的方式调用 urls:
- 手动请求我的 URLs 并以某种方式在身份验证请求中使用服务帐户字段作为 headers。
- 安排 cron 作业 运行 调用相同的 URL。
我在 Google Cloud 上找到的所有文档仅讨论应用引擎 url 请求下游的身份验证。是否有一种标准方法可以将应用引擎 url 请求限制为仅一个服务帐户?
而不是使用 Google Cloud 提供的任何服务以确保安全。我只是用 api 密钥创建了一个参数,并强制所有连接为 https。
在 main.py 中,我使用了烧瓶功能 @app.before_request 来检查 cron 执行或变量。
@app.before_request
def do_something_whenever_a_request_comes_in():
if 'X-Appengine-Cron' in request.headers:
if not request.headers['X-Appengine-Cron']:
return 'Not Authorized', 401
elif 'apikey' in request.args:
print (request.args['apikey'])
if (request.args['apikey'] != config.apikey):
return 'Not Authorized', 401
else:
return 'Not Authorized', 401
print('Passed authorization')
我有一个 python37 标准环境应用程序引擎 url 可在 /healthcheck 访问。
我已经生成并保存为 json.
的服务帐户密钥
包含所有预期字段:
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "project@appspot.gserviceaccount.com",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": ""
我想用两种不同的方式调用 urls:
- 手动请求我的 URLs 并以某种方式在身份验证请求中使用服务帐户字段作为 headers。
- 安排 cron 作业 运行 调用相同的 URL。
我在 Google Cloud 上找到的所有文档仅讨论应用引擎 url 请求下游的身份验证。是否有一种标准方法可以将应用引擎 url 请求限制为仅一个服务帐户?
而不是使用 Google Cloud 提供的任何服务以确保安全。我只是用 api 密钥创建了一个参数,并强制所有连接为 https。
在 main.py 中,我使用了烧瓶功能 @app.before_request 来检查 cron 执行或变量。
@app.before_request
def do_something_whenever_a_request_comes_in():
if 'X-Appengine-Cron' in request.headers:
if not request.headers['X-Appengine-Cron']:
return 'Not Authorized', 401
elif 'apikey' in request.args:
print (request.args['apikey'])
if (request.args['apikey'] != config.apikey):
return 'Not Authorized', 401
else:
return 'Not Authorized', 401
print('Passed authorization')