如何为现有的 Amazon SES SMTP IAM 用户轮换访问密钥?

上次更新时间:2020 年 8 月 28 日

我想要在 AWS Identity and Access Management (IAM) 中轮换我的 Amazon Simple Email Service (Amazon SES) 简单邮件传输协议 (SMTP) 凭证。我该如何创建与 Amazon SES 兼容的用户名和密码?

解决方法

您在 IAM 控制台中为 SMTP 用户创建的访问密钥与 Amazon SES SMTP 接口不兼容。IAM 控制台中生成的密钥所采用的格式与 Amazon SES SMTP 服务器所需凭证的格式不同。

要为 Amazon SES SMTP 接口设置凭证,请执行以下任意一项操作:

创建新的 Amazon SES SMTP 凭证

1.    使用 Amazon SES 控制台创建新的 Amazon SES SMTP 凭证

2.    在取得新的凭证以后,您可以选择删除 IAM 中的现有 Amazon SES 凭证(如果您不再需要它们)。

将您的现有秘密访问密钥转换成 Amazon SES SMTP 格式

注意:您必须通过以下步骤使用 Python 3 或更高版本。 

1.    更新现有的 IAM 用户策略,以便在最低程度上赋予 ses: SendRawEmail 权限

2.    复制 Python 代码,将秘密访问密钥转换成 Amazon SES SMTP 密码。

3.    将 Python 代码粘贴到文本编辑器,然后将文件保存为 seskey.py

4.    要运行 Python 脚本,请使用以下命令:
对于 -secret,输入您的现有秘密访问密钥。
对于 -region,输入您在使用 SMTP 密码时所在的 AWS 区域。

python3 seskey.py --secret YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P --region us-east-1

5.    该脚本会输出可与 Amazon SES 一起使用的新的秘密访问密钥:

import os      #required to fetch environment varibles
import hmac    #required to compute the HMAC key
import hashlib #required to create a SHA256 hash
import base64  #required to encode the computed key
import sys     #required for system functions (exiting, in this case)

# Fetch the environment variable called AWS_SECRET_ACCESS_KEY, which contains
# the secret access key for your IAM user.
key = os.getenv('AWS_SECRET_ACCESS_KEY',0)

# These varibles are used when calculating the SMTP password. You shouldn't
# change them.
message = 'SendRawEmail'
version = '\x02'

# See if the environment variable exists. If not, quit and show an error.
if key == 0:
    sys.exit("Error: Can't find environment variable AWS_SECRET_ACCESS_KEY.")

# Compute an HMAC-SHA256 key from the AWS secret access key.
signatureInBytes = hmac.new(key.encode('utf-8'),message.encode('utf-8'),hashlib.sha256).digest()
# Prepend the version number to the signature.
signatureAndVersion = version.encode('utf-8') + signatureInBytes
# Base64-encode the string that contains the version number and signature.
smtpPassword = base64.b64encode(signatureAndVersion)
# Decode the string and print it to the console.
print(smtpPassword.decode('utf-8'))

这篇文章对您有帮助吗?


您是否需要账单或技术支持?