获取亚马逊SESSMTP凭证 - Amazon Simple Email Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

获取亚马逊SESSMTP凭证

您需要亚马逊SESSMTP凭证才能访问该SESSMTP界面。

您用于通过SESSMTP界面发送电子邮件的凭证在每个 AWS 地区都是唯一的。如果您使用该SESSMTP界面在多个区域发送电子邮件,则必须为计划使用的每个区域生成一组SMTP证书。

您的SMTP密码与您的 AWS 私有访问密钥不同。有关凭证的更多信息,请参阅Amazon SES 凭证的类型

注意

SMTP非洲(开普敦)、亚太地区(雅加达)、欧洲(米兰)、以色列(特拉维夫)和中东(巴林)目前不提供终端节点。

使用SES控制台获取SESSMTP证书

要求

IAM用户可以创建SESSMTP证书,但用户的策略必须授予他们使用IAM自己的权限,因为SESSMTP凭证是通过使用创建的IAM。您的IAM策略必须允许您执行以下IAM操作:iam:ListUsersiam:CreateUseriam:CreateAccessKey、和iam:PutUserPolicy。如果您尝试使用控制台创建SESSMTP证书,但您的IAM用户没有这些权限,则会看到一条错误消息,指出您的账户 “无权执行 iam:” ListUsers。

创建您的SMTP凭证
  1. 登录 AWS Management Console 并打开 Amazon SES 控制台,网址为https://console.aws.amazon.com/ses/

  2. 在左侧导航窗格中选择SMTP设置-这将打开简单邮件传输协议 (SMTP) 设置页面。

  3. 选择右上角的 “创建SMTP凭据”-IAM 控制台将打开。

  4. (可选)如果您需要查看、编辑或删除已创建的SMTP用户,请选择右下角的 “管理我的现有SMTP凭证”,IAM控制台将打开。按照以下步骤提供了管理SMTP凭证的详细信息。

  5. 在 “为创建用户” 中SMTP,在 “SMTP用户名” 字段中键入用户的名称。或者,您可以使用此字段中提供的默认值。完成后,选择右下角的创建用户

  6. 选择 “在SMTP密码下方显示”-屏幕上会显示您的SMTP凭据。

  7. 通过选择下载 .csv 文件以下载这些凭证,或将其复制并存储在安全的位置,因为您在关闭此对话框之后无法查看或保存凭证。

  8. 选择 “返回SES主机”。

您可以在IAM控制台的访问管理下使用此过程查看您创建的SMTP凭证列表,然后选择用户,然后使用搜索栏查找您分配了SMTP凭据的所有用户。

您也可以使用IAM控制台删除现有SMTP用户。要了解有关删除用户的更多信息,请参阅《IAM入门指南》中的管理IAM用户

如果要更改SMTP密码,请在IAM控制台中删除现有SMTP用户。然后,要生成一组新的SMTP凭证,请完成前面的步骤。

通过转换现有SESSMTP证书获取 AWS 证书

如果您有使用IAM界面设置的用户,则可以从其SESSMTP凭据中获取该用户的 AWS 证书。

重要

不要使用临时 AWS 证书来派生SMTP证书。该SESSMTP接口不支持从临时安全SMTP证书生成的证书。

使用IAM户能够使用SESSMTP界面发送电子邮件
  1. 按照以下步骤,使用本节中提供的算法,从其 AWS 凭证中派生出用户的凭证。SMTP

    由于您是从 AWS 凭据开始的,因此SMTP用户名与 AWS 访问密钥 ID 相同,因此您只需要生成SMTP密码即可。

  2. 登录 AWS Management Console 并打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  3. 访问管理下,选择策略,然后选择创建策略

  4. 策略编辑器中,选择JSON并删除编辑器中的任何示例代码。

  5. 将以下权限策略粘贴到编辑器中:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
  6. 选择 “下一步”,然后在 “策略名称” 字段AmazonSesSendingAccess中输入,然后输入 “创建策略”。

  7. 访问管理下,选择用户组,然后选择创建群组

  8. 在 “用户组名” 字段AWSSESSendingGroupDoNotRename中输入。

  9. 从 “向组中添加SMTP用户” 表格中选择用户,即可将用户添加到群组

  10. 附加之前创建的AmazonSesSendingAccess策略,方法是从 “附加权限策略” 表中选择该策略,然后选择 “创建用户组”。

有关SES与一起使用的更多信息IAM,请参阅Amazon SES 中的 Identity and Access Management

注意

尽管您可以为任何IAM用户生成SESSMTP证书,但我们建议您在生成SMTP凭证时创建一个单独的IAM用户。有关为特定目的创建用户是最佳做法的信息,请访问IAM最佳实践

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

// Modify this variable to include your AWS secret access key key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"; // Modify this variable to refer to the AWS Region that you want to use to send email. region = "us-west-2"; // The values of the following variables should always stay the same. date = "11111111"; service = "ses"; terminal = "aws4_request"; message = "SendRawEmail"; version = 0x04; kDate = HmacSha256(date, "AWS4" + key); kRegion = HmacSha256(region, kDate); kService = HmacSha256(service, kRegion); kTerminal = HmacSha256(terminal, kService); kMessage = HmacSha256(message, kTerminal); signatureAndVersion = Concatenate(version, kMessage); smtpPassword = Base64(signatureAndVersion);

某些编程语言包含可用于将IAM私有访问密钥转换为SMTP密码的库。本节包含一个代码示例,您可以使用该示例使用 Python 将私有访问 AWS 密钥转换为SESSMTP密码。

注意

以下示例使用 Python 3.6 中推出的 f-string;如果使用较旧的版本,那么它们无法工作。

目前,PythonSDK(Boto3)正式支持 2.7 和 3.6(或更高版本)。然而,2.7 支持已被弃用,并且将在 2021 年 7 月 15 日删除,因此您需要至少升级到 3.6 版本。

Python
#!/usr/bin/env python3 import hmac import hashlib import base64 import argparse SMTP_REGIONS = [ "us-east-2", # US East (Ohio) "us-east-1", # US East (N. Virginia) "us-west-2", # US West (Oregon) "ap-south-1", # Asia Pacific (Mumbai) "ap-northeast-2", # Asia Pacific (Seoul) "ap-southeast-1", # Asia Pacific (Singapore) "ap-southeast-2", # Asia Pacific (Sydney) "ap-northeast-1", # Asia Pacific (Tokyo) "ca-central-1", # Canada (Central) "eu-central-1", # Europe (Frankfurt) "eu-west-1", # Europe (Ireland) "eu-west-2", # Europe (London) "eu-south-1", # Europe (Milan) "eu-north-1", # Europe (Stockholm) "sa-east-1", # South America (Sao Paulo) "us-gov-west-1", # AWS GovCloud (US) "us-gov-east-1", # AWS GovCloud (US) ] # These values are required to calculate the signature. Do not change them. DATE = "11111111" SERVICE = "ses" MESSAGE = "SendRawEmail" TERMINAL = "aws4_request" VERSION = 0x04 def sign(key, msg): return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest() def calculate_key(secret_access_key, region): if region not in SMTP_REGIONS: raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.") signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE) signature = sign(signature, region) signature = sign(signature, SERVICE) signature = sign(signature, TERMINAL) signature = sign(signature, MESSAGE) signature_and_version = bytes([VERSION]) + signature smtp_password = base64.b64encode(signature_and_version) return smtp_password.decode("utf-8") def main(): parser = argparse.ArgumentParser( description="Convert a Secret Access Key to an SMTP password." ) parser.add_argument("secret", help="The Secret Access Key to convert.") parser.add_argument( "region", help="The AWS Region where the SMTP password will be used.", choices=SMTP_REGIONS, ) args = parser.parse_args() print(calculate_key(args.secret, args.region)) if __name__ == "__main__": main()

要使用此脚本获取SMTP密码,请将前面的代码另存为smtp_credentials_generate.py。然后,在命令行处,运行以下命令:

python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1

在上述命令中,执行以下操作:

  • Replace(替换) path/to/ 其中包含您保存的位置的路径smtp_credentials_generate.py

  • Replace(替换) wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 使用要转换为SMTP密码的私有访问密钥。

  • Replace(替换) us-east-1 以及您要使用SMTP凭证的 AWS 区域。

此脚本成功运行后,唯一的输出就是您的SMTP密码。

将SMTP用户从现有内联策略迁移到组策略(安全建议)

重要

如果您在 2024 年 9 月 6 日之前创建了SESSMTP凭证,则已向您的SMTP用户附加了内联策略和标签。SES正在摆脱内联策略,并鼓励你像安全建议一样这样做。

在将SMTP用户从现有内联策略迁移到组策略之前,必须先使用SES权限策略创建一个IAM用户组来取代内联策略。如果您已经创建了此IAM用户组,或者它是为从 2024 年 9 月 6 日起创建的SMTP凭据自动创建的,则可以直接跳到以下过程中的第 10 步

从现有内联策略迁移到托管组
  1. 登录 AWS Management Console 并打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 访问管理下,选择策略,然后选择创建策略

  3. 策略编辑器中,选择JSON并删除编辑器中的任何示例代码。

  4. 将以下权限策略粘贴到编辑器中:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
  5. 选择 “下一步”,然后在 “策略名称” 字段AmazonSesSendingAccess中输入,然后输入 “创建策略”。

  6. 访问管理下,选择用户组,然后选择创建群组

  7. 在 “用户组名” 字段AWSSESSendingGroupDoNotRename中输入。

  8. 从 “向组中添加SMTP用户” 表格中选择用户,即可将用户添加到群组

  9. 附加之前创建的AmazonSesSendingAccess策略,方法是从 “附加权限策略” 表中选择该策略,然后选择 “创建用户组”。

    现在,您已经使用SES权限策略创建了IAM用户组,您可以按照其余步骤中的说明将SMTP用户从其当前的内联策略迁移到该组策略。

  10. 在 “访问管理” 下,选择 “用户”,然后选择要迁移的SMTP用户。

  11. 选择 “群组” 选项卡,然后选择 “将用户添加到群组”。

  12. 选择群AWSSESSendingGroupDoNotRename组,然后选择将用户添加到群组

  13. 选择 “权限” 选项卡,确认在 “策略名称” 列中列出了两行,一行是内联的,另一行是群组AWSSESSendingGroupDoNotRename列在 “附加方式” 列中。AmazonSesSendingAccess

  14. 仅选择 “策略名称” 列AmazonSesSendingAccess中包含的行,在 “附加方式” 列中选择 “内联”,然后选择 “移除”,然后使用移除策略进行确认。

    验证 “附加方式” 列AWSSESSendingGroupDoNotRename中带有 “群组 的行仍然存在。

  15. 选择 “标签” 选项卡,然后选择 “管理标签”。

  16. 选择 “” 列和 SESConsole” 列InvokedBy中包含的行旁边的 “删除”,然后选择 “保存更改”。

重要

AmazonSesSendingAccess策略(无论是作为内联策略还是群组策略,或者两者兼而有之)必须与SMTP用户保持关联,以确保他们的发送不受影响。只有在将组策略附加到您的用户之后,才会移除内联策略。