Я не могу подключиться к 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);
, и это даст мне ошибку времени ожидания соединения.