View a markdown version of this page

EventBridge 与映像生成器管道一起使用 - EC2 Image Builder

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

EventBridge 与映像生成器管道一起使用

AWS 合作伙伴服务几乎实时地将 EventBridge 活动传输到亚马逊活动总线。您也可以发送自己的自定义事件。事件总线使用规则将每个事件路由到一个或多个目标。

图像生成器 EventBridge 在两个独立的方向上运行:

  • 根据规则开始管道构建。您可以将 Image Builder 管道设置为规则目标,因此在事件与规则匹配或调度触发时 EventBridge 运行管道。请参阅按计划触发管道构建根据事件模式触发管道构建

  • 对图像生成器发送的事件做出反应。当发生重大变化时(例如,当图像变成 CVE AVAILABLE 或扫描检测到 CVE 时),Image Builder 会将事件发布到默认事件总线。您可以将这些事件与规则进行匹配,并将它们路由到 Lambda 函数或 Amazon SNS 主题等目标,以启动自己的自动化。请参阅对图像生成器发送的事件做出反应

有关映像生成器发送的事件以及每个事件中的字段的更多信息,请参阅Image Builder 发送的事件消息

注意

活动巴士是 Region-specific. 规则及其调用的资源通常位于同一个区域;要跨区域进行路由,请将事件总线设定在目标区域。映像生成器将其事件发布到构建运行区域的默认事件总线。

EventBridge 条款

以下术语可帮助您了解如何与您的映像生成器管道 EventBridge 集成。

事件

描述环境中可能影响一个或多个应用程序资源的变化。该环境可以是 AWS 环境、SaaS 合作伙伴服务或应用程序,也可以是您的应用程序或服务之一。您还可以在时间线上设置计划的事件。

事件总线

接收来自应用程序和服务的事件数据的管道。

来源

将事件发送到事件总线的服务或应用程序。

Target

一种资源或端点,在匹配规则时 EventBridge 调用,将数据从事件传送到目标。

规则

规则 规则匹配传入事件并将其路由到目标进行处理。一条规则可以将一个事件发送到多个目标,然后这些目标将可并行运行。规则要么基于事件模式,要么基于计划。

模式

事件模式定义事件结构和规则匹配的字段,以启动目标操作。

Schedule

计划规则在计划中执行操作,例如运行 Image Builder 管道在每个季度刷新映像。有两种类型的计划表达式:

  • Cron 表达式 — 使用可以概述简单条件的 cron 语法匹配特定的调度条件;例如,每周在特定日期运行。您还可以制定更复杂的条件,例如每季度在每月的第五天凌晨 2 点到凌晨 4 点之间运行。

  • rate 表达式-指定调用目标时的固定间隔,例如每 12 小时一次。

查看您的映像生成器管道的 EventBridge 规则

Image Builder Image Pipelines 详细信息页面中的EventBridge 规则选项卡显示 EventBridge 您的账户有权访问的事件总线,以及适用于当前管道的所选事件总线规则。此选项卡还直接链接到用于创建新资源的EventBridge 控制台。

链接到 EventBridge 控制台的操作
  • 创建事件总线

  • 创建规则

要了解更多信息 EventBridge,请参阅亚马逊 EventBridge 用户指南中的以下主题

按计划触发管道构建

将图像生成器管道设置为 EventBridge 计划规则的目标,以定期刷新图像。以下示例创建了一条规则,该规则每 90 天启动一次管道构建。

注意

管道还可以携带自己的内置调度(存储在流水线上的 cron 或速率表达式)。该时间表由 Image Builder 管理,与任何 EventBridge 规则分开:

  • 使用管道计划进行简单的定期重建。它还可以根据依赖项更新来控制构建,并自动禁用失效的管道。请参阅 Schedule EC2 映像生成器 API 参考文档

  • 使用EventBridge 规则从事件模式开始构建,或者将一个触发器分散到多个目标。

AWS 管理控制台
  1. 在以下位置打开 EC2 映像生成器控制台https://console.aws.amazon.com/imagebuilder/

  2. 要查看在您的账户下创建的映像管道列表,请从导航窗格中选择映像管道

    注意

    图像管道列表包括一个指示流水线创建的输出图像类型的指示器,即 AMI 或Docker。

  3. 要查看详细信息或编辑管道,请选择管道名称链接。这将打开管道的详细视图。

    注意

    您也可以选中管道名称旁边的框,然后选择查看详细信息

  4. 打开EventBridge 规则选项卡。

  5. 保留在事件总线面板中预先选择的默认事件总线。

  6. 选择 Create rule(创建规则)。这将带您进入亚马逊 EventBridge 控制台中的创建规则页面。

  7. 为规则输入名称和描述。规则名称在所选区域的事件总线中必须是唯一的。

  8. 定义模式面板中,选择计划选项。这将展开面板,每个选项都选中了 Fixed rate every

  9. 在第一个框中输入 90,然后从下拉列表中选择Days

  10. 选择目标面板中执行以下操作:

    1. 目标 下拉列表中选择 EC2 Image Builder

    2. 要将规则应用于 Image Builder 管道,请从映像管道下拉列表中选择目标管道。

    3. EventBridge 需要权限才能启动所选管道的构建。在此示例中,保留为此特定资源创建新角色的默认选项。

    4. 选择 Add target

  11. 选择 Create(创建)。

注意

当前的 EventBridge 控制台可以通过 EventBridge 调度器创建时间表,并且确切的标签和步骤可能会随着时间的推移而变化。链接的亚马逊 EventBridge 用户指南对当前的主机体验具有权威性。

AWS CLI

这些步骤创建了一条计划规则,该规则每 90 天启动一次管道构建。EventBridge 需要一个 IAM 角色来代入该角色来调用imagebuilder:StartImagePipelineExecution您的管道。

  1. 使用速率表达式创建规则:

    aws events put-rule \ --name refresh-image-every-90-days \ --schedule-expression "rate(90 days)"
  2. 使用此信任策略创建 EventBridge 可以代入的 IAM 角色:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" }] }

    附加允许管道启动的权限策略:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "imagebuilder:StartImagePipelineExecution", "Resource": "arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/my-pipeline" }] }
  3. 引用上一步中的角色,将管道添加为规则的目标:

    aws events put-targets \ --rule refresh-image-every-90-days \ --targets '[{ "Id": "1", "Arn": "arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/my-pipeline", "RoleArn": "arn:aws:iam::111122223333:role/EventBridgeImageBuilderRole" }]'
  4. 确认目标已连接:

    aws events list-targets-by-rule --rule refresh-image-every-90-days
注意

要详细了解本示例中未涵盖的费率表达式规则设置,请参阅亚马逊 EventBridge 用户指南中的费率表达式

根据事件模式触发管道构建

当事件与模式匹配时,您可以开始管道构建,而不是计划。使用事件模式创建规则,然后将您的管道添加为目标(使用中描述的相同 IAM 角色按计划触发管道构建)。

每当特定的基础映像变为时,以下示例就会开始构建,AVAILABLE例如,在依赖映像的基础映像完成后链接构建。resources前缀将规则范围限定为基础镜像,使其仅匹配该图像,而不匹配依赖管道自己的输出:

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder Image State Change"], "detail": { "state": { "status": ["AVAILABLE"] } }, "resources": [{ "prefix": "arn:aws:imagebuilder:us-west-2:111122223333:image/my-base-image/" }] }
重要

将事件模式的范围限定为基础镜像,如本示例中的resources前缀所示。匹配账户中每AVAILABLE张图像的模式也会匹配依赖管道自己的输出图像,这会再次启动管道并创建无休止的构建循环。根据特定的基础图像名称或 ARN 前缀进行过滤,使规则仅匹配您想要的图像。

AWS 管理控制台
  1. 在以下位置打开亚马逊 EventBridge 控制台https://console.aws.amazon.com/events/

  2. 选择规则,然后选择创建规则。保留默认事件总线。

  3. 输入名称和描述。对于规则类型,选择具有事件模式的规则

  4. 对于事件源,选择 “其他”,然后将上面的事件模式粘贴到事件模式框中。

  5. “选择目标” 面板中,EC2 Image Builder从 “目标” 下拉列表中选择,然后从 “图像管道” 下拉列表中选择要构建的管道。

  6. EventBridge 需要权限才能启动管道。保留默认选项,为该特定资源创建新角色

  7. 选择 Create rule(创建规则)。

AWS CLI

创建规则并将管道添加为目标:

aws events put-rule \ --name rebuild-on-base-available \ --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE"]}},"resources":[{"prefix":"arn:aws:imagebuilder:us-west-2:111122223333:image/my-base-image/"}]}' aws events put-targets \ --rule rebuild-on-base-available \ --targets '[{"Id":"1","Arn":"arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/dependent-pipeline","RoleArn":"arn:aws:iam::111122223333:role/EventBridgeImageBuilderRole"}]'

有关您可以匹配的事件及其字段,请参阅Image Builder 发送的事件消息

对图像生成器发送的事件做出反应

当您的资源达到重要点时(例如,当图像更改状态、扫描完成、工作流步骤暂停输入或管道自动禁用时)时,Image Builder 会将事件发布到默认事件总线。您可以将这些事件与规则进行匹配并将它们路由到目标以启动自己的自动化。常见模式包括:

  • 当图像变为AVAILABLEFAILED时,通过 Amazon SNS 主题通知团队。

  • 调用 Lambda 函数在参数存储中注册新的 AMI、启动外部合规性测试或更新部署管道。

  • 当扫描报告关键 CVE 时,将出现安全发现时发出警报。

  • 当工作流程步骤暂停生成时,推动批准WaitForAction工作流程。

要对 Image Builder 发送的事件执行操作,请创建一个事件模式与事件 source (aws.imagebuilder) 相匹配的规则detail-type,并可选择缩小其中的detail字段。然后添加运行自动化的目标。

示例:图像完成时通知(AVAILABLEFAILED

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder Image State Change"], "detail": { "state": { "status": ["AVAILABLE", "FAILED"] } } }

示例:仅在扫描发现关键 CVE 时发出警报

使用数字匹配器,这样干净的扫描就不会触发规则:

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder CVE Detected"], "detail": { "finding-severity-counts": { "critical": [{ "numeric": [">", 0] }] } } }
AWS 管理控制台
  1. 在以下位置打开亚马逊 EventBridge 控制台https://console.aws.amazon.com/events/

  2. 选择规则,然后选择创建规则。保留默认事件总线。

  3. 输入名称和描述。对于规则类型,选择具有事件模式的规则

  4. 对于事件源,选择 “其他”,然后将上面的事件模式之一粘贴到事件模式框中。

  5. 选择您的目标(例如,亚马逊 SNS 主题或 Lambda 函数)并完成目标设置。

  6. 选择 Create rule(创建规则)。

AWS CLI

创建规则并将匹配事件发送到 Amazon SNS 主题:

aws events put-rule \ --name image-available-or-failed \ --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE","FAILED"]}}}' aws events put-targets \ --rule image-available-or-failed \ --targets '[{"Id":"1","Arn":"arn:aws:sns:us-west-2:111122223333:image-status"}]'

EventBridge 还需要权限才能向目标发送事件。有关每种目标类型所需权限的更多信息,请参阅亚马逊 EventBridge 用户指南 EventBridge中的向目标发送事件的权限使用基于资源的亚马逊策略。

注意

当你匹配EC2 Image Builder Workflow Step Waiting事件时,你的目标可以使用事件workflow-step-execution-id中的和RESUMESendWorkflowStepAction进行action呼叫STOP。请参阅WaitForAction