You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elastic Beanstalk切换至Amazon Linux 2后调用SES报MissingCredentialsError错误

排查思路

1. 先验证EC2实例层面的凭证获取能力

SSH登录到对应EB环境的EC2实例,执行命令:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role

如果返回401/访问拒绝,说明实例元数据服务(IMDS)配置异常;如果正常返回包含AccessKeyId、SecretAccessKey的凭证内容,说明实例角色绑定、权限配置没有问题,问题出在应用侧的SDK或运行环境。

2. 核对AWS SDK版本兼容性

你使用的aws-sdk-rails v2.1.0依赖的aws-sdk-core如果版本低于3.110.0,默认不支持IMDSv2,而Amazon Linux 2的EB环境默认强制开启IMDSv2,旧版本SDK无法适配新的元数据服务校验规则,就会抛出凭证缺失错误。
可通过两种方式验证:

  • 升级aws-sdk-rails到最新兼容版本,重新部署后测试发信
  • 临时关闭EB环境的IMDSv2强制要求:进入EB控制台→对应环境→配置→实例→实例元数据服务,关闭「IMDSv2 必需」选项,重启实例后测试功能,如果恢复正常即可确认是SDK版本兼容性问题。

3. 排查应用运行环境的凭证链优先级

Amazon Linux 2的EB环境中Rails应用默认以webapp用户运行,需要确认:

  • 应用运行环境中没有被注入无效的AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量
  • webapp用户的家目录下没有无效的~/.aws/credentials配置文件
    以上两类配置的优先级高于实例角色凭证,存在错误配置会覆盖实例角色的凭证获取逻辑。

4. 可选调试手段

可在Rails应用中临时添加调试代码,输出凭证链获取结果,判断凭证缺失的具体环节:

Rails.logger.info Aws::CredentialProviderChain.new.resolve

如果输出为nil,说明SDK确实没有从任何凭证源拿到有效凭证,可以结合前面的步骤进一步定位。


内容的提问来源于stack exchange,提问作者stwr667

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:57:03