aws.accessKeyId и aws.secretKey не читаются - PullRequest
0 голосов
/ 12 июня 2019

У меня есть приложение с пружинной загрузкой, которое использует S3-контейнеры.Согласно Amazon (https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html) порядок должен быть:

  1. В системных переменных среды: AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.
  2. В свойствах системы Java: aws.accessKeyId и aws.secretKey.
  3. В файле учетных данных по умолчанию (расположение этого файла зависит от платформы).
  4. В учетных данных профиля экземпляра, которые существуют в метаданных экземпляра, связанных с IAMроль для экземпляра EC2.

Однако мой код игнорирует aws.accessKeyId и aws.secretKey из application.properties.

public AmazonS3 getS3Client() {
    AWSCredentialsProviderChain instanceProvider = new AWSCredentialsProviderChain();
    AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard();
    builder.setCredentials(instanceProvider);
    builder.setRegion(region);
    return builder.build();
}

Это работает, когда я используюэто на экземпляре EC2, но происходит сбой, когда я пытаюсь использовать его локально для разработки.

ОБНОВЛЕНИЕ:

также пытался с

        DefaultAWSCredentialsProviderChain instanceProvider = new DefaultAWSCredentialsProviderChain();
        System.out.println(instanceProvider.getCredentials().getAWSAccessKeyId());
        System.out.println(instanceProvider.getCredentials().getAWSSecretKey());
        return AmazonS3ClientBuilder.standard().withCredentials(instanceProvider).withRegion(region).build();

, и это также не удалось. Когда я печатаю ключ доступа, он показывает правильное значение, а секрет - что-то другое (я предполагаю, что он зашифрован по соображениям безопасности). Если я использую BasicCredentials, он работает.

BasicAWSCredentials creds = new BasicAWSCredentials(keyName, secretKey);
        return AmazonS3ClientBuilder.standard().withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(creds)).disableChunkedEncoding().build();

1 Ответ

0 голосов
/ 12 июня 2019

Я не уверен, как опубликованный вами код работает на EC2, потому что AWSCredentialsProviderChain ожидает список поставщиков.

Вместо этого вам нужно DefaultAWSCredentialsProviderChain .

Однако вам не нужен явный поставщик учетных данных (и это может быть причиной его работы), поскольку AmazonS3ClientBuilder.standard() создает построитель со всеми установленными значениями по умолчанию (который включает цепочку поставщиков по умолчанию).

Если изменение класса не решит вашу проблему, то вам нужно отредактировать свой вопрос, чтобы показать (1) используемую вами командную строку (редактирование ключей) и (2) точное сообщение об ошибке, скопированное с терминала.

...