【发布时间】:2022-01-04 23:06:26
【问题描述】:
我正在使用 gcp python API。
GOOGLE_APPLICATION_CREDENTIALS 环境变量需要 gcp 帐户 json 密钥的路径。
是否有另一个变量可以接受该文件的内容而不是路径?这会很方便。
【问题讨论】:
我正在使用 gcp python API。
GOOGLE_APPLICATION_CREDENTIALS 环境变量需要 gcp 帐户 json 密钥的路径。
是否有另一个变量可以接受该文件的内容而不是路径?这会很方便。
【问题讨论】:
我建议您不要依赖GOOGLE_APPLICATION_CREDENTIALS,而是使用客户端库从运行时环境中读取凭据。这大大简化了密钥分发和管理以及安全性。
创建 App Engine/GKE/GCE 实例时,您可以控制将哪个服务帐户安装到相应实例的元数据服务器(这是create 命令的一个选项)。默认情况下,客户端库将在那里查找凭据。有关元数据服务器的相关文档,请参阅 this page 和 this page。请记住在创建环境时指定密钥,默认情况下它将使用计算服务的服务帐户密钥。
对于您的 localhost 环境,您使用 gcloud auth application-default login 管理默认应用程序凭据。在 localhost 上使用服务帐户的正确方法不是下载密钥,而是授予您的用户“充当”服务帐户的权限。这样,您的用户始终只能以自己的身份进行身份验证,并且不必将服务帐户密钥分发给每个人。如果有人离开您的公司,他们唯一可以访问的秘密就是他们自己的用户。
请参阅文档中的 this page 以使用 Python 进行身份验证。
【讨论】:
没有其他变量可以代替 GOOGLE_APPLICATION_CREDENTIALS。大多数 Google 客户端代码使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量来指定要打开的凭据 JSON 文件的路径。而this setup 用于确定在您的应用程序代码部署到 Google Cloud Platform 时要使用的相应服务帐户。
根据 red888 的建议,除了使用 gcp python API,您还可以使用Python Client Library
【讨论】:
根据服务帐户模块的google-oauth docs,您可以使用帮助器构造函数之一为文件或已加载的 json 数据创建凭据。
使用 Google 服务帐户私钥 JSON 文件创建凭据:
credentials = service_account.Credentials.from_service_account_file('service-account.json')
或者,如果您已经从某处加载了服务帐户文件的内容:
service_account_info = json.load(open('service_account.json'))
credentials = service_account.Credentials.from_service_account_info(
service_account_info)
【讨论】: