Localstack: InvalidClientTokenId when using with Spring Cloud Aws Messaging

Created on 9 Nov 2018  路  3Comments  路  Source: localstack/localstack

Hi, I want to send notifications to SNS from my spring boot app using spring-cloud-aws-messaging-starter and run localstack using docker compose and I cannot connect to the service because everytime I get exception com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: bd8fc6cc-c725-56fa-8559-9293584c0aca). How to solve this ?

My Bean which I use to connect to SNS

@Bean
    public NotificationMessagingTemplate notificationMessagingTemplate(final AmazonSNS amazonSNS) {
        return new NotificationMessagingTemplate(amazonSNS);
    }

my application.properties

cloud.aws.credentials.accessKey=foo
cloud.aws.credentials.secretKey=bar

my docker-compose.yml file:

localstack:
    image: localstack/localstack
    environment:
    - SERVICES=sns,sqs
    ports:
    - "4575:4575"
    - "4576:4576"
    - "8000:8080"

my pom
```

org.springframework.cloud
spring-cloud-starter-aws-messaging
2.0.1.RELEASE


Exception in thread "pool-3-thread-2" Exception in thread "pool-3-thread-1" com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: 37dee342-f9e4-5333-bc5a-b71d668ddd7c)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:669)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:651)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:515)
at com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2488)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2457)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2446)
at com.amazonaws.services.sns.AmazonSNSClient.executeGetEndpointAttributes(AmazonSNSClient.java:987)
at com.amazonaws.services.sns.AmazonSNSClient.getEndpointAttributes(AmazonSNSClient.java:958)
at com.stepstone.listingsdatapipeline.aws.NotificationsAmazonSNSService.sendNotification(NotificationsAmazonSNSService.java:33)
at com.stepstone.listingsdatapipeline.pipeline.PipelineExecutor.run(PipelineExecutor.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: bd8fc6cc-c725-56fa-8559-9293584c0aca)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:669)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:651)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:515)
at com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2488)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2457)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2446)
at com.amazonaws.services.sns.AmazonSNSClient.executeGetEndpointAttributes(AmazonSNSClient.java:987)
at com.amazonaws.services.sns.AmazonSNSClient.getEndpointAttributes(AmazonSNSClient.java:958)
at com.stepstone.listingsdatapipeline.aws.NotificationsAmazonSNSService.sendNotification(NotificationsAmazonSNSService.java:33)
at com.stepstone.listingsdatapipeline.pipeline.PipelineExecutor.run(PipelineExecutor.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

```

Most helpful comment

@lucienfregosi I solved it back then and I don't remember exactly what was the root cause I think some shitty property was missing. Right now it works and I have such application.properites (regarding AWS stack):

cloud.aws.region.static=eu-*****-1
cloud.aws.stack.auto=false
cloud.aws.credentials.accessKey=foo
cloud.aws.credentials.secretKey=bar

Also my AmazonSNS bean:

    @Bean
    public AmazonSNS amazonSNS(final AWSCredentialsProvider awsCredentialsProvider) {
        final AmazonSNS amazonSNS = AmazonSNSClientBuilder.standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4575", "us-east-1"))
                .withCredentials(awsCredentialsProvider)
                .build();
        amazonSNS.createTopic(AmazonSNSConfig.AWS_SNS_TOPIC);
        return amazonSNS;
    }

All 3 comments

Currently got the same issue, any ideas ?

@lucienfregosi I solved it back then and I don't remember exactly what was the root cause I think some shitty property was missing. Right now it works and I have such application.properites (regarding AWS stack):

cloud.aws.region.static=eu-*****-1
cloud.aws.stack.auto=false
cloud.aws.credentials.accessKey=foo
cloud.aws.credentials.secretKey=bar

Also my AmazonSNS bean:

    @Bean
    public AmazonSNS amazonSNS(final AWSCredentialsProvider awsCredentialsProvider) {
        final AmazonSNS amazonSNS = AmazonSNSClientBuilder.standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4575", "us-east-1"))
                .withCredentials(awsCredentialsProvider)
                .build();
        amazonSNS.createTopic(AmazonSNSConfig.AWS_SNS_TOPIC);
        return amazonSNS;
    }

@solveretur @lucienfregosi Thanks for reporting, and thanks for confirming the fix - glad we were able to get it running in the end. 馃憤

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jishi picture jishi  路  3Comments

lpegoraro picture lpegoraro  路  3Comments

jeson114 picture jeson114  路  3Comments

sabrehagen picture sabrehagen  路  3Comments

jakubov picture jakubov  路  3Comments