当前位置: 首页 > 知识库问答 >
问题:

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

东方和惬
2023-03-14

我们有一个亚马逊SES设置,运行良好,每天通过SMTP发送数千封电子邮件。试图遵循“旋转”访问密钥的最佳实践,我们https://console.aws.amazon.com/iam/home并为用于发送电子邮件的完全相同的用户创建新的访问密钥。新密钥被认为是活动的,但是当试图用访问密钥发送电子邮件时,我们一直在获取

535 Authentication Credentials Invalid

那么这是怎么回事?新密钥激活前有时间限制吗?是否有其他隐藏的限制?

共有3个答案

乔伯寅
2023-03-14

由于秘密密钥和SMTP密码的格式不同,您需要使用AWS提供的算法将秘密密钥转换为SMTP密码。

你可以在这里找到它:https://aws.amazon.com/premiumsupport/knowledge-center/ses-rotate-smtp-access-keys/

纪佐
2023-03-14

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

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

  • 如果创建新的SES SMTP凭据,它将创建一个具有访问密钥/密钥对的新IAM用户
  • 访问密钥Id与SMTP的用户名相同
  • 如果删除或禁用此密钥,您将失去SMTP访问权限。因此,它们显然非常相关
  • SMTP的密码是从密钥派生的

事实证明,现有IAM用户上的新access_key/secret_key对可以用于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);

因此,使用秘密访问密钥,可以在安装bash和openssl的情况下生成SMTP密码
,以下命令将输出密码以在SMTP中使用:

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

只需用您的密钥替换$AWS_SECRET_ACCESS_KEY,或者事先设置变量

沃瑾瑜
2023-03-14

您将SMTP凭据与access\u keysecret混淆。他们是不同的。

>

  • 访问密钥/机密--

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

    即使生成另一组access\u key/secret,您使用的SMTP凭据也可能不会更改。在您的情况下,看起来您使用的是SMTP服务器,而不是SDK。因此,生成一组新的access\u key/secret对SMTP凭据没有影响。

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

    https://imgs.xnip.cn/cj/n/6/dab54be6-8230-4ba1-a0b2-01dc432fc2bd.png" width="100%" height="100%" />

    有关更多信息:获取您的Amazon SES SMTP凭据

  •  类似资料:
    • 我对社交网络分析和twitter api是新手。我想收集关于特定主题的tweets。所以我写了下面的代码 在我的程序中,我需要在哪里提供凭据 谢谢

    • 我正在开发一个Symfony 3.3 web应用程序,其中包括一些捆绑包。 我试图定义一种在数据库中注册管理员用户的方法,如下所示。我可以在数据库中创建该用户,但之后我无法以该用户的身份登录:我总是获得错误的凭据。虽然我知道事情可以安排得更好,但我想了解我没有看到的东西。 因此,我有一个AdminBundle,其中我定义了一个用户类: 和登记册行动 我的security.yml有: 我的confi

    • 问题内容: 实用程序类中有一个静态方法,该方法将从URL下载文件。已经设置了身份验证器,以便如果需要用户名和密码,则可以检索凭据。问题是,只要凭据有效,来自第一个成功连接的凭据将用于每个连接后缀。这是一个问题,因为我们的代码是多用户的,并且由于没有为每个连接检查凭据,所以没有适当凭据的用户可能会下载文件。 这是我们正在使用的代码 第一次下载文件时,我只从getPasswordAuthenticat

    • 我是一个新手开发人员,想学习如何使用人工智能。所以我创建了模型,它根据输入正确响应。因此,我想使用postman对API的调用进行测试,以验证一切正常,并且我的调用中有一个错误:“message”:“请求具有无效的身份验证凭据。应为OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。请参阅https://developers.google.com/identity/sign-in/w

    • 在我的LaravelV5.4项目中,我有两个模型:用户和管理员。 在config/auth.php中,我向警卫和提供者添加了admin,如下所示: 现在在AdminController类中,我想使用Auth::true函数,但默认情况下它使用用户表。我可以在config/auth.php中更改默认值,如下所示,它可以工作,但在这种情况下,我不能为用户使用auth::trunt。 我想将用户设置为默