python - 是否有受支持的方法来使用 Google 云 Python SDK 验证服务帐户而不使用 key 文件?

标签 python google-cloud-platform google-authentication

我在 CI/CD 环境中操作,严格禁止将 JSON key 文件写入磁盘或将其包含在项目中。我所能做的就是将原始 JSON 数据注入(inject)到一个环境变量中,我们可以在运行时读回该变量。将 GOOGLE_APPLICATION_CREDENTIALS 设置为 key 文件路径的常用方法在这里不起作用,因为我们首先无法写入该文件。它需要直接以字符串形式包含 JSON 数据。

不幸的是,我发现的所有 Google Cloud 文档都假设在身份验证之前存在 JSON key 文件。没有讨论如何直接通过变量值进行身份验证。 closest thing which I've found暗示可以显式设置凭据,但是 linked page仅讨论 Credentials 类的内部属性。

幸运的是,我有更好的运气阅读the code比文档。经过一番探索后,我发现 ServiceAccountCredentials._from_parsed_json_keyfile 使我能够做我想做的事情。这是我的测试代码:

import os
import json
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient import discovery

# Prepare the service object
json_data = json.loads(os.getenv("MY_CREDENTIALS_STRING"))
credentials = ServiceAccountCredentials._from_parsed_json_keyfile(json_data, scopes='')
service = discovery.build('compute', 'v1', credentials=credentials)

# Test the service object
request = service.images().list(project='my-project')
response = request.execute()
print(response)

这可行,但感觉像是黑客攻击。函数名称中的“_”告诉我它不是受支持的 API 的一部分,并且可能会在未来版本中消失而不发出警告。

我没有找到实现此目的的官方方法。有吗?

最佳答案

使用 google.oauth2.service_account 类。该成员是 from_service_account_info

文档:link 。 源代码:link .

from google.oauth2 import service_account

// load from a file
// service_account_info = json.load(open('service_account.json'))

// load from system environment
service_account_info = json.loads(os.getenv("MY_CREDENTIALS_STRING"))

credentials = service_account.Credentials.from_service_account_info(service_account_info)

关于python - 是否有受支持的方法来使用 Google 云 Python SDK 验证服务帐户而不使用 key 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55913266/

相关文章:

javascript - 使用 Google Home 或 Alexa 的 TTS

php - 使用 YouTube api 的永久访问 token ?

javascript - 带有 Google Auth Signin 的 Vuejs 全局函数

python - 从 SQLAlchemy Core 中的多个表连接中选择列

Python输入单个字符不用回车

Python:根据对象属性从列表中删除对象

java - 找不到符号变量 gso,Firebase Google 身份验证

python - 将变换矩阵应用于 opencv (Python) 中的点列表

concurrency - 如何使用谷歌云函数处理背压

google-cloud-platform - Google Cloud Load Balancer 突然抛出 504 超时(尽管架构没有变化)