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

AWS EKS部署NestJS应用遇SES AccessDenied权限问题求助

问题排查方案

1. 确认AWS SDK凭证优先级问题

AWS SDK的凭证加载优先级为:实例元数据服务(IMDS)角色 > 环境变量 > 本地凭证文件。即使你注入了IAM用户密钥,SDK仍可能优先使用EKS节点的实例角色。

  • 验证方式:进入Pod内部执行curl http://169.254.169.254/latest/meta-data/iam/security-credentials/,查看返回的角色名是否为错误提示中的节点组角色。若是,说明SDK未使用你设置的环境变量凭证。
  • 解决办法:
    • 代码中显式指定使用环境变量凭证:
import { SESClient } from "@aws-sdk/client-ses";

const sesClient = new SESClient({
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
  },
  region: process.env.AWS_REGION,
});
  • 或在Deployment的环境变量中添加AWS_EC2_METADATA_DISABLED=true,禁用IMDS凭证获取。

2. 检查Deployment环境变量注入是否正确

进入Pod内部执行printenv | grep AWS_,确认AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是否存在且值正确。若为空或有误,说明Deployment的环境变量配置存在问题(如Secret挂载错误、env字段书写错误)。

3. 验证IAM用户权限有效性

使用该IAM用户的密钥在本地执行aws ses list-templates --region <你的区域>,检查是否能正常返回结果。若本地也失败,说明IAM用户的权限配置有问题(如策略未关联到用户、策略中的资源/权限配置错误)。

4. 排查IRSA(ServiceAccount关联IAM角色)干扰

若EKS集群配置了IAM Roles for Service Accounts(IRSA),Pod会自动使用关联的IAM角色,覆盖环境变量凭证:

  • 查看Pod关联的ServiceAccount:kubectl describe pod <pod-name> | grep ServiceAccount
  • 检查该ServiceAccount是否有IAM角色注解:kubectl describe sa <sa-name>,查看是否存在eks.amazonaws.com/role-arn注解。若有,需给该IAM角色添加ses:ListTemplates权限,或移除注解让Pod使用环境变量凭证。

5. 检查节点组实例角色的拒绝策略

节点组实例角色若存在明确的Deny策略,会覆盖允许策略。检查该角色的权限策略,确认没有拒绝ses:*或ses:ListTemplates的语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:10:09