Я могу успешно совершать вызовы GCP (например, перечислять / создавать / удалять экземпляры) с использованием jclouds, но в настоящее время я использую GoogleCredentialsFromJson для предоставления учетных данных. По соображениям безопасности (включая автоматическую ротацию учетных данных) я не хочу полагаться на это в рабочей среде.
Виртуальная машина, с которой я буду выполнять вызовы, уже связана с учетной записью службы, поэтому учетные данные не требуются. Однако, когда я опускаю то, что считал необязательным поставщиком учетных данных, я получаю сообщение об ошибке (свойство google-compute-engine.identity отсутствует в свойствах). Как мне подключить jclouds без указания учетных данных?
Это работает:
final ContextBuilder contextBuilder = ContextBuilder.newBuilder(GCP_PROVIDER)
.endpoint(gcpEndpoint)
.overrides(overrides)
.credentialsSupplier(newCredentialsSupplier(gcpCredentials))
.modules(modulesSetBuillder.build());
Это не:
final ContextBuilder contextBuilder = ContextBuilder.newBuilder(GCP_PROVIDER)
.endpoint(gcpEndpoint)
.overrides(overrides)
.modules(modulesSetBuillder.build());
newCredetialsSupplier, по сути, просто делает это:
// Simplified for this example
private Supplier<Credentials> newCredentialsSupplier(String jsonCredentials) {
return new GoogleCredentialsFromJson(jsonCredentials);
}
В идеале я бы ожидал, что второй фрагмент кода (который просто исключает поставщика учетных данных) будет работать, но вместо этого я получаю эту ошибку:
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]"}