У меня есть приложение с пружинной загрузкой, которое использует S3-контейнеры.Согласно Amazon (https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html) порядок должен быть:
- В системных переменных среды: AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.
- В свойствах системы Java: aws.accessKeyId и aws.secretKey.
- В файле учетных данных по умолчанию (расположение этого файла зависит от платформы).
- В учетных данных профиля экземпляра, которые существуют в метаданных экземпляра, связанных с 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();