Мне нужно создать приложение с Spring Boot, которое обращается к S3. Они не хотят, чтобы accessKey и secretKEy присутствовали где-либо в коде. Для этого они дали мне роль arn, но я не знаю, как подключиться без accessKey и secretKey.
Поскольку им не нужны эти два параметра в коде, я решил попробовать поместить их в свою среду переменные (не знаю, сработает ли это для них). Проблема возникает, когда у меня все еще есть переменные среды:
(эти переменные имеют правильное значение, только я не могу их показать)
А затем в моем приложении Spring Boot у меня есть следующий конструктор:
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.build();
Но при всем этом он возвращает следующую ошибку:
Caused by: com.amazonaws.SdkClientException: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
at com.amazonaws.auth.EnvironmentVariableCredentialsProvider.getCredentials(EnvironmentVariableCredentialsProvider.java:50)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1213)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:789)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:739)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:732)
....
Тогда я намеревался сделать это с ролью:
AssumeRoleRequest assumeRequest = new
AssumeRoleRequest().withRoleArn(roleArn).withDurationSeconds(3600)
.withRoleSessionName(sessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(assumeRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
BasicSessionCredentials awsCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(),
sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());