Amazon web services Amazon SES 535身份验证凭据尝试旋转访问密钥无效

Amazon web services Amazon SES 535身份验证凭据尝试旋转访问密钥无效,amazon-web-services,email,aws-cli,amazon-ses,Amazon Web Services,Email,Aws Cli,Amazon Ses,我们有一个Amazon SES设置,运行良好,每天通过SMTP发送数千封电子邮件。试图遵循“旋转”访问键的最佳实践 以及为用于发送电子邮件的同一用户创建新的访问密钥。新密钥应该是活动的,但当尝试使用访问密钥发送电子邮件时,我们会不断收到 535 Authentication Credentials Invalid 切换到旧的访问密钥效果很好,并且可以发送电子邮件。尝试了几次删除新的访问密钥并创建其他密钥。同样的机器,同样的软件。我们有适当的复制+粘贴技能,以确保我们使用的是来自亚马逊的CSV中

我们有一个Amazon SES设置,运行良好,每天通过SMTP发送数千封电子邮件。试图遵循“旋转”访问键的最佳实践 以及为用于发送电子邮件的同一用户创建新的访问密钥。新密钥应该是活动的,但当尝试使用访问密钥发送电子邮件时,我们会不断收到

535 Authentication Credentials Invalid
切换到旧的访问密钥效果很好,并且可以发送电子邮件。尝试了几次删除新的访问密钥并创建其他密钥。同样的机器,同样的软件。我们有适当的复制+粘贴技能,以确保我们使用的是来自亚马逊的CSV中提供的相同ID/密码。下面是来自Amazon的对话框:


发生了什么事?新钥匙激活前有时间限制吗?是否存在其他隐藏的限制?

您将SMTP凭据与
访问密钥和
机密密钥混为一谈。他们是不同的

  • 访问\u key/secret-->在SDK和CLI中使用
  • SMTP凭据-->用于配置SES SMTP

  • 您正在创建新的访问密钥/密码并将其用作SMTP凭据

  • 而是创建一个新的SMTP凭据并使用它
  • 密钥旋转与SMTP凭据旋转不同
  • 无需创建新用户
即使生成另一组
access\u key/secret
,您使用的SMTP凭据也可能不会更改。在您的情况下,看起来您使用的是SMTP服务器,而不是SDK。因此,生成一组新的
access\u key/secret
对SMTP凭据没有影响

如果要创建一组新的SMTP凭据,请转到AWS SES仪表板并创建SMTP凭据


有关更多信息:

是的,AWS接近SES SMTP密码的方式有一个隐藏的限制。他们使用一种非常混乱的方式来处理这些凭证

这个结论是正确的,但并不完全正确。AWS和他的回答都告诉我们Access_key/Secret_key和SES SMTP凭据是不同的东西,但是:

  • 如果创建新的SES SMTP凭据,它将创建一个具有访问密钥/密钥对的新IAM用户
  • 访问密钥Id与SMTP的用户名相同
  • 如果删除或禁用此密钥,您将失去SMTP访问权限。因此,它们显然非常相关
  • SMTP的密码是从密钥派生的
事实证明,现有IAM用户上的新访问密钥/机密密钥对可用于SMTP,因此可以在不创建新用户的情况下旋转密钥。 AWS转换机密访问密钥以生成SMTP密码,如中所述:

以下伪代码显示了将AWS秘密访问密钥转换为Amazon SES SMTP密码的算法

key = AWS Secret Access Key;
message = "SendRawEmail";
versionInBytes = 0x02;
signatureInBytes = HmacSha256(message, key);
signatureAndVer = Concatenate(versionInBytes, signatureInBytes);
smtpPassword = Base64(signatureAndVer);
因此,可以使用秘密访问密钥生成SMTP密码
安装bash和openssl后,以下命令将输出用于SMTP的密码:

(echo -en "\x02"; echo -n 'SendRawEmail' \
  | openssl dgst -sha256 -hmac $AWS_SECRET_ACCESS_KEY -binary) \
  | openssl enc -base64

只需将$AWS\u SECRET\u ACCESS\u KEY替换为您的密钥,或者预先设置变量

我们已经添加了所用对话框的屏幕截图。这是主动用于通过SMTP发送电子邮件的用户,因此,如果理解正确,该用户具有SMTP凭据。我们正在尝试旋转用户的访问键,而不是创建另一个用户。请再次尝试阅读我的答案。你似乎不明白其中的区别。您正在创建新密钥并将其用作SMTP凭据,这将不起作用。正如我在回答中所说,SMTP凭据和访问密钥是不同的。我的回答中没有提到你必须创建一个新用户。谢谢你的回复。这是非常令人困惑的。创建SMTP凭据将创建新用户,并且该用户的“安全凭据”下显示的访问密钥(用户/密码)不是用于发送SMTP的用户/密码。因此,虽然Amazon鼓励“旋转”访问密钥,但这些密钥不能用于SMTP发送,而有效地“旋转”SMTP发送密码的唯一方法是创建新的SMTP凭据(也意味着新用户)。我们发现这确实令人困惑,希望你的答案能帮助其他人。是的,我们必须创建一个新的SMTP凭据来轮换访问密钥,这很奇怪,但它可以工作。如果只是为现有的ses smtp用户创建访问密钥,它将不起作用。此外,文档的最后一行表示,如果要更改SMTP密码,请转到IAM控制台并删除现有IAM用户,然后转到Amazon SES控制台重新生成SMTP凭据。但是,您希望保留老用户一段时间,直到您确定它处于非活动状态。这很方便!谢谢。AWS文档已将其代码示例更新为使用版本“0x04”,并具有不同的设置。虽然代码示例到目前为止仍然有效,但请注意,将来他们可能会放弃对版本“0x02”的支持。此方法原则上是正确的。然而,它已经过时了。最好的方法是使用这个答案的官方页面中给出的python代码。它对我有用。