我们有一个运行良好的亚马逊SES设置,每天通过SMTP发送数千封电子邮件。我们试图遵循“旋转”访问键的最佳实践 https://console.aws.amazon.com/iam/home并为用于发送电子邮件的完全相同的用户创建新的访问密钥。新密钥据称是活跃的,但在尝试使用访问密钥发送电子邮件时,我们会继续
535 Authentication Credentials Invalid
切换到旧的访问密钥效果很好,并且会发送电子邮件。尝试了几次删除新的访问密钥并创建其他密钥。同一台机器,相同的软件。我们拥有适当的复制+粘贴技能,以确保我们使用来自亚马逊的CSV中提供的相同ID /密码。来自亚马逊的对话框:
那是怎么回事?在新密钥激活之前是否有时间限制?某处有其他隐藏的限制吗?
答案 0 :(得分:9)
您将SMTP凭据与access_key
和secret
混淆。他们是不同的。
SMTP凭据 - >用于配置SES SMTP
您正在创建新的access_key / secret并将其用作SMTP凭据
即使您生成另一组access_key/secret
,也可能使用的SMTP凭据不会更改。在您的情况下,您似乎使用的是SMTP服务器,而不是SDK。因此,生成一组新的access_key/secret
对SMTP凭据没有影响。
如果要创建一组新的SMTP凭据,请转至AWS SES信息中心并创建SMTP凭据。
答案 1 :(得分:4)
是的,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 Secret Access Key转换为Amazon SES SMTP密码的算法。
<div class="container"> <h2>Test:</h2> <div class="row"> <div class="col-sm-3"> <div class="card ml-2" style="width: 20rem;"> <img class="card-img-top" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS0lnPcJXGCIDU-L8lq6wdfh9vFzaLupc405LLlxlcKqx4zYnnQ" alt="Card image cap"> <div class="card-body text-center"> <p class="card-text text-center" style="color:black">Dacia Logan</p> <ul class="list-group list-group-flush"> <li class="list-group-item"> <div class="row"> <div class="col-md-6"> <i class="material-icons"></i><span>15800</span> </div> <div class="col-md-6"> <i class="material-icons"></i><span>Bucuresti</span> </div> </div> </li> </ul> <button href="#" class="btn btn-danger">Save</button> </div> </div> </div> <div class="col-md-3"> <div class="card ml-2" style="width: 20rem;"> <img class="card-img-top" src="https://images.pexels.com/photos/170811/pexels-photo-170811.jpeg?auto=compress&cs=tinysrgb&h=350" alt="Card image cap"> <div class="card-body text-center"> <p class="card-text text-center" style="color:black">Dacia Logan</p> <ul class="list-group list-group-flush"> <li class="list-group-item"> <div class="row"> <div class="col-sm-6"> <i class="material-icons"></i><span>5800</span> </div> <div class="col-sm-6"> <i class="material-icons"></i><span>Bucuresti</span> </div> </div> </li> </ul> <button href="#" class="btn btn-danger">Save</button> </div> </div> </div> <div class="col-md-3"> <div class="card ml-2" style="width: 20rem;"> <img class="card-img-top" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS0lnPcJXGCIDU-L8lq6wdfh9vFzaLupc405LLlxlcKqx4zYnnQ" alt="Card image cap"> <div class="card-body text-center"> <p class="card-text text-center" style="color:black">Dacia Logan</p> <ul class="list-group list-group-flush"> <li class="list-group-item"> <div class="row"> <div class="col-sm-6"> <i class="material-icons"></i><span>5800</span> </div> <div class="col-sm-6"> <i class="material-icons"></i><span>Bucuresti</span> </div> </div> </li> </ul> <button href="#" class="btn btn-danger">Save</button> </div> </div> </div> <div class="col-md-3"> <div class="card" style="width: 20rem;"> <img class="card-img-top" src="https://www.carmag.co.za/wp-content/uploads/2016/11/Golf10.jpg" alt="Card image cap"> <div class="card-body text-center"> <p class="card-text text-center" style="color:black">Dacia Logan</p> <ul class="list-group list-group-flush"> <li class="list-group-item"> <div class="row"> <div class="col-sm-6"> <i class="material-icons"></i><span>5800</span> </div> <div class="col-sm-6"> <i class="material-icons"></i><span>Bucuresti</span> </div> </div> </li> </ul> <button href="#" class="btn btn-danger">Save</button> </div> </div> </div> </div>
因此,使用秘密访问密钥可以生成SMTP密码
安装了bash和openssl后,以下命令将输出用于SMTP的密码:
key = AWS Secret Access Key;
message = "SendRawEmail";
versionInBytes = 0x02;
signatureInBytes = HmacSha256(message, key);
signatureAndVer = Concatenate(versionInBytes, signatureInBytes);
smtpPassword = Base64(signatureAndVer);
只需将$ AWS_SECRET_ACCESS_KEY替换为您的密钥,或预先设置变量