1

我正在尝试使用已附加到 EC2 实例的 IAM 角色来生成一组 AWS SES SMTP 凭证。但是,在使用 Amazon 提供的脚本从 IAM 角色的 Secret_Key 生成 SMTP 密码,并使用 IAM 角色的 Access_Key_ID 后,当尝试通过 django.core.mail 发送电子邮件时,我收到错误消息(535, b'Authentication Credentials Invalid')

这就是我发送电子邮件的方式:

#django.core.mail
EMAIL_USE_TLS = True
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = credentials.access_key
EMAIL_HOST_PASSWORD = SMTP_PASSWORD

send_mail(
    'Subject here',
    'Here is the message.',
    'from@example.com',
    ['to@example.com'],
    fail_silently=False,
)

我如何生成密码:

session = boto3.session.Session()
credentials = session.get_credentials().get_frozen_credentials()
region = requests.get('http://169.254.169.254/latest/dynamic/instance-identity/document').json()['region']
SMTP_PASSWORD = smtp_credentials_generate.calculate_key(secret_access_key=credentials.secret_key, region=region)

SMTP 密码生成脚本在这里:https ://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html 。

通过一些研究,我发现这些链接表明您不能使用 IAM 角色来生成 SMTP 凭证:

https://serverfault.com/questions/584789/is-it-possible-to-send-email-via-the-amazon-ses-smtp-service-with-a-iam-role-acc https://hector .dev/2015/01/17/sending-e-mail-via-amazon-ses-over-smtp-with-iam-roles.html

但是,亚马逊官方 QA 表示有可能: https ://aws.amazon.com/premiumsupport/knowledge-center/ses-create-smtp-credentials/

重要提示:您用于创建 SMTP 凭证的 IAM 用户或角色...

那么有没有可能呢?我究竟做错了什么?

4

1 回答 1

0

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html

不要使用临时 AWS 凭证来派生 SMTP 凭证。Amazon SES SMTP 接口不支持从临时安全凭证生成的 SMTP 凭证。

关于您引用的亚马逊官方 QA,它是说您可以使用该角色在 Web 控制台中创建 SMTP 凭证。

于 2021-02-02T18:35:39.197 回答