Amazon SES 535 身份验证凭证尝试轮换访问密钥无效
Amazon SES 535 Authentication Credentials Invalid trying to rotate access key
我们有一个运行良好的 Amazon SES 设置,每天通过 SMTP 发送数千封电子邮件。尝试遵循我们访问的 "rotating" 访问密钥的最佳实践
https://console.aws.amazon.com/iam/home 并为用于发送电子邮件的完全相同的用户创建新的访问密钥。新密钥应该是活动的,但是当尝试使用访问密钥发送电子邮件时,我们不断收到
535 Authentication Credentials Invalid
切换到旧的访问密钥效果很好,并且可以发送电子邮件。尝试了几次以删除新的访问密钥并创建其他访问密钥。同一台机器,相同的软件。我们拥有适当的复制+粘贴技能,以确保我们使用的是来自亚马逊的 CSV 中提供的相同 ID/Password。这是亚马逊的对话:
所以这是怎么回事?新密钥激活之前是否有时间限制?是否还有其他隐藏的限制?
您将 SMTP 凭据与 access_key
和 secret
混淆了。他们是不同的。
- access_key/secret --> 在SDK和CLI中使用
SMTP 凭据 --> 用于配置 SES SMTP
您正在创建一个新的 access_key/secret 并将其用作 SMTP 凭据
- 相反,您创建一个新的 SMTP 凭据并使用它
- 密钥轮换不同于 SMTP 凭据轮换
- 无需创建新用户
很可能您使用的 SMTP 凭据即使您生成另一组 access_key/secret
也不会改变。在您的情况下,您似乎使用的是 SMTP 服务器而不是 SDK。因此生成一组新的 access_key/secret
对 SMTP 凭据没有影响。
如果您想创建一组新的 SMTP 凭据,请转到 AWS SES 仪表板并创建 SMTP 凭据。
是的,AWS 处理 SES 的 SMTP 密码的方式存在隐藏的限制。他们使用一种非常混乱的方式来处理这些凭据。
的方向是正确的,但并不完全正确。 AWS 和他的回答都告诉我们 Access_key/Secret_key 和 SES SMTP 凭证是不同的东西,但是:
- 如果您创建新的 SES SMTP 凭据,它会创建一个具有访问权限 Key/Secret 密钥对的新 IAM 用户
- 访问密钥 ID 与 SMTP 的用户名相同
- 如果删除或禁用此项,您将失去 SMTP 访问权限。所以他们显然非常相关。
- SMTP 的密码来自密钥
事实证明,现有 IAM 用户上的新 access_key/secret_key 对可用于 SMTP,因此无需创建新用户即可轮换密钥。
AWS 转换秘密访问密钥以生成 SMTP 密码,正如他们在 this documentation page:
中解释的那样
The following pseudocode shows the algorithm that converts an AWS Secret Access Key to an Amazon SES SMTP password.
key = AWS Secret Access Key;
message = "SendRawEmail";
versionInBytes = 0x02;
signatureInBytes = HmacSha256(message, key);
signatureAndVer = Concatenate(versionInBytes, signatureInBytes);
smtpPassword = Base64(signatureAndVer);
所以使用Secret Access key,可以生成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 替换为您的密钥,或预先设置变量
由于Secret Key和SMTP Password的格式不同,您需要使用AWS提供的算法将Secret Key转换为SMTP Password
您可以在这里找到它:
https://aws.amazon.com/premiumsupport/knowledge-center/ses-rotate-smtp-access-keys/
我们有一个运行良好的 Amazon SES 设置,每天通过 SMTP 发送数千封电子邮件。尝试遵循我们访问的 "rotating" 访问密钥的最佳实践 https://console.aws.amazon.com/iam/home 并为用于发送电子邮件的完全相同的用户创建新的访问密钥。新密钥应该是活动的,但是当尝试使用访问密钥发送电子邮件时,我们不断收到
535 Authentication Credentials Invalid
切换到旧的访问密钥效果很好,并且可以发送电子邮件。尝试了几次以删除新的访问密钥并创建其他访问密钥。同一台机器,相同的软件。我们拥有适当的复制+粘贴技能,以确保我们使用的是来自亚马逊的 CSV 中提供的相同 ID/Password。这是亚马逊的对话:
所以这是怎么回事?新密钥激活之前是否有时间限制?是否还有其他隐藏的限制?
您将 SMTP 凭据与 access_key
和 secret
混淆了。他们是不同的。
- access_key/secret --> 在SDK和CLI中使用
SMTP 凭据 --> 用于配置 SES SMTP
您正在创建一个新的 access_key/secret 并将其用作 SMTP 凭据
- 相反,您创建一个新的 SMTP 凭据并使用它
- 密钥轮换不同于 SMTP 凭据轮换
- 无需创建新用户
很可能您使用的 SMTP 凭据即使您生成另一组 access_key/secret
也不会改变。在您的情况下,您似乎使用的是 SMTP 服务器而不是 SDK。因此生成一组新的 access_key/secret
对 SMTP 凭据没有影响。
如果您想创建一组新的 SMTP 凭据,请转到 AWS SES 仪表板并创建 SMTP 凭据。
是的,AWS 处理 SES 的 SMTP 密码的方式存在隐藏的限制。他们使用一种非常混乱的方式来处理这些凭据。
- 如果您创建新的 SES SMTP 凭据,它会创建一个具有访问权限 Key/Secret 密钥对的新 IAM 用户
- 访问密钥 ID 与 SMTP 的用户名相同
- 如果删除或禁用此项,您将失去 SMTP 访问权限。所以他们显然非常相关。
- SMTP 的密码来自密钥
事实证明,现有 IAM 用户上的新 access_key/secret_key 对可用于 SMTP,因此无需创建新用户即可轮换密钥。 AWS 转换秘密访问密钥以生成 SMTP 密码,正如他们在 this documentation page:
中解释的那样The following pseudocode shows the algorithm that converts an AWS Secret Access Key to an Amazon SES SMTP password.
key = AWS Secret Access Key; message = "SendRawEmail"; versionInBytes = 0x02; signatureInBytes = HmacSha256(message, key); signatureAndVer = Concatenate(versionInBytes, signatureInBytes); smtpPassword = Base64(signatureAndVer);
所以使用Secret Access key,可以生成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 替换为您的密钥,或预先设置变量
由于Secret Key和SMTP Password的格式不同,您需要使用AWS提供的算法将Secret Key转换为SMTP Password
您可以在这里找到它: https://aws.amazon.com/premiumsupport/knowledge-center/ses-rotate-smtp-access-keys/