云托管-参考邮件

c7n-mailer的Python项目详细描述


c7n mailer:保管邮件

托管的邮件程序实现。出站邮件投递仍然有些困难 特定于组织,所以目前这主要是作为一个例子 实施。

< Buff行情>

云托管邮件程序现在可以在Docker容器中轻松运行。单击此处的了解详细信息。

信息中继

保管邮件程序订阅sqs队列,查找用户,并发送电子邮件 通过SES和/或向数据狗发送通知。托管lambda和实例策略可以发送给它。平方排队 应启用跨帐户以在帐户之间发送。

教程

我们从保管邮递员开始的目标是安装邮递员, 并运行一个策略,将电子邮件触发到您的收件箱。

  1. 在您的笔记本电脑上安装邮件程序(如果您不是以aDocker容器运行的话)
    • 或者使用pip install c7n mailer
  2. 在文本编辑器中,创建一个mailer.yml文件来保存mailer配置。
  3. 在aws控制台中,创建一个新的标准sqs队列(可以快速创建)。 将队列url复制到mailer.yml中的队列url
  4. 在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.ymlslack://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路径上的可执行文件: AWS

    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
    2

    基本上,c7n mailer所做的是部署lambda(使用 mu)基于 在yaml文件中指定的配置。这里是 文件必须符合的架构, 下面是选项的说明:

    <表><广告>必需?键键入注释< /广告><正文>队列URL字符串要侦听的消息队列起始地址字符串默认起始地址联系人标签字符串数组 我们应该查看地址信息的标记

    标准lambda函数配置 <表><广告>必需?键键入< /广告><正文>死信配置对象内存整数区域字符串角色字符串运行时字符串安全组字符串数组 子网字符串数组 超时整数

    标准azure函数配置 <表><广告>必需?键键入注释< /广告><正文>函数属性对象包含AppInsightsStorageAccountServicePlan对象 AppInsights对象包含名称位置资源组名称属性存储帐户对象包含名称位置资源组名称属性服务计划对象包含名称位置资源组名库存库存属性名称字符串位置字符串默认值:美国西部2资源组名字符串默认值云托管skutier字符串默认值:basicskuname字符串默认值:b1

    邮件基础结构配置 <表><广告>必需?键键入注释< /广告><正文>缓存引擎字符串缓存引擎;sqlite或redis 跨账户对象要假设返回的帐户以发送到SNS主题调试布尔值调试开/关ldap绑定 字符串例如:ou=people,dc=example,dc=com LDAP绑定用户字符串例如:foo\barLDAP绑定密码字符串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主题、数据狗度量或特殊值。特殊价值观 是

    这两个特殊值都是最大的努力,即如果没有 然后指定资源所有者将不会发送电子邮件,如果 事件所有者实例角色或系统帐户不会生成电子邮件。

    可选的"所有者不在"联系人列表指定仅在以下情况下通知的电子邮件地址 资源所有者特殊选项找不到任何匹配的所有者联系人 标签.

    出于参考目的,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 lambdacli选项也将部署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--templatescli参数将自定义文件夹与模板一起传递。

    渲染模板时,下列变量可用:

    <表><广告>变量值< /广告><正文>收件人电子邮件地址 资源与策略筛选器匹配的资源列表事件对于基于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 replayentrypoint帮助测试电子邮件通知 和模板。这个脚本对来自云托管自身的实际sqs消息进行操作, 您可以从sqs队列中检索或在本地复制。默认情况下,它期望 消息文件是base64编码的、gzip格式的json,就像c7n发送给sqs一样。与 -p--plain参数,它将期望消息文件包含纯json。

    c7n mailer replay有三种主要操作模式:

    • 如果没有其他参数,它将呈现策略指定的模板 消息是用于本地计算机的,实际上是从本地计算机发送邮件,就像c7n mailer那样。 这只适用于SES,而不是SMTP。
    • 使用-t--template print参数,它将记录 接收邮件,并将呈现的邮件正文模板打印到标准输出。
    • 使用-d--dry run参数,它将打印实际的电子邮件正文(包括邮件头) 每发送一条消息,都会发送到标准输出。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java Spring数据JPA+Hibernate在不首先找到父实体的情况下保存子实体   php Java:如何从CLI接收命令   spring为java中的导出数据创建访问文件   java在Windows 8.1上安装Play Framework   java Spring启动白标签错误页面(类型=未找到,状态=404)   java如何在单击时从数组中绘制?   java fn:substringAfter()上次出现   java在IFR语句中使用方法返回   java onPause()或onStop()的名称   对关联对象的关联对象具有条件的java HQL查询   java只打印一次总值,无需迭代   java如何使用抽象Uri buildOn()方法?   如何在Java中执行sudo命令并获得错误输出?   java反射:避免对getConstructor(类<?>…)的未经检查的警告调用作为原始类型类的成员   Java:如何从类中创建的对象调用类方法?   java如何在电子邮件中嵌入图像?   java如何在Android上启用详细GC?   java什么是串行版本id?