Невозможно загрузить AWS учетных данных из переменных среды (AWS_ACCESS_KEY_ID (или AWS_ACCESS_KEY) и AWS_SECRET_KEY (или AWS_SECRET_ACCESS_KEY)) - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно создать приложение с Spring Boot, которое обращается к S3. Они не хотят, чтобы accessKey и secretKEy присутствовали где-либо в коде. Для этого они дали мне роль arn, но я не знаю, как подключиться без accessKey и secretKey.

Поскольку им не нужны эти два параметра в коде, я решил попробовать поместить их в свою среду переменные (не знаю, сработает ли это для них). Проблема возникает, когда у меня все еще есть переменные среды:

These variables have the correct value only I can't show them

(эти переменные имеют правильное значение, только я не могу их показать)

А затем в моем приложении 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());
...