使用Boto3调用AWS SES SendEmail时遇SignatureDoesNotMatch错误求助
解决AWS SES Boto3签名不匹配错误
排查与修复步骤
- 确认AWS密钥有效性
核对AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,确保无拼写错误、空格或特殊字符。建议直接在AWS控制台IAM用户页重新生成密钥,替换现有配置。 - 强制使用V4签名
Boto3默认采用V4签名,但部分场景可能出现配置异常,可显式指定签名版本:import boto3 from botocore.config import Config ses_config = Config(signature_version='s3v4') ses_client = boto3.client('ses', config=ses_config, region_name='us-east-1') - 匹配SES服务区域
SES仅在特定区域可用,确保客户端指定的region_name与你的SES邮箱验证区域一致(如us-east-1、eu-west-1),区域不匹配会直接导致签名验证失败。 - 检查密钥配置来源
如果你用环境变量或~/.aws/credentials文件配置密钥,确认未被其他程序或配置覆盖。调试时可临时打印当前密钥(仅用于排查,生产环境禁止):import boto3 session = boto3.Session() creds = session.get_credentials() print(creds.access_key) - 验证IAM权限
确保IAM用户拥有ses:SendEmail权限,示例策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendEmail", "Resource": "*" } ] } - 排除网络干扰
若使用代理访问AWS,确认代理未篡改请求头。可尝试在AWS EC2实例中直接测试,排除网络层面问题。
注意:禁止在代码中硬编码AWS密钥,优先使用IAM角色、环境变量或官方配置文件管理密钥。
内容的提问来源于stack exchange,提问作者Karan Parwani
相关产品推荐
相关产品推荐

