首页 > 其他分享 >AWS SES 认证策略设置全攻略:轻松掌握简单步骤!

AWS SES 认证策略设置全攻略:轻松掌握简单步骤!

时间:2024-08-04 18:28:47浏览次数:17  
标签:ses aws AWS 全攻略 发送 SES net example 邮件

最近,我有机会设置 Amazon Simple Email Service(以下简称:SES)的认证策略,所以这次写下来作为备忘。

前言

Amazon Simple Email Service(SES)是一项通过 API 端点或 SMTP 接口进行邮件发送的服务。为了使用 SES,您需要创建一个经过验证的 ID,可以是电子邮件地址或域名。只要 ID 状态显示为“已验证”,即可使用。

认证策略可以通过经过验证的 ID 详细页面上的“认证”标签进行设置。通过以 JSON 格式设置特定已验证 ID 的允许或拒绝的 API 操作及其条件,您可以定义和限制每个已验证 ID 的使用方式。

本文将介绍认证策略的使用案例和设置示例。

限制发件人地址

当您希望使用no-reply等无法实际接收邮件的发件人地址时,可以将域名注册为已验证ID。注册域名为已验证ID后,无需单独验证电子邮件地址,您可以从该已验证域名的任意子域名或电子邮件地址发送邮件。然而,这样会导致一些不打算在生产环境中使用的电子邮件地址(例如[email protected])也能作为发件人地址使用。为了防止这种情况,可以使用策略来限制发件人。

以下示例中,发件人被限制为[email protected]

策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "stmt1721805312724",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-west-2:123456789012:identity/example.net",
            "Condition": {
                "StringNotLike": {
                    "ses:FromAddress": "[email protected]"
                }
            }
        }
    ]
}

通过这种方式,可以防止使用意图之外的电子邮件地址进行邮件发送。

$ aws ses send-email --from [email protected] --to [email protected] --subject subject --text body
An error occurred (AccessDenied) when calling the SendEmail operation: User `arn:aws:sts::123456789012:assumed-role/role-for-ec2/i-085d53c347635f98a' is not authorized to perform `ses:SendEmail' on resource `arn:aws:ses:us-west-2:123456789012:identity/example.net'

 

限制邮件的发送目标域

所有新账户最初都会被放置在沙盒环境中,邮件的发送目标被限制为已验证的电子邮件地址或域名。因此,未验证的目标地址不会接收到邮件,所以通常情况下很少需要限制发送目标。不过,对于已经进行上限提升(从沙盒中删除账户)的账户来说,则不受此限制。通过向AWS申请上限提升,账户可以向未验证的电子邮件地址或域名发送邮件。

在沙盒环境中,发送配额为每24小时200封邮件,发送速率为每秒1封邮件。这些限制也可以通过申请上限提升来提高。在提高发送配额和发送速率的同时,如果还希望限制发送目标,可以使用认证策略来实现。

以下示例中,发送目标被限制为*@example.org。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "stmt1721805435092",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": [
                "ses:SendRawEmail",
                "ses:SendEmail"
            ],
            "Resource": "arn:aws:ses:us-west-2:123456789012:identity/example.net",
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "ses:Recipients": "*@example.org"
                }
            }
        }
    ]
}

限制发件人的IP地址

如果不允许与外部通信,并且希望在私有子网内进行邮件发送处理,则可以通过指定IP地址来限制发件人。

以下示例中,发件人被限制为仅允许来自172.31.0.0/16的IP地址。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "stmt1721803415601",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-west-2:123456789012:identity/example.net",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "172.31.0.0/16"
                }
            }
        }
    ]
}

实际上,我在创建了VPC端点的私有子网中设置了CIDR,并尝试了不通过互联网的邮件发送。

$ aws ses send-email --from [email protected] --to [email protected] --subject subject --text body
Connect timeout on endpoint URL: "https://email.us-west-2.amazonaws.com/"

 结果是无法到达 API 端点并超时。官方文档中记录了使用 SMTP 接口连接 SES 的 VPC 端点的步骤。实际上,SES 的 VPC 端点只支持 SMTP 接口,不提供 API 的 VPC 端点。因此,如果不能允许外部通信并希望在私有子网内进行邮件发送处理,就需要使用 SMTP 实现。使用 SMTP 接口有与使用 API 不同的地方,下面简要总结了这些不同之处。

利用通信要件権限付与実装
API 互联网向附加到发送电子邮件的服务(例如 EC2 或 ECS)的 IAM 角色授予权限 直接发出 HTTPS 请求
 使用 AWS 开发工具包
 使用 AWS CLI
SMTP 互联网
 VPC端点
发布并使用访问密钥/秘密密钥作为 SMTP 认证信息 使用支持 SMTP 的软件
 使用 SMTP 兼容语言进行编程

总结

以上、SES 的批准策略尝试总结。个人认为,SES 在 AWS 服务中虽然相对容易导入和验证,但也更容易导致安全事件。希望这能成为大家思考批准策略以防止意外邮件发送的契机。 

标签:ses,aws,AWS,全攻略,发送,SES,net,example,邮件
From: https://blog.csdn.net/rralucard123/article/details/140896819

相关文章

  • AT_abc362_c [ABC362C] Transportation Expenses
    无耻的广告更好的阅读体验~\(N=2\times10^5\),考虑二分答案。所以,答案有单调性吗?或者说,可以二分吗?当然!如果\(x=k\)时可以满足条件,那么\(x=k-1\)时显然只会更少(上面取\(\min\)的基本都没变,变了的去了更少的),一样能满足条件。\(\operatorname{check}\)函数怎么......
  • 玩转微信公众号变现:从新手到专家的全攻略
    个人名片......
  • 什么是AWS S3
    AWSS3(AmazonSimpleStorageService)是亚马逊网络服务(AWS)提供的一种高度可扩展、安全、持久的对象存储服务。它用于存储和检索任意数量的数据,广泛应用于备份和恢复、大数据分析、内容存储和分发等场景。以下是对AWSS3的一些详细介绍:核心功能对象存储:对象:S3中的基本存储单......
  • Enhancing Question Answering for Enterprise Knowledge Bases using Large Language
    本文是LLM系列文章,针对《EnhancingQuestionAnsweringforEnterpriseKnowledgeBasesusingLargeLanguageModels》的翻译。使用大型语言模型增强企业知识库的问答能力摘要1引言2相关工作3前言4方法5实验6结论摘要高效的知识管理在提高企业和组......
  • 论文阅读:Most Probable Densest Subgraphs
    摘要本文提出了一种在不确定图中发现最有可能稠密子图(MPDS)的新方法。不确定图中的每条边都有存在概率,使得计算稠密子图变得複杂。作者定义了稠密子图概率,并证明了计算该概率是#P难的。为了解决这个问题,设计了基于抽样的高效近似算法,并提供了准确性保证。实验结果表明,该方法......
  • 一文搞定:Syncthing多平台文件同步工具安装全攻略
    简介Syncthing是一款开源的文件同步工具,可以通过本地网络或互联网实现多台设备之间的文件同步。与其他同步工具不同,Syncthing强调隐私和安全,确保用户的数据始终处于用户的控制之下。功能与特点开源软件:Syncthing是完全开源的,源代码托管在GitHub上,任何人都可以查看、审查和......
  • 小程序session_key泄露
    1.登录界面抓包现在需要三个参数:iv值,session_key和密文2.利用burp插件AppletPentester解密,修改内容,加密来验证任意用户登录下载地址:https://github.com/mrknow001/BurpAppletPentester/releases/tag/v1.1......
  • AWS开发人工智能:如何基于云进行开发人工智能AI
    随着人工智能技术的飞速发展,企业对高效、易用的AI服务需求日益增长。AmazonBedrock是AWS推出的一项创新服务,旨在为企业提供一个简单、安全的平台,以访问和集成先进的基础模型。本文中九河云将详细介绍AmazonBedrock的功能特点以及其收费方式,帮助用户更好地理解和利用这一服务......
  • 深入理解PHP的$_SESSION机制
    本文由ChatMoney团队出品PHP****中Session的声明与使用在PHP中,Session的设置与管理与Cookie不同,必须首先启动。这通过调用session_start()函数来完成。该函数的语法格式为:boolsession_start(void)注意:在调用session_start()之前不能有任何输出。当用户第一次访问网站时,s......
  • 当在 Windows 中使用 AWSCLI2 msi 安装程序安装另一个 awscli 并通过 pip install aws
    我在“ProgramFiles\Amazon\AWSCLI2”中看到一个aws,然后在“ProgramFiles\Python312”中看到另一个aws?AWSCLI22之前已安装,我还通过pipinstall安装了awscli。我还尝试创建一个别名就像另一个线程中建议的那样,但不起作用。aliasaws='aws.cmd'当同时通......