使用 Spring Cloud AWS 自动配置担任角色
Posted
技术标签:
【中文标题】使用 Spring Cloud AWS 自动配置担任角色【英文标题】:Assume Role with Spring Cloud AWS Autoconfiguration 【发布时间】:2018-07-25 03:48:16 【问题描述】:为了向 SNS 发布消息,我需要承担正确的角色,因此在使用 AWS SDK 时,我创建了一个这样的 AmazonSNS bean:
@Bean
public AmazonSNS amazonSnsClient(
@Value("$cloud.aws.credentials.accessKey") String accessKey,
@Value("$cloud.aws.credentials.secretKey") String secretKey,
@Value("$cloud.aws.role.publisherArn") String publisherRoleArn
)
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withRegion(EU_CENTRAL_1)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.build();
STSAssumeRoleSessionCredentialsProvider credentialsProvider = new STSAssumeRoleSessionCredentialsProvider
.Builder(publisherRoleArn, SESSION_NAME)
.withStsClient(stsClient)
.build();
return AmazonSNSClientBuilder.standard()
.withRegion(EU_CENTRAL_1)
.withCredentials(credentialsProvider)
.build();
我正在尝试对 Spring Cloud AWS 消息传递和自动配置做同样的事情,但到目前为止我没有找到任何关于该主题的信息。我的 application.yml 看起来像这样
cloud:
aws:
credentials:
accessKey: ***
secretKey: ***
instanceProfile: true
region:
static: eu-central-1
Spring 是否支持它,我只是没能找到它,还是应该坚持使用 AWS SDK?
【问题讨论】:
【参考方案1】:看起来没有开箱即用的解决方案。最简单的解决方法是创建您自己的 AWSCredentialsProvider bean
@Configuration
public class AwsCredentials
private static final String SESSION_NAME = "TestConsumer";
@Bean
@Primary
public AWSCredentialsProvider credentialsProvider(
@Value("$cloud.aws.credentials.accessKey") String accessKey,
@Value("$cloud.aws.credentials.secretKey") String secretKey,
@Value("$cloud.aws.role") String role )
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withRegion(EU_CENTRAL_1)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.build();
return new STSAssumeRoleSessionCredentialsProvider
.Builder(role, SESSION_NAME)
.withStsClient(stsClient)
.build();
【讨论】:
假定角色理想情况下会在一段时间后过期。这是自动处理的吗?以上是关于使用 Spring Cloud AWS 自动配置担任角色的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Cloud Vault 在 Spring Boot 应用程序中自动更新 AWS 凭证
AWS 实例配置文件不适用于 Spring Cloud AWS
如何使用AWS Lambda和SNS事件触发Spring Cloud功能的重试