diff --git a/src/main/java/software/amazon/cloudformation/AbstractWrapper.java b/src/main/java/software/amazon/cloudformation/AbstractWrapper.java index 8bedfad1..d8747e5c 100644 --- a/src/main/java/software/amazon/cloudformation/AbstractWrapper.java +++ b/src/main/java/software/amazon/cloudformation/AbstractWrapper.java @@ -150,6 +150,12 @@ public AbstractWrapper(final CredentialsProvider providerCredentialsProvider, // sync. // Both are required parameters when LoggingConfig (optional) is provided when // 'RegisterType'. + // reset provider credentials back to null to avoid reusing stale credentials + this.providerCredentialsProvider.resetCredentials(); + this.providerMetricsPublisher = null; + this.providerEventsLogger = null; + this.cloudWatchLogHelper = null; + if (providerCredentials != null) { if (this.providerCredentialsProvider != null) { this.providerCredentialsProvider.setCredentials(providerCredentials); diff --git a/src/main/java/software/amazon/cloudformation/LambdaWrapper.java b/src/main/java/software/amazon/cloudformation/LambdaWrapper.java index 6565c4ec..0bf9bf04 100644 --- a/src/main/java/software/amazon/cloudformation/LambdaWrapper.java +++ b/src/main/java/software/amazon/cloudformation/LambdaWrapper.java @@ -56,8 +56,8 @@ public void handleRequest(final InputStream inputStream, final OutputStream outp TerminalException { if (platformLogPublisher == null) { platformLogPublisher = new LambdaLogPublisher(context.getLogger()); + this.platformLoggerProxy.addLogPublisher(platformLogPublisher); } - this.platformLoggerProxy.addLogPublisher(platformLogPublisher); processRequest(inputStream, outputStream); outputStream.close(); } diff --git a/src/main/java/software/amazon/cloudformation/injection/CredentialsProvider.java b/src/main/java/software/amazon/cloudformation/injection/CredentialsProvider.java index 8ab62f5c..14be314d 100644 --- a/src/main/java/software/amazon/cloudformation/injection/CredentialsProvider.java +++ b/src/main/java/software/amazon/cloudformation/injection/CredentialsProvider.java @@ -30,4 +30,9 @@ public interface CredentialsProvider { * @param credentials, incoming credentials for the call that is being made */ void setCredentials(Credentials credentials); + + /** + * set credentials back to null to avoid reusing stale creds + */ + void resetCredentials(); } diff --git a/src/main/java/software/amazon/cloudformation/injection/SessionCredentialsProvider.java b/src/main/java/software/amazon/cloudformation/injection/SessionCredentialsProvider.java index 16c07771..521b15f4 100644 --- a/src/main/java/software/amazon/cloudformation/injection/SessionCredentialsProvider.java +++ b/src/main/java/software/amazon/cloudformation/injection/SessionCredentialsProvider.java @@ -29,4 +29,9 @@ public void setCredentials(final Credentials credentials) { this.awsSessionCredentials = AwsSessionCredentials.create(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken()); } + + @Override + public void resetCredentials() { + this.awsSessionCredentials = null; + } } diff --git a/src/test/java/software/amazon/cloudformation/proxy/End2EndCallChainTest.java b/src/test/java/software/amazon/cloudformation/proxy/End2EndCallChainTest.java index 623e2483..9a65aef5 100644 --- a/src/test/java/software/amazon/cloudformation/proxy/End2EndCallChainTest.java +++ b/src/test/java/software/amazon/cloudformation/proxy/End2EndCallChainTest.java @@ -174,6 +174,11 @@ public AwsSessionCredentials get() { public void setCredentials(Credentials credentials) { } + + @Override + public void resetCredentials() { + + } }; }