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

使用IAM角色创建AWS SES SMTP凭据

杨良才
2023-03-14

我正在尝试使用已附加到EC2实例的IAM角色来生成一组AWS SES SMTP凭据。但是,在尝试通过django发送电子邮件时,使用Amazon提供的脚本从IAM角色的密钥生成SMTP密码,并使用IAM角色的访问密钥ID。果心邮件,我收到错误(535,b“身份验证凭据无效”)

这是我发送邮件的方式:

#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用户或角色...

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

共有1个答案

胡禄
2023-03-14

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

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

关于您引用的Amazon官方QA,它表示您可以使用该角色在web控制台中创建SMTP凭据。

 类似资料:
  • 我想知道PySpark是否支持使用IAM角色进行S3访问。具体来说,我有一个业务限制,我必须承担AWS角色才能访问给定的存储桶。使用boto时可以这样做(因为它是API的一部分),但我无法找到关于PySpark是否支持开箱即用的明确答案。 理想情况下,我希望能够在本地以独立模式运行时扮演一个角色,并将我的SparkContext指向该s3路径。我发现非IAM呼叫通常会随之而来: 是否存在提供IAM

  • 我正尝试使用IAM角色从spark读取s3桶中的csv文件,但在上获得 我安装了没有hadoop的Spark 2.4.4,安装了hadoop 3.2.1以及hadoop-aws-3.2.1.jar和aws-java-sdk-1.11.655.jar。我必须安装一个没有hadoop的spark版本,因为作为spark构建一部分的hadoop jars是来自2016年的2.7.3版本。 附加到角色的“

  • 我们在AWS VPC中使用基于角色的IAM凭据。这意味着您永远不会将密钥传递给AWS SDK的客户端。 之前我们使用了PHPSDK。Amazon特别建议在PHP SDK中使用基于角色的身份验证时缓存凭据: https://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#caching-iam-role-credential

  • 场景:我在同一个帐户下有一个EC2实例和一个S3 bucket,我在该EC2上的web应用程序希望访问该bucket中的资源。 在官方文档之后,我使用创建了一个IAM角色,并将其分配给EC2实例。根据我的理解,现在我的web应用程序应该可以访问桶。但是,经过试验,我似乎必须添加桶策略,如下所示: 否则我就被禁止进入。 但是,既然我已经向EC2实例授予了IAM角色,为什么还要使用这个桶策略呢?

  • 我很难使用Condition元素根据cognito-identity.amazonaws.com:子键为用户分配IAM角色。 当使用AWS Cognito设置标识池时,您可以指定一个通过身份验证的角色,我在其中选择了通过应用程序身份验证的角色。 app-authenticated_admin 问题是,无论谁登录,他总是得到app-authenticated的角色,也是一个具有sub ̄555540

  • 我尝试将该角色用作: 但我得到了一个错误: 因此,IAM的角色似乎无法取代 根据http://boto3.readthedocs.io/en/latest/guide/configuration.html 我仍然需要使用密钥,这可能会带来安全风险,即使没有在代码中使用 有没有一种方法可以在不使用aws API凭据的情况下使用具有管理员权限的boto3? 所以基本上: > #!/usr/bin/en