django aws ses boto3 - 为什么不同的 IAM 凭据用于 verify_email_identity

django aws ses boto3 - why different IAM credentials are used for verify_email_identity

我正在尝试使用 django boto3 aws ses 来发送电子邮件。我注意到 verify_email_identity 使用不同的 IAM 凭据,这个集合实际上在哪里?我没有在我的 Django 应用程序中设置它。

    client = boto3.client('ses', region_name='us-east-1') 
    client.verify_email_identity(EmailAddress="bounce@example.com") -> IAM user B

    conn = mail.get_connection('django_amazon_ses.EmailBackend') -> IAM user A
    email = EmailMessage(
        'Subject', 'Content', 'bounce@example.com', ['to@example.com'],
        headers={'From': 'from@example.com'},
    )
    self.assertGreater(conn.send_messages([email]), 0) -> IAM user A

IAM 用户 A 拥有所有权限(如下所示),但 IAM 用户 B 没有。对我来说很奇怪为什么它使用 IAM 用户 B,这怎么可能?我检查了我所有的代码,IAM 用户 B

没有这样的设置
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail",
                "ses:VerifyEmailIdentity"
            ],
            "Resource": "*"
        }
    ]
}

在 settings.py 中,这是 IAM 用户 A 凭据,我没有在应用程序的任何地方设置 IAM 用户 B,也许在 mac pc 的其他地方,但我不确定。

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')

问题是客户端 = boto3.client 和 verify_email_identity 设置 aws 凭据

django_amazon_ses 后端是为 Django 设计的。因此 can fetch credentials from your settings.

当您直接使用 boto3.client() 时,它不知道您的 Django 设置。它试图 fetch your credentials from several places.

如果您想使用 Django 设置中的凭证,您可以在实例化 boto3 客户端时明确使用它们:

s3_client = boto3.client(
    'ses', 
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, 
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, 
    region_name='us-east-1',
)