Spring集成与更新的AWS凭据绑定

时间:2017-08-24 20:32:07

标签: spring spring-integration amazon-kinesis spring-cloud-stream spring-cloud-aws

我在我的应用程序中使用了spring-cloud-stream API和kinesis-binder。我必须承担〜/ .aws / credentials文件中的凭据角色,不允许访问我想要连接的kinesis流的连接。

我能够从〜/ .aws / credentials文件获取凭据并调用STS来承担角色并设置环境变量以使用更新的access-key-id,access-secret-key和token。但是Kinesis绑定器已经连接到原始角色的kinesis流。如果发布到Kinesis流,则会创建一个新的(不是原始角色的一部分),而不是连接到假定角色的流。

以下是我用来扮演角色的代码段:

    AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(
            awsCredentialsProviderChain.getCredentials());

    AssumeRoleRequest assumeRequest = new AssumeRoleRequest().withRoleArn(ROLE_ARN).withDurationSeconds(3600)
            .withRoleSessionName("demo");

    AssumeRoleResult assumeResult = stsClient.assumeRole(assumeRequest);


    String accessKeyId = assumeResult.getCredentials().getAccessKeyId();
    String secretAccessKey = assumeResult.getCredentials().getSecretAccessKey();
    String securityToken = assumeResult.getCredentials().getSessionToken();
    System.setProperty(SDKGlobalConfiguration.ACCESS_KEY_ENV_VAR, accessKeyId);
    System.setProperty(SDKGlobalConfiguration.SECRET_KEY_ENV_VAR, secretAccessKey);
    System.setProperty(SDKGlobalConfiguration.AWS_SESSION_TOKEN_ENV_VAR, securityToken);

我想延迟弹簧集成输入/输出通道的绑定,直到在环境变量中设置凭据。

1 个答案:

答案 0 :(得分:1)

解决这个问题的方法是不要拖延,而是强迫spring选择我想要使用的配置 - 通过在更新的awsCredentialsProviderChain bean上应用@Primary注释。