Подключитесь к Amazon S3 без ключа доступа и секретного ключа от Spring Boot - PullRequest
1 голос
/ 04 мая 2020

Я не могу подключиться к Amazon S3 через роль IAM. Мне сказали, что я не могу использовать secret-key или access-key,, но я не могу найти способ сделать это без этого.

На самом деле у меня есть следующее:

public class S3Config {

    @Autowired
    Environment env;

    @Value("${amazon.aws.accesskey}")
    private String awsId;

    @Value("${amazon.aws.secretkey}")
    private String awsKey;

    @Value("${amazon.aws.role}")
    private String roleArn;

    @Value("${amazon.aws.region}")
    private String region;

    @Bean
    @Scope("prototype")
    @Primary
    public AmazonS3Client s3client() {

        BasicAWSCredentials awsCreds = new BasicAWSCredentials("", "");

        AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                .withRegion(Regions.fromName(region))
                .build();

        AssumeRoleRequest assumeRequest = new AssumeRoleRequest().withRoleArn(roleArn).withDurationSeconds(3600)
                .withRoleSessionName("Test");
        AssumeRoleResult roleResponse = stsClient.assumeRole(assumeRequest);

        Credentials sessionCredentials = roleResponse.getCredentials();

        BasicSessionCredentials awsCredentials = new BasicSessionCredentials(
                sessionCredentials.getAccessKeyId(),
                sessionCredentials.getSecretAccessKey(),
                sessionCredentials.getSessionToken());

        AmazonS3Client s3ClientRole = (AmazonS3Client) AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .withRegion(Regions.fromName(region))
                .build();

        AmazonS3Client s3Client = s3ClientRole;

        return s3Client;
    }
}

Если в строке, где я создаю объект awsCreds, я правильно заполняю его значениями, полученными из application.properties, если он все делает правильно. Но если я оставлю это пустым, я никогда не смогу выполнить строку stsClient.assumeRole(assumeRequest);, и это даст мне ошибку времени ожидания соединения.

1 Ответ

0 голосов
/ 04 мая 2020

Я думаю, что вы должны следовать этому, сделайте c: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html#default -provider-chain

Это должно следовать за вами на шаг впереди решения вашей проблемы.

По сути, роль IAM позволяет указанным c «ресурсам», таким как экземпляр EC2, подключаться к службе, и, таким образом, вы настраиваете свой клиент для получения временных учетных данных только для его «аутентификации» и «авторизации».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...