Search code examples
spring-bootamazon-s3spring-cloudspring-vault

Automatically renew AWS credentials in a Spring Boot application using Spring Cloud Vault


I'm trying to create a Spring Boot application that regularly fetch data from AWS S3.

The AWS S3 credentials are fetched from Vault using Spring Cloud Vault when the application start.

My issue is that AWS S3 credentials have a limited lifespan due to Vault policy so I have to restart my application from time to time to obtain new credentials from Vault

Is there a way to automatically restart bean using those credentials?


Solution

  • TL;DR

    No, there is no automatism, but you can do this yourself.

    The longer read

    Spring Boot and Spring Cloud aren't really intended for applying continuous updates to the configuration without interruption. Spring Cloud Config ships with Refresh Scope support that allows to annotate beans with @RefreshScope and trigger a refresh of the beans that get re-initialized. This approach requires either integration with a message bus or triggering the refresh endpoint.

    The other alternative, which is limited to AWS functionality, is providing an own AWSCredentialsProvider implementation that is backed by a Vault PropertySource that applies rotation to your credential. This requires you to provide a bit of code that integrates with VaultConfigurer or even directly via SecretLeaseContainer to get secret lifecycle event callbacks. See here for an integration example.

    There is a ticket asking for the same question that contains background why this pattern isn't widely applicable.