我们有一个运行良好的亚马逊SES设置,每天通过SMTP发送数千封电子邮件。尝试遵循“旋转”访问键的最佳实践,我们前往https://console.aws.amazon.com/iam/home并为用于发送电子邮件的完全相同的用户创建新的访问密钥。新密钥据称是活跃的,但在尝试使用访问密钥发送电子邮件时,我们会继续使用
535 Authentication Credentials Invalid
切换到旧的访问密钥很有效,并且会发送电子邮件。尝试了几次删除新的访问密钥并创建其他密钥。同一台机器,相同的软件。我们拥有适当的复制+粘贴技能,以确保我们使用来自亚马逊的CSV中提供的相同ID /密码。来自亚马逊的对话:
发生什么了?在新密钥激活之前是否有时间限制?某处有其他隐藏的限制吗?
您将SMTP凭据与access_key
和secret
混淆。它们是不同的。
即使您生成另一组access_key/secret
,您可能正在使用不会更改的SMTP凭据。在您的情况下,您似乎使用的是SMTP服务器,而不是SDK。因此,生成一组新的access_key/secret
对SMTP凭据没有影响。
如果要创建一组新的SMTP凭据,请转至AWS SES仪表板并创建SMTP凭据。
是的,AWS接近SES的SMTP密码的方式存在隐藏的限制。他们正在使用一种非常混乱的方式处理这些凭据。
answer from helloV在正确的轨道上,但它并不完全正确。 AWS和他的回答都告诉我们Access_key / Secret_key和SES SMTP凭据是不同的东西,但是:
事实证明,现有IAM用户上的新access_key / secret_key对可用于SMTP,因此可以在不创建新用户的情况下轮换密钥。 AWS将秘密访问密钥转换为生成SMTP密码,如this documentation page中所述:
以下伪代码显示将AWS秘密访问密钥转换为Amazon SES SMTP密码的算法。
key = AWS Secret Access Key; message = "SendRawEmail"; versionInBytes = 0x02; signatureInBytes = HmacSha256(message, key); signatureAndVer = Concatenate(versionInBytes, signatureInBytes); smtpPassword = Base64(signatureAndVer);
因此,使用Secret Access密钥,可以生成SMTP密码 安装了bash和openssl后,以下命令将输出用于SMTP的密码:
(echo -en "\x02"; echo -n 'SendRawEmail' \
| openssl dgst -sha256 -hmac $AWS_SECRET_ACCESS_KEY -binary) \
| openssl enc -base64
只需用您的密钥替换$ AWS_SECRET_ACCESS_KEY,或预先设置变量