Использование jclouds для вызова GCE без предоставления учетных данных (GoogleCredentialsFromJson не вариант) - PullRequest
0 голосов
/ 23 мая 2019

Я могу успешно совершать вызовы 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]"}
...