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 [错误] 请确保提供的密钥文件有效