【问题标题】:GOOGLE_APPLICATION_CREDENTIALS contents not file pathGOOGLE_APPLICATION_CREDENTIALS 内容不是文件路径
【发布时间】:2022-01-04 23:06:26
【问题描述】:

我正在使用 gcp python API。

GOOGLE_APPLICATION_CREDENTIALS 环境变量需要 gcp 帐户 json 密钥的路径。

是否有另一个变量可以接受该文件的内容而不是路径?这会很方便。

【问题讨论】:

    标签: google-cloud-platform


    【解决方案1】:

    我建议您不要依赖GOOGLE_APPLICATION_CREDENTIALS,而是使用客户端库从运行时环境中读取凭据。这大大简化了密钥分发和管理以及安全性。

    创建 App Engine/GKE/GCE 实例时,您可以控制将哪个服务帐户安装到相应实例的元数据服务器(这是create 命令的一个选项)。默认情况下,客户端库将在那里查找凭据。有关元数据服务器的相关文档,请参阅 this pagethis page。请记住在创建环境时指定密钥,默认情况下它将使用计算服务的服务帐户密钥。

    对于您的 localhost 环境,您使用 gcloud auth application-default login 管理默认应用程序凭据。在 localhost 上使用服务帐户的正确方法不是下载密钥,而是授予您的用户“充当”服务帐户的权限。这样,您的用户始终只能以自己的身份进行身份验证,并且不必将服务帐户密钥分发给每个人。如果有人离开您的公司,他们唯一可以访问的秘密就是他们自己的用户。

    请参阅文档中的 this page 以使用 Python 进行身份验证。

    【讨论】:

    • 如果我理解您的建议,这不是 GKE 集群的最佳实践,因为集群上的每个应用程序都将使用相同的“角色”
    【解决方案2】:

    没有其他变量可以代替 GOOGLE_APPLICATION_CREDENTIALS。大多数 Google 客户端代码使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量来指定要打开的凭据 JSON 文件的路径。而this setup 用于确定在您的应用程序代码部署到 Google Cloud Platform 时要使用的相应服务帐户。

    根据 red888 的建议,除了使用 gcp python API,您还可以使用Python Client Library

    【讨论】:

      【解决方案3】:

      根据服务帐户模块的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)
      

      【讨论】:

        猜你喜欢
        • 2020-12-08
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 2018-11-28
        • 1970-01-01
        • 2011-07-22
        相关资源
        最近更新 更多