本地运行AWS SQS应用遇ExpiredToken错误,求解决方案
本地运行AWS SQS应用时ExpiredToken错误解决方案
问题说明
应用在AWS DEV环境运行正常,但本地启动时抛出凭证过期错误,无法创建SQS消息监听容器。
报错信息
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMessageListenerContainer' defined in class path resource [org/springframework/cloud/aws/messaging/config/annotation/SqsConfiguration.class]: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 0b2aff94-b7d4-5ec2-bb37-a053044e8c2f; Proxy: null)
现有配置类
AWS SQS连接配置类
@Configuration @EnableSqs public class AwsSqsConfig { @Bean public SimpleMessageListenerContainerFactory simpleMessageListenerContainerAddAndPlanListQueue(AmazonSQSAsync amazonSQSAsync) { SimpleMessageListenerContainerFactory simpleMessageListenerContainer = new SimpleMessageListenerContainerFactory(); simpleMessageListenerContainer.setAmazonSqs(amazonSQSAsync); simpleMessageListenerContainer.setAutoStartup(true); simpleMessageListenerContainer.setMaxNumberOfMessages(15); simpleMessageListenerContainer.setWaitTimeOut(1); simpleMessageListenerContainer.setBackOffTime(Long.valueOf(20000)); return simpleMessageListenerContainer; } }
本地默认凭证配置类
@Configuration public class AWSConfig { @Bean public AwsCredentialsProvider awsCredentialsProvider() { return DefaultCredentialsProvider.create(); } }
解决方案
- 更新本地AWS凭证
DefaultCredentialsProvider会按优先级加载本地凭证(环境变量、~/.aws/credentials文件、ECS任务角色等),报错说明当前本地使用的凭证已过期。直接编辑~/.aws/credentials文件,替换为有效的aws_access_key_id和aws_secret_access_key;或通过AWS CLI执行aws configure命令重新配置。 - 临时指定凭证(仅开发调试)
可在本地配置文件(如application-dev.yml)中添加有效凭证(注意不要提交到代码仓库):
也可临时修改cloud: aws: credentials: access-key: 你的有效AccessKey secret-key: 你的有效SecretKey region: static: 你的AWS区域(如us-east-1)AWSConfig类硬编码凭证(仅调试用,生产环境禁止):@Configuration public class AWSConfig { @Bean public AwsCredentialsProvider awsCredentialsProvider() { return AwsBasicCredentials.create("你的有效AccessKey", "你的有效SecretKey"); } } - 验证凭证权限
确保新配置的IAM用户拥有SQS相关权限(如sqs:ReceiveMessage、sqs:DeleteMessage、sqs:GetQueueAttributes等),避免因权限不足引发类似403错误。 - 禁用本地SQS自动启动(可选)
若本地开发无需监听SQS,可修改AwsSqsConfig中的自动启动配置,跳过SQS连接:simpleMessageListenerContainer.setAutoStartup(false);
内容的提问来源于stack exchange,提问作者suneel meena
相关产品推荐
相关产品推荐

