我在我的应用程序中使用 spring-cloud-stream API 和 kinesis-binder。我必须承担角色,因为 ~/.aws/credentials 文件中的凭据不允许访问与我要连接的 kinesis 流的连接。
我能够从 ~/.aws/credentials 文件中获取凭据并调用 STS 来承担角色并设置环境变量以使用更新的 access-key-id、access-secret-key 和令牌。但是 Kinesis binder 已经连接到原始角色上的 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);
我想延迟绑定弹簧集成输入/输出通道,直到在环境变量中设置凭据。