【问题标题】:Assume Role with Spring Cloud AWS Autoconfiguration使用 Spring Cloud AWS 自动配置担任角色
【发布时间】: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?

【问题讨论】:

    标签: amazon-web-services aws-sdk spring-cloud-aws


    【解决方案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();
        }
    }
    

    【讨论】:

    • 假定角色理想情况下会在一段时间后过期。这是自动处理的吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2021-03-03
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2023-03-13
    相关资源
    最近更新 更多