1

spring-cloud-stream API と kinesis-binder をアプリケーションに使用しています。~/.aws/credentials ファイルの資格情報では、接続しようとしているキネシス ストリームへの接続が許可されていないため、役割を引き受ける必要があります。

~/.aws/credentials ファイルから資格情報を取得し、STS を呼び出して役割を引き受け、環境変数を設定して新しいアクセス キー ID、アクセス シークレット キー、およびトークンを使用することができます。ただし、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);

資格情報が環境変数に設定されるまで、春の統合入出力チャネルのバインドを遅らせたいと思います。

4

1 に答える 1

2

これに対する解決策は、更新された awsCredentialsProviderChain Bean に @Primary アノテーションを適用することで、遅らせるのではなく、使用したい構成を選択するよう強制することです。

于 2017-08-24T23:34:07.203 に答える