我们如何在连接到Google Cloud Platform以执行代码的Java程序中定义凭据。 有一种设置GOOGLE_APPLICATION_CREDENTIALS env变量的标准方法。我想在代码中定义。有什么建议吗?
答案 0 :(得分:1)
感谢您的回复。 GCP不建议理解定义凭证。所以,我会使用ADC(Authenticate Default Credentials)。
添加更多信息:
为您的应用程序提供凭据
GCP客户端库使用名为Application Default Credentials(ADC)的策略来查找应用程序的凭据。当您的代码使用客户端库时,策略将按以下顺序检查您的凭据:
首先,ADC检查是否设置了环境变量GOOGLE_APPLICATION_CREDENTIALS。如果设置了变量,ADC将使用变量指向的服务帐户文件。
如果未设置环境变量,则ADC会使用Compute Engine,Kubernetes Engine,App Engine和Cloud Functions提供的默认服务帐户,用于在这些服务上运行的应用程序。
如果ADC无法使用上述任何一种凭据,则会发生错误。
以下代码示例说明了此策略。该示例未明确指定应用程序凭据。但是,只要设置了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