有没有办法使用加载的服务帐户访问云 运行 中的 google 工作表?

Is there a way to use loaded Service Account to access google sheets in Cloud Run?

我目前正在寻找一种方法来从 GCP Cloud 运行 实例中的 Python 中的 Sheet 读取数据。在部署实例期间加载了一个服务帐户(我向其共享 sheet),我想知道是否可以直接使用该服务帐户而不加载其密钥,因为该实例已经在使用该帐户.

如果您对如何操作有任何想法,我将很高兴。 谢谢

与任何用户帐户一样,服务帐户是电子邮件。如果您需要访问用户 Google Sheet 文档以对数据执行一些处理,您只需将 sheet 与服务帐户电子邮件共享即可。如果您还想更新 sheet.

,请将其放入“查看器”以只读或放入“编辑器”

然后在您的代码中,您需要使用云 运行 服务帐户(不是您身边的密钥)创建一个凭据。这里的重要部分是正确确定凭据的范围。

然后就可以使用SheetAPI进行文档交互了。

    from googleapiclient.discovery import build
    import google.auth

    SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly', 'https://www.googleapis.com/auth/cloud-platform']

    default_credentials, project_id = google.auth.default(scopes=SCOPES)
    # The ID and range of a sample spreadsheet.
    SAMPLE_SPREADSHEET_ID = 'YOUR DOCUMENT ID'
    SAMPLE_RANGE_NAME = 'A1:C1'

    service = build('sheets', 'v4', credentials=default_credentials)

    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                                range=SAMPLE_RANGE_NAME).execute()
    values = result.get('values', [])

    to_ret = "Result \n"

    if not values:
        to_ret += "\n" + 'No data found.'
        print('No data found.')
    else:
        to_ret += "\n" + 'Results:'
        print('Results:')
        for row in values:
            to_ret += "\n" + row[0]
            print(row)