【发布时间】:2020-11-28 04:59:54
【问题描述】:
我构建了这个非常简单的代码,与教程here 非常相似。我只是使用默认凭据,而不是使用服务帐户密钥文件(如果需要,我可以解释原因,但简而言之,它不安全!)
要测试它,只需在代码中更改工作表 ID
import os
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def test_sheet():
from googleapiclient.discovery import build
import google.auth
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
credentials, project_id = google.auth.default(scopes=SCOPES)
# The ID and range of a sample spreadsheet.
SAMPLE_SPREADSHEET_ID = '1oHzQLk79_TeEZtQyTLxk47PKDi7g1oy1O0MgSHzhUSk'
SAMPLE_RANGE_NAME = 'A1:C1'
service = build('sheets', 'v4', credentials=credentials)
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
range=SAMPLE_RANGE_NAME).execute()
values = result.get('values', [])
if not values:
print('No data found.')
else:
print('Results:')
for row in values:
# Print columns A and E, which correspond to indices 0 and 4.
print(row)
return row[0] + ',' + row[1], 200
if __name__ == "__main__":
app.run(host='0.0.0.0',port=int(os.environ.get('PORT',8080)))
无论如何,这是我的问题:
- 当我在 Cloud Run 上部署它并在我的电子表格上授权 Cloud Run 自定义服务帐户(没有密钥,我使用应用程序默认凭据)时,它可以工作
- 当我在本地使用我在
GOOGLE_APPLICATION_CREDENTIALS中设置的 Cloud Run 的服务帐户密钥文件时,它可以工作(我在介绍中说的不好的做法) - 当我在本地使用工作表上授权的用户凭据(与
gcloud auth application-default login一起收集)时,它不适用于此错误:403.......请求身份验证不足范围。 - 当我在 App Engine 上部署并授权 AppEngine 默认服务帐户 (
@appspot.gserviceaccount.com) 时,它不适用于以下错误:403.... ...请求的身份验证范围不足。
问题
- 为什么我不能更改用户帐户凭据的范围? 我能理解这种情况。我无法使用我的用户凭据调用私有 Cloud Function 和私有 Cloud Run。为什么不是另一个限制!
- 为什么我不能更改 App Engine 默认服务帐户的范围? 这里我没有发现与 GCP 上其他服务帐户的区别
【问题讨论】:
-
您是否与 Cloud Run 服务帐号共享了工作表?如果是,您可能需要对 App Engine 服务帐户执行相同操作
-
是的,我做到了,在这里我没有提到,因为错误不是“未经授权的访问”而是“范围不足”。我更新了我的问题
-
使用通过 gcloud 工具授权的凭据只能访问 Google Cloud Scopes,不包括表格。
-
您找到解决方案了吗?
-
嘿@guillaumeblaquiere。我刚刚在 Medium 上阅读了您关于 Cloud Run 多 CPU 性能的精彩 article,谢谢!希望你不介意我通过 SO 提问。您似乎得出结论,是的,更多的 CPU 意味着更多的功率(这是有道理的)。但我的问题是:在查看 Cloud Run 及其扩展方式时,使用更多实例而不是更多 CPU/实例不是更有效吗?就像将 20 个实例与 2 个 vCPU 进行比较。 40 个实例和 1 个 vCPU?您对此有何看法?
标签: google-app-engine google-cloud-platform google-sheets-api service-accounts scopes