Google cloud platform 使用jclouds调用GCE而不提供凭据(GoogleCredentialsFromJson不是选项)

Google cloud platform 使用jclouds调用GCE而不提供凭据(GoogleCredentialsFromJson不是选项),google-cloud-platform,google-compute-engine,jclouds,Google Cloud Platform,Google Compute Engine,Jclouds,我能够使用jclouds成功地进行GCP调用(例如,list/create/delete实例),但我目前依靠GoogleCredentialsFromJson提供凭据。出于安全原因(包括凭证的自动旋转),我不想在生产中依赖它 我将从中进行呼叫的VM已与服务帐户关联,因此不需要凭据。然而,当我遗漏了我认为是可选的凭证供应商时,我得到了一个错误(属性中不存在属性google-compute-engine.identity)。如何在不指向凭据的情况下连接jclouds 这项工作: final Cont

我能够使用jclouds成功地进行GCP调用(例如,list/create/delete实例),但我目前依靠GoogleCredentialsFromJson提供凭据。出于安全原因(包括凭证的自动旋转),我不想在生产中依赖它

我将从中进行呼叫的VM已与服务帐户关联,因此不需要凭据。然而,当我遗漏了我认为是可选的凭证供应商时,我得到了一个错误(属性中不存在属性google-compute-engine.identity)。如何在不指向凭据的情况下连接jclouds

这项工作:

final ContextBuilder ContextBuilder=ContextBuilder.newBuilder(GCP\U提供程序)
.端点(gcpEndpoint)
.覆盖(覆盖)
.认证供应商(新认证供应商(gcpCredentials))
.modules(moduleSetBuilder.build());
这并不是:

final ContextBuilder ContextBuilder=ContextBuilder.newBuilder(GCP\U提供程序)
.端点(gcpEndpoint)
.覆盖(覆盖)
.modules(moduleSetBuilder.build());
newCredetialsSupplier基本上就是这样做的:

//此示例简化了
私人供应商新凭证供应商(字符串jsonCredentials){
从JSON(jsonCredentials)返回新的Google凭证;
}
理想情况下,我希望第二个代码段(不包括凭证供应商)能够正常工作,但我得到了以下错误:

java.util.NoSuchElementException: property google-compute-engine.identity not present in properties: [jclouds.idempotent-methods, jclouds.user-threads, jclouds.template, jclouds.max-session-failures, oauth.endpoint, jclouds.google-compute-engine.image-projects, jclouds.google-compute-engine.operation-complete-timeout, jclouds.oauth.jws-alg, jclouds.max-connection-reuse, jclouds.endpoint, jclouds.connection-close-header, jclouds.googlecloud.project-name, jclouds.scheduler-threads, jclouds.build-version, jclouds.iso3166-codes, jclouds.google-compute-engine.operation-complete-interval, jclouds.so-timeout, jclouds.max-connections-per-host, jclouds.max-connections-per-context, jclouds.strip-expect-header, jclouds.regions, jclouds.api, jclouds.user-agent, jclouds.max-parallel-deletes, jclouds.oauth.audience, jclouds.api-version, jclouds.payloads.pretty-print, jclouds.connection-timeout, jclouds.provider, jclouds.session-interval]"}

这个链接有代码示例。您想使用ComputeEngine.create()从GCE实例元数据获取凭据:@JohnHanley,我很感激您的响应,但我正在尝试使用Apache jclouds,而不是本机GCP客户端库。您提供的链接指向GCP客户端库示例。我误解了你的回答吗?我不知道代码在哪里运行,服务帐户附加在哪个虚拟机上?将服务帐户分配给GCE实例。从元数据访问凭据。此元数据在实例外部不可用。如果您的代码在其他地方运行,那么您必须自己加载服务帐户JSON文件。注意:我对jclouds一无所知,只知道在GCP中如何管理安全性和权限。谢谢John。这是jclouds的一个具体问题。jclouds是一个抽象层,允许您与多个云提供商集成。我的应用程序已经能够在OpenStack、AWS和现在的GCP上运行。它目前正在一个GCE实例上运行,但我无法让它在没有JSON文件的情况下运行,这应该是不必要的,因为凭据应该可以从实例的元数据中获得,正如您自己指出的那样。我想知道是否已经有办法,或者我是否需要为jclouds贡献力量来实现这一目标。。。。谢谢你的回复/评论!谢谢你,丹尼。我在我的网站上写了很多关于GCP证书的文章。这些可能有助于您理解GCP授权。此链接有代码示例。您想使用ComputeEngine.create()从GCE实例元数据获取凭据:@JohnHanley,我很感激您的响应,但我正在尝试使用Apache jclouds,而不是本机GCP客户端库。您提供的链接指向GCP客户端库示例。我误解了你的回答吗?我不知道代码在哪里运行,服务帐户附加在哪个虚拟机上?将服务帐户分配给GCE实例。从元数据访问凭据。此元数据在实例外部不可用。如果您的代码在其他地方运行,那么您必须自己加载服务帐户JSON文件。注意:我对jclouds一无所知,只知道在GCP中如何管理安全性和权限。谢谢John。这是jclouds的一个具体问题。jclouds是一个抽象层,允许您与多个云提供商集成。我的应用程序已经能够在OpenStack、AWS和现在的GCP上运行。它目前正在一个GCE实例上运行,但我无法让它在没有JSON文件的情况下运行,这应该是不必要的,因为凭据应该可以从实例的元数据中获得,正如您自己指出的那样。我想知道是否已经有办法,或者我是否需要为jclouds贡献力量来实现这一目标。。。。谢谢你的回复/评论!谢谢你,丹尼。我在我的网站上写了很多关于GCP证书的文章。这些可能有助于您理解GCP授权。