在启动时检查 EC2 实例是否有必需的标签 - AWS Prescriptive Guidance

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

在启动时检查 EC2 实例是否有必需的标签

由 Susanne Kangnoh (AWS) 和 Archit Mathur (AWS) 创建

摘要

亚马逊弹性计算云 (Amazon EC2) 在亚马逊网络服务 (AWS) 云中提供可扩展的计算容量。使用 Amazon,您 EC2 无需预先投资硬件,因此您可以更快地开发和部署应用程序。

您可以使用标签以不同的方式对您的 AWS 资源进行分类。 EC2 当您的账户中有许多资源并且想要根据标签快速识别特定资源时,实例标记非常有用。您可以使用标签为 EC2 实例分配自定义元数据。每个标签都由用户定义的键和值组成。我们建议您创建一组一致的标签以满足您的组织要求。 

此模式提供了一个 AWS CloudFormation 模板来帮助您监控 EC2 实例中是否存在特定标签。该模板创建一个 Amazon Events CloudWatch 事件,用于监视 AWS CloudTrail TagResourceUntagResource事件,以检测新的 EC2 实例标记或标签移除。如果缺少预定义标签,它会调用 AWS Lambda 函数,该函数会使用 Amazon Simple Notification Service (Amazon SNS) 向您提供的电子邮件地址发送违规消息。 

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • 用于上传提供的 Lambda 代码的 Amazon Simple Storage Service (Amazon S3)存储桶。

  • 您希望接收违规通知的电子邮件地址。

限制

  • 此解决方案支持 CloudTrail TagResourceUntagResource活动。它不会为任何其他事件创建通知。

  • 此解决方案仅检查标签键。它并不监视键值。

架构

工作流程架构

AWS workflow diagram showing EC2 instance launch triggering Lambda function via CloudTrail and CloudWatch events.

自动化和扩缩

  • 您可以针对不同的 AWS 区域和账户多次使用 AWS CloudFormation 模板。您只需在每个区域或账户中运行该模板一次。

工具

Amazon Web Services

  • 亚马逊 EC2 — Amazon Elastic Compute Cloud (Amazon EC2) 是一项网络服务,可在云中提供安全、可调整大小的计算容量。该服务旨在降低开发人员进行网络规模级云计算的难度。

  • AWS CloudTrail — CloudTrail 是一项 AWS 服务,可帮助您对 AWS 账户进行治理、合规以及运营和风险审计。用户、角色或 AWS 服务采取的操作在中记录为事件 CloudTrail。 

  • Amazon CloudWatch Events — Amazon CloudWatch Events 提供近乎实时的系统事件流,这些事件描述了 AWS 资源的变化。 CloudWatch 通过发送消息以响应环境、激活功能、进行更改和捕获状态信息,事件会在操作变化发生时意识到这些变化,并在必要时采取纠正措施。 

  • AWS Lambda — AWS Lambda 是一项计算服务,使您无需预置或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。 

  • Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一项高度可扩展的对象存储服务,可用于各种存储解决方案,包括网站、移动应用程序、备份和数据湖。

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) 是一项 Web 服务,可让应用程序、终端用户和设备即时发送和接收来自云端的通知。

代码

此模式包括一个包含两个文件的附件:

  • index.zip 是压缩文件,其中包含此模式的 Lambda 代码。

  • ec2-require-tags.yaml是部署 Lambda 代码的 CloudFormation 模板。

有关如何使用这些文件的信息,请参阅操作说明部分。

操作说明

Task描述所需技能
将代码上传到 S3 存储桶。

创建新的 S3 存储桶或使用现有 S3 存储桶上传附加的 index.zip 文件(Lambda 代码)。此存储桶必须与您要监控的资源(EC2 实例)位于同一 AWS 区域。

云架构师
部署 CloudFormation 模板。

在与 S3 存储桶相同的 AWS 区域中打开 Cloudformation 控制台,然后部署附件中提供的 ec2-require-tags.yaml 文件。在下一个操作说明中,提供模板参数的值。 

云架构师
Task描述所需技能
提供 S3 存储桶名称。

输入您在第一篇操作说明中创建或选择的 S3 存储桶的名称。此 S3 存储桶包含 Lambda 代码的.zip 文件,并且必须与模板和 EC2 要监控 CloudFormation 的实例位于相同的 AWS 区域。

云架构师
提供 S3 密钥。

提供 Lambda 代码 .zip 文件在 S3 存储桶中的位置,不带前导斜杠(例如,index.zipcontrols/index.zip)。

云架构师
提供电子邮箱地址。

提供要接收违规通知的活动电子邮件地址。

云架构师
定义日志记录级别。

指定日志记录级别和详细程度。Info 指定有关应用程序进度的详细信息消息,应仅用于调试。Error 指定仍允许应用程序继续运行的错误事件。Warning 表示潜在的有害情况。

云架构师
输入所需标签密钥。

输入要检查的标签键。如果要指定多个密钥,请用逗号分隔,不要使用空格。(例如,ApplicationId,CreatedBy,Environment,Organization 搜索四个密钥。) Events CloudWatch 事件搜索这些标签密钥,如果找不到则发送通知。

云架构师
Task描述所需技能
确认电子邮件订阅。

成功部署 CloudFormation 模板后,它会向您提供的电子邮件地址发送一封订阅电子邮件。要接收通知,您必须确认此电子邮件订阅。 

云架构师

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip