我需要有关如何在AWS凭据过期后更新凭据的建议.

我以这种方式创建一个AmazonSimpleEmailService的Bean:

@Bean
    public AmazonSimpleEmailService getSesClient() {
        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(new STSAssumeRoleSessionCredentialsProvider.Builder("ses-role-us-west-2", "mail-sender")
                        .build()
                        .getCredentials())
                )
                .withRegion(Regions.US_WEST_2).build();
    }

但当我try 使用它时,我收到一个错误:

The security token included in the request is expired (Service: AmazonSimpleEmailService; Status Code: 403; Error Code: ExpiredToken

如果我在每次发送邮件之前创建一个SES客户端实例-它可以正常工作,但在每次使用之前创建一个新实例看起来不是一个好做法.

我理解我通过STSAsSumeRoleSessionCredentialsProvider获得的凭据的问题-它们只是有到期时间.

我想知道是否应该有一种方法来自动更新凭据,当它们即将到期,所以我真的很感激任何关于如何做到这一点的建议.

推荐答案

STSAssumeRoleSessionCredentialsProvider将自动刷新凭据,但您通过获取一组凭据并将其传递到AWSStaticCredentialsProvider实例来阻止该功能.

这应该允许您使用STS提供程序的自动刷新:

@Bean
    public AmazonSimpleEmailService getSesClient() {
        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new STSAssumeRoleSessionCredentialsProvider.Builder("ses-role-us-west-2", "mail-sender")
                        .build()
                )
                .withRegion(Regions.US_WEST_2).build();
    }

Java相关问答推荐

虚拟线程似乎在外部服务调用时阻止运营商线程

无法找到符号错误—Java—封装

在Java中测试DAO方法:假实现与内存数据库

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

在现代操作系统/硬件上按块访问数据值得吗?

@ IdClass with @ Inheritance(策略= InheritanceType. SINGLE_TABLE)

如何以干净的方式访问深度嵌套的对象S属性?

Spring Boot@Cachebale批注未按预期工作

如何创建同一类的另一个对象,该对象位于变量中?

CompleteableFuture是否运行在不同的内核上?

无法使用Java&;TestContainers获取AWS SQS队列的属性

测试容器无法加载类路径初始化脚本

格式中的特定回录键-值对

如何在代码中将行呈现在矩形前面?

Java组件项目中的JavaFX对话框国际化

在JDK Flight Recorder中只记录单个线程

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

在线程Java中调用Interrupt()之后调用Join()

Java 17与Java 8双重表示法

如何通过用户ID向用户发送私信