gcloud auth login 和 python 上传

Posted

技术标签:

【中文标题】gcloud auth login 和 python 上传【英文标题】:gcloud auth login and python to upload 【发布时间】:2019-09-25 01:06:08 【问题描述】:

我有使用服务帐户从 GCS 存储桶上传和下载的 python 程序。这按预期工作。

由于某些业务限制,bucket owner 无法为其他几个bucket 共享service account。那些目前正在通过公共组邮件地址 (Teamgroup@companydns.com) 使用 GSUtil 身份验证(gcloud auth login)。

存储桶所有者提供了对公共组邮件地址“Teamgroup@companydns.com”的所需访问权限。现在我被要求使用这个邮件地址使用python程序上传和下载文件到GCS(这里我不应该使用GSUtil)?

我可以将 Google SDK 用于我的 python 实现。有什么办法可以在我的python程序中实现上传没有服务帐户的文件?

请给我一些启示。

【问题讨论】:

【参考方案1】:

一种解决方案是通过调用JSON REST API 的请求来上传对象。

您需要提供一个 OAUTH_TOKEN,您可以通过发出命令 gcloud auth print-access-token (docs) 来获取它。如果您以有权访问存储桶的组的成员身份登录,那么您将有权使用该令牌进行访问。

获得该令牌后,您可以在 Python 程序中发出请求,有点像这样:

import requests
filepath = '/path/to/file'
url = 'https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]'

headers = 
    "Authorization": "Bearer [PRINTED_ACCESS_TOKEN]",
    "Content-Type": "text/html",


with open(filepath, "rb") as dafile:
    r = requests.post(url, headers=headers, data=dafile)
    print(r.content)

由于该令牌在一段时间后过期,您可以拥有一个脚本来打印访问令牌,将其存储在变量中并运行 Python 程序,将该变量作为参数传递。

【讨论】:

感谢 TasosZG。给定的解决方案对我有用。

以上是关于gcloud auth login 和 python 上传的主要内容,如果未能解决你的问题,请参考以下文章

在 python 脚本中运行 gcloud auth 和 gsutil 命令

尝试运行 bigquery 时 gcloud auth 登录问题 403 访问被拒绝

gcloud auth configure-docker 失败(config.json 无法读取为 JSON)

gcloud auth activate-service-account [错误] 请确保提供的密钥文件有效

来自JSON的gcloud auth activate-service-account用于设置当前项目

模仿 AWS CLI / gcloud 命令行参数