云托管-参考邮件
c7n-mailer的Python项目详细描述
c7n mailer:保管邮件
托管的邮件程序实现。出站邮件投递仍然有些困难 特定于组织,所以目前这主要是作为一个例子 实施。
< Buff行情>云托管邮件程序现在可以在Docker容器中轻松运行。单击此处的了解详细信息。
信息中继
保管邮件程序订阅sqs队列,查找用户,并发送电子邮件 通过SES和/或向数据狗发送通知。托管lambda和实例策略可以发送给它。平方排队 应启用跨帐户以在帐户之间发送。
教程
我们从保管邮递员开始的目标是安装邮递员, 并运行一个策略,将电子邮件触发到您的收件箱。
- 在您的笔记本电脑上安装邮件程序(如果您不是以aDocker容器运行的话)
- 或者使用pip install c7n mailer
- 在文本编辑器中,创建一个
mailer.yml
文件来保存mailer配置。 - 在aws控制台中,创建一个新的标准sqs队列(可以快速创建)。
将队列url复制到
mailer.yml
中的队列url
- 在aws中,找到或创建对队列具有读取权限的角色。抓住
角色arn并在
mailer.yml
中将其设置为role
< > >有不同的通知终结点选项,您可以两者结合。
电子邮件:
确保您的电子邮件地址已在SES中验证,并将其设置为
来自
mailer.yml
中的地址。默认情况下,ses处于沙盒模式,其中 必须 验证 每一个电子邮件收件人。如果需要,制作一张aws支持票 退出SES沙盒模式。现在您的
mailer.yml
应该如下所示:queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
(如果您所处的区域不是US-East-1,请设置
区域
)现在让我们制定一个托管策略来填充您的邮件队列。创建一个
test policy.yml
包含此内容的文件(将更新为
和队列
以匹配 环境)policies:-name:c7n-mailer-testresource:sqsfilters:-"tag:MailerTest":absentactions:-type:notifytemplate:defaultpriority_header:'2'subject:testing the c7n mailerto:-you@example.comtransport:type:sqsqueue:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test
数据狗:
进行数据狗集成的标准方法是使用 C7N与AWS CloudWatch集成并使用 数据狗与aws的集成 收集cloudwatch度量。Mailer/Messenger集成仅 对于您不需要或无法使用AWS CloudWatch的情况。
注意这个集成需要datadog python绑定的附加依赖性:
pip install datadog
现在您的
mailer.yml
应该如下所示:queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testdatadog_api_key:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXdatadog_application_key:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
(如果您所处的区域不是US-East-1,请设置
区域
)现在让我们制定一个托管策略来填充您的邮件队列。创建一个
测试策略.yml
:policies:-name:c7n-mailer-testresource:ebsfilters:-Attachments:[]actions:-type:notifyto:-datadog://?metric_name=datadog.metric.name&metric_value_tag=Sizetransport:type:sqsqueue:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test
有一种特殊的
到
格式,指定数据狗传递,并通过url参数包括数据狗配置。- metric_name:是发送到datadog的度量的名称
- metric_value_标记:默认情况下,发送到datadog的metric值是
1
,但如果要使用策略中返回的标记之一,则可以使用属性metric_value_标记对其进行设置,例如,在
test policy.yml
中,使用的值是ebs卷的大小。该值必须是数字,并转换为浮点值。
松弛:
托管邮件程序支持将松弛消息作为sqs传输方法的单独通知机制。启用松弛积分定量,您必须在
mailer.yml
文件下的slack\u标记
字段中指定一个slack标记。queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testslack_token:xoxo-token123
要启用松弛消息传递,策略中会计算几个唯一的字段,如下例所示:
policies: - name: c7n-mailer-test resource: ebs filters: - Attachments: [] actions: - type: notify slack_template: slack to: - slack://owners - slack://foo@bar.com - slack://#custodian-test - slack://webhook/#c7n-webhook-test - slack://tag/resource_tag - https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX transport: type: sqs queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test
slack消息支持使用由slack模板指定的唯一模板字段。此字段是唯一的,用法不会中断 消息的现有功能还在
模板
字段中指定电子邮件模板。但是,此字段是可选的, 如果未指定,邮件程序将使用默认值
slack\u default
邮件程序的slack集成支持以下几种类型的消息传递。它们不是互斥的,可以使用任何类型的组合,但首选方法是传入webhooks
<表><广告> < /广告><正文>需要 松弛令牌
键 键入 注释 否 https://hooks.slack.com/services/t0000000/b0000000/xxxxxxxxxxxxxxxxxxxx
字符串 (首选)发送到传入webhook(频道在webhook中定义) 是 slack://owners
字符串 发送到在电子邮件传递逻辑中生成的收件人列表 是 slack://foo@bar.com
字符串 发送到电子邮件地址指定的收件人 是 松弛度://保管测试
字符串 发送到字符串中指示的空闲通道,即"保管测试" 否 slack://webhook/c7n webhook测试
字符串 (已弃用)发送到松弛的webhook;附加目标频道。重要:这需要在 mailer.yml
是 slack://tag/resource tag
字符串 发送到资源标记中找到的目标。标记中的值示例:https://hooks.slack.com/services/t0000000/b0000000/xxxxxxxxxxxxxxxxxxxxxxxx 松弛传递也可以通过资源的标记名设置。例如,使用"slack://tag/slack_channel"将查找"slack_channel"的标记名,如果在资源上匹配,则将消息传递到该资源标记的值:
松弛频道:https://hooks.slack.com/services/t0000000/b0000000/xxxxxxxxxxxxxxxxxxxx
通过标签交付已经过Webhook测试,但应支持所有交付方法。
splunk http事件收集器(hec)
托管邮件程序支持将splunk实例的http事件收集器(hec)端点作为sqs传输方法的单独通知机制进行传递。要启用splunk hec集成,必须指定hec端点的url以及有效的用户名和令牌:
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testsplunk_hec_url:https://http-inputs-foo.splunkcloud.com/services/collector/eventsplunk_hec_token:268b3cc2-f32e-4a19-a1e8-aee08d86ca7f
要将策略的事件发送到splunk hec终结点,请将
添加到
address notify操作,该操作以splunkhec://index name
格式指定要向其发送事件的splunk索引的名称:policies: - name: c7n-mailer-test resource: ebs filters: - Attachments: [] actions: - type: notify to: - splunkhec://myIndexName transport: type: sqs queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test
地址类型可以是将同一通知操作与其他目的地类型(如电子邮件、Slack、数据狗等)组合在一起。
现在运行:
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
0注意:您可以通过环境变量设置配置文件,例如
export aws\u default\u profile=foo
您将看到类似于以下内容的输出:
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
1检查aws控制台中是否有一个名为
cloud guardian mailer
的新lambda。这个 Mailer每五分钟运行一次,请稍等,然后在中查找电子邮件 收件箱。如果没有出现,请查看lambda的日志以进行调试 信息。如果是的话,恭喜你!你已经离开了 保管邮递员。使用和配置
一旦安装了"developer-install-os-x-el-capitan" rel="nofollow"
c7n mailer
路径上的可执行文件: AWSqueue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
2基本上,c7n mailer所做的是部署lambda(使用 mu)基于 在yaml文件中指定的配置。这里是 文件必须符合的架构, 下面是选项的说明:
<表><广告> < /广告><正文>必需? 键 键入 注释 队列URL
字符串 要侦听的消息队列 起始地址
字符串 默认起始地址 联系人标签
字符串数组 我们应该查看地址信息的标记 标准lambda函数配置 <表><广告>
< /广告><正文>必需? 键 键入 死信配置
对象 内存
整数 区域
字符串 角色
字符串 运行时
字符串 安全组
字符串数组 子网
字符串数组 超时
整数 标准azure函数配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 函数属性
对象 包含 AppInsights
、StorageAccount
和ServicePlan
对象AppInsights
对象 包含 名称
、位置
和资源组名称
属性存储帐户
对象 包含 名称
、位置
和资源组名称
属性服务计划
对象 包含 名称
,位置
,资源组名
,库存
和库存
属性名称
字符串 位置
字符串 默认值: 美国西部2
资源组名
字符串 默认值 云托管
skutier
字符串 默认值: basic
skuname
字符串 默认值: b1
邮件基础结构配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 缓存引擎
字符串 缓存引擎;sqlite或redis 跨账户
对象 要假设返回的帐户以发送到SNS主题 调试
布尔值 调试开/关 ldap绑定
字符串 例如:ou=people,dc=example,dc=com LDAP绑定用户
字符串 例如:foo\bar LDAP绑定密码
字符串 LDAP绑定密码 ldap绑定密码,单位为公里
布尔值 默认为true,大多数人(capone除外)希望将其设置为false。如果设置为true,请确保将kms加密的ldap bind密码作为base64编码字符串包含在ldap bind密码中。 LDAP电子邮件属性
字符串 LDAP电子邮件键
字符串 例如"邮件" ldap_manager_属性
字符串 例如"经理" ldap uid属性
字符串 LDAP用户规则
字符串 LDAP用户标识
字符串 ldap-uri
字符串 例如"ldaps://example.com:636" redis主机
字符串 缓存引擎=redis时的redis主机 Redis U端口
整数 redis端口,默认值:6369 SES区域
字符串 处理SES API调用的AWS区域 SMTP配置
<表><广告> < /广告><正文>必需? 键 <对齐>"left">键入注释 smtp_服务器
字符串 要将lambda角色配置为在专用vpc中与smtpd对话,请参见此处的 smtp_端口
整数 SMTP端口(默认为25个) smtp_ssl
布尔值 默认为true smtp_用户名
字符串 smtp_密码
字符串 如果
smtp_server
未设置,c7n_mailer
将使用aws ses或azure sendgrid。数据狗配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 数据狗API键
字符串 数据狗API键。 数据狗应用程序键
字符串 数据狗应用程序键。 如果c7n_mailer在带有datadog代理的实例/lambda/etc中运行,则不需要这些字段。
松弛配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 松弛令牌
字符串 松弛API令牌 发送网格配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 发送网格API键
字符串 SendGrid API令牌 SendGrid当前仅支持与azure存储队列一起使用azure云。 展开HEC配置
以下配置项是可选的。只有当您向
<表><广告>splunkhec://
目的地发送通知时,才需要标记为"splunk所需"的通知。 < /广告><正文>splunk需要? 键 键入 注释 splunk\u hec\u url
字符串 splunk http事件收集器终结点的url splunk\u hec\u令牌
字符串 显示指定用户名的HEC身份验证令牌 splunk\u删除路径
字符串数组 rfc6901的列表发送到splunk之前要从事件中移除的json指针(如果存在的话) splunk\u操作列表
布尔值 如果为true,则在发送给splunk的顶级消息中添加一个 操作列表,其中包含所有已采取的非通知操作的名称
splunk_max_次尝试
积分呃< / > 尝试将数据发布到splunk hec的最大次数(默认为4次) 最大长度
整数 splunk hec接受的最大数据长度;在此长度上发送的任何消息都将记录错误 sdk配置 <表><广告>
< /广告><正文>必需? 键 键入 注释 http\u代理
字符串 https\u代理
字符串 配置文件
字符串 配置发送电子邮件的策略
出站电子邮件可以通过包含
通知
操作添加到任何策略中。
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
3因此,分解它,添加一个类型为
notify
的操作。您可以指定 用于格式化电子邮件的模板;描述了自定义模板 在下面的to
列表指定电子邮件的预期收件人。您可以指定 电子邮件地址、sns主题、数据狗度量或特殊值。特殊价值观 是资源所有者
,在这种情况下,电子邮件将发送到列出的ownercontact
标记与策略匹配的资源,或事件所有者
用于将发送给用户的基于推送的/实时策略 这是潜在事件的原因。priority_header
表示带有标题的电子邮件的重要性。不同的电子邮件客户端将根据值显示星星、感叹号或标志。应该是1到5之间的字符串。
这两个特殊值都是最大的努力,即如果没有 然后指定
资源所有者
将不会发送电子邮件,如果事件所有者
实例角色或系统帐户不会生成电子邮件。可选的"所有者不在"联系人列表指定仅在以下情况下通知的电子邮件地址
资源所有者
特殊选项找不到任何匹配的所有者联系人 标签.出于参考目的,
notify
操作的json模式:queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
4在azure上使用
需要:
邮件程序支持azure上的azure存储队列传输和sendgrid传递。 此方案的配置只需要对aws部署进行一些小的更改。
您需要在队列上为标识授予
queue data contributor
角色 梅勒正在跑下去。策略中的notify操作将用url反映传输类型
asq
到azure存储队列。例如:queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
5在您的邮件配置中,您需要提供sendGridAPI密钥以及 在您的队列url前面加上
asq://
前缀,让mailer知道它是什么类型的队列:queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
6邮件程序将在每次执行时传输在队列中找到的所有消息,并重试 调用sendGrid失败时发送3次。房颤在重试队列之后 消息将被丢弃。
部署azure功能
如果您有azure,那么
--update lambda
cli选项也将部署azure函数 邮件配置。c7n mailer--config mailer.yml--update lambda
简单的使用消费函数的mailer.yml可能看起来像:
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
7编写电子邮件模板
模板在jinja2中编写。 将扩展名为
.j2
的文件放入a templates目录,并向该目录发送一个pull请求 回购协议。然后,您可以在notify
操作中将其引用为模板 按文件名减去扩展名的变量。以
.html.j2
结尾的模板是 以HTML格式的电子邮件发送,其他所有电子邮件均以纯文本发送。您可以使用
-t
或--templates
cli参数将自定义文件夹与模板一起传递。渲染模板时,下列变量可用:
<表><广告> < /广告><正文>变量 值 收件人
电子邮件地址 资源
与策略筛选器匹配的资源列表 事件
对于基于CWE推送的lambda策略,触发的事件 操作
通知
生成此SQS消息的操作策略
触发此通知操作的策略 帐户
AWS帐户的短名称 区域
执行策略的区域 开始执行
开始执行时间策略 提供以下额外的全局函数:
<表><广告> < /广告><正文>签名 行为 格式化结构(struct)
漂亮地打印一个json结构 资源标签(资源,键)
从资源中检索标记值或返回空字符串,别名为get_resource_tag_value 格式化资源(资源,资源类型)
呈现资源的单行摘要 日期时间格式(utc_str,tz_str='us/eastern',格式='%y%b%d%h:%m%z')
自定义UTC日期时间字符串的呈现 seach(表达式,值)
jmespath使用表达式搜索值 yaml_safe(值)
Yaml翻车机 提供以下额外的Jinja过滤器:
<表><广告> < /广告><正文>过滤器 行为 utc_u string date_u-time_u格式(tz_u str='us/pacific',格式='%y%b%d%h:%m%z')
漂亮的格式日期/时间 30获取日期时间增量
将时间(如未来的"30"天)转换为日期时间字符串。您也可以使用过去的负值。 开发者安装(os x el cap伊坦)
克隆存储库:
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
8安装依赖项(使用virtualenv):
queue_url:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-testrole:arn:aws:iam::123456790:role/c7n-mailer-testfrom_address:you@example.com
9安装扩展:
policies:-name:c7n-mailer-testresource:sqsfilters:-"tag:MailerTest":absentactions:-type:notifytemplate:defaultpriority_header:'2'subject:testing the c7n mailerto:-you@example.comtransport:type:sqsqueue:https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test
0测试模板和收件人
提供一个
c7n mailer replay
entrypoint帮助测试电子邮件通知 和模板。这个脚本对来自云托管自身的实际sqs消息进行操作, 您可以从sqs队列中检索或在本地复制。默认情况下,它期望 消息文件是base64编码的、gzip格式的json,就像c7n发送给sqs一样。与-p
--plain
参数,它将期望消息文件包含纯json。c7n mailer replay
有三种主要操作模式:- 如果没有其他参数,它将呈现策略指定的模板
消息是用于本地计算机的,实际上是从本地计算机发送邮件,就像
c7n mailer
那样。 这只适用于SES,而不是SMTP。 - 使用
-t
--template print
参数,它将记录 接收邮件,并将呈现的邮件正文模板打印到标准输出。 - 使用
-d
--dry run
参数,它将打印实际的电子邮件正文(包括邮件头) 每发送一条消息,都会发送到标准输出。
推荐PyPI第三方库