Google云端平台 - 在代码中定义凭据

时间:2018-04-22 10:02:08

标签: google-cloud-platform

我们如何在连接到Google Cloud Platform以执行代码的Java程序中定义凭据。 有一种设置GOOGLE_APPLICATION_CREDENTIALS env变量的标准方法。我想在代码中定义。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

感谢您的回复。 GCP不建议理解定义凭证。所以,我会使用ADC(Authenticate Default Credentials)。

添加更多信息:

为您的应用程序提供凭据

GCP客户端库使用名为Application Default Credentials(ADC)的策略来查找应用程序的凭据。当您的代码使用客户端库时,策略将按以下顺序检查您的凭据:

  1. 首先,ADC检查是否设置了环境变量GOOGLE_APPLICATION_CREDENTIALS。如果设置了变量,ADC将使用变量指向的服务帐户文件。

  2. 如果未设置环境变量,则ADC会使用Compute Engine,Kubernetes Engine,App Engine和Cloud Functions提供的默认服务帐户,用于在这些服务上运行的应用程序。

  3. 如果ADC无法使用上述任何一种凭据,则会发生错误。

  4. 以下代码示例说明了此策略。该示例未明确指定应用程序凭据。但是,只要设置了GOOGLE_APPLICATION_CREDENTIALS环境变量,或者只要应用程序在Compute Engine,Kubernetes Engine,App Engine或Cloud Functions上运行,ADC就能够隐式查找凭据。

    Java代码:

    static void authImplicit() {
      // If you don't specify credentials when constructing the client, the client library will
      // look for credentials via the environment variable GOOGLE_APPLICATION_CREDENTIALS.
      Storage storage = StorageOptions.getDefaultInstance().getService();
    
      System.out.println("Buckets:");
      Page<Bucket> buckets = storage.list();
      for (Bucket bucket : buckets.iterateAll()) {
        System.out.println(bucket.toString());
      }
    }
    

    您可以在GCP链接中找到所有这些详细信息:https://cloud.google.com/docs/authentication/production#auth-cloud-app-engine-java