自动进行AWS资源评估 - AWS Prescriptive Guidance

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

自动进行AWS资源评估

由 Naveen Suthar (AWS)、Arun Bagal ()、Manish Garg (AWS) 和 Sandeep Gawande (AWS) 创作 AWS

摘要

此模式描述了一种使用 AWSCloud Development Kit (AWSCDK) 设置资源评估功能的自动方法。通过使用这种模式,运营团队可以自动收集资源审计详细信息,并在单个仪表板上查看AWS账户中部署的所有资源的详细信息。这在以下用例中很有用:

该解决方案还将帮助领导团队从单个仪表板获取有关AWS账户中资源和活动的见解。

注意

Amazon QuickSight 是一项付费服务。在运行它来分析数据和创建控制面板之前,请先查看 Amazon 的 QuickSight 定价

先决条件和限制

先决条件

限制

  • 此解决方案部署到单个AWS账户。

  • 除非已经设置并将数据存储在 S3 存储桶中,否则AWS CloudTrail 该解决方案不会跟踪部署前发生的事件。

产品版本

  • AWSCDK版本 2.55.1 或更高版本

  • Python 版本 3.9 或更高版本

架构

目标技术堆栈

  • Amazon Athena

  • AWS CloudTrail

  • AWS Glue

  • AWS Lambda

  • Amazon QuickSight

  • Amazon S3

目标架构

该AWSCDK代码将部署在账户中设置资源评估功能所需的所有资源。AWS下图显示了向 AWS Glue、Amazon Athena 和发送 CloudTrail 日志的过程。 QuickSight

AWS通过六步流程与 AWS Glue、Amazon Athena 和 QuickSight 亚马逊进行资源评估。
  1. CloudTrail 将日志发送到 S3 存储桶进行存储。

  2. 事件通知会调用 Lambda 函数,以处理日志并生成经过筛选数据。

  3. 筛选后的数据存储至另一个 S3 存储桶。

  4. 在 S3 存储桶中的筛选数据上设置 AWS Glue 爬虫,以便在 Glue 数据目录表中AWS创建架构。

  5. 筛选后的数据已就绪,可供 Amazon Athena 查询。

  6. 通过访问查询的数据 QuickSight 进行可视化。

自动化和扩缩

  • 如果 Organization AWS s 中有组织范围的 CloudTrail 跟踪,则可以将此解决方案从一个AWS账户扩展到多个账户。AWS通过在组织 CloudTrail 级别部署,您还可以使用此解决方案来获取所有所需资源的资源审计详细信息。

  • 此模式使用AWS无服务器资源来部署解决方案。

工具

AWS 服务

  • Amazon Athena 是一项交互式查询服务,可帮助您使用标准直接在 Amazon S3 中分析数据。SQL

  • AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。

  • AWS CloudFormation帮助您设置AWS资源,快速一致地配置资源,并在各个AWS账户和AWS地区的整个生命周期中对其进行管理。

  • AWS CloudTrail帮助您审计AWS账户的治理、合规和运营风险。

  • AWSGlu e 是一项完全托管的提取、转换和加载 (ETL) 服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。此模式使用 AWS Glue 爬虫和 AWS Glue 数据目录表。

  • AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • Amazon QuickSight 是一项云规模的商业智能 (BI) 服务,可帮助您在单个控制面板中可视化、分析和报告数据。

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

代码存储库

此模式的代码可在 GitHub infrastructure-assessment-iac-automation存储库中找到。

代码存储库包含以下文件和文件夹:

  • lib文件夹-用于创建AWS资源的AWSCDK构造 Python 文件

  • src/lambda_code — 在 Lambda 函数中运行的 Python 代码

  • requirements.txt — 必须安装的所有 Python 依赖项列表

  • cdk.json — 用于提供启动资源所需值的输入文件

最佳实践

为 Lambda 函数设置监控和警报。有关更多信息,请参阅 Lambda 函数监控和故障排除有关使用 Lambda 函数时的一般最佳实践,请参阅文档。AWS

操作说明

任务描述所需技能

在本地机器克隆存储库。

要克隆存储库,请运行 git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git命令。

AWS DevOps, DevOps 工程师

设置 Python 虚拟环境以及安装所需依赖项。

要设置 Python 虚拟环境,请运行以下命令。

cd infrastructure-assessment-iac-automation python3 -m venv .venv source .venv/bin/activate

要设置所需依赖项,请运行命令 pip install -r requirements.txt

AWS DevOps, DevOps 工程师

设置AWSCDK环境并合成AWSCDK代码。

  1. 要在您的AWS账户中设置AWSCDK环境,请运行命令cdk bootstrap aws://ACCOUNT-NUMBER/REGION

  2. 要将代码转换为AWS CloudFormation 堆栈配置,请运行命令cdk synth

AWS DevOps, DevOps 工程师
任务描述所需技能

为待部署堆栈的账户和区域导出变量。

要使用环境变AWSCDK量为提供AWS凭证,请运行以下命令。

export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number> export CDK_DEFAULT_REGION=<region>
AWS DevOps, DevOps 工程师

设置AWSCLI个人资料。

要为账户设置AWSCLI个人资料,请按照AWS文档中的说明进行操作。

AWS DevOps, DevOps 工程师
任务描述所需技能

在账户中部署资源。

要使用在AWS账户中部署资源 AWSCDK,请执行以下操作:

  1. 在克隆存储库根目录中,在 cdk.json 文件中为以下参数提供输入:

    • s3_context

    • ct_context

    • kms_context

    • lambda_context

    • glue_context

    • qs_context

    这些值定义了资源配置和命名方法。默认值已设置,可根据需要进行更改。

    注意

    为避免出错称 S3 存储桶已存在,请确保在ct output部分s3_context中为提供唯一的名称。

  2. 要部署资源,请运行命令 cdk deploy

    cdk deploy命令创建一个 CloudTrail 资源来记录事件并将日志文件保存在输入 S3 存储桶中。追踪日志文件将由 Lambda 函数处理。筛选后的结果存储在输出 S3 存储桶中,可供亚马逊 Athena 和亚马逊使用。 QuickSight

AWS DevOps

运行 AWS Glue 搜寻器并创建数据目录表。

AWSGlue 搜寻器用于保持数据架构的动态性。该解决方案通过按照 Glue 搜寻器AWS调度程序的定义定期运行爬虫来创建和更新 Glue 数据目录表AWS中的分区。在输出 S3 存储桶中有数据后,请使用以下步骤运行 Glue AWS 爬网程序并创建用于测试的数据目录表架构:

  1. 登录AWS管理控制台并导航到 AWS Glue 控制台。

  2. 在导航窗格中,在数据目录下,选择爬网程序

  3. 选择 iac-tool-qa-resource-iac-json-crawler 爬网程序。

  4. 运行爬网程序。

  5. 爬虫成功运行后,它会创建一个 AWS Glue 数据目录表。 AWS QuickSight 将使用该表来可视化数据。

注意

该AWSCDK代码将 AWS Glue 爬虫配置为在特定时间运行,但您也可以按需运行。

AWS DevOps, DevOps 工程师

部署 QuickSight 构造。

  1. 要部署 QuickSight 构造,请取消注释介于#QuickSight setup - start#QuickSight setup – ends中的resource_iac_tool_stack.py代码。

  2. 取消注释后,运行cdk deploy命令在 QuickSight 账户QuickSight DataSet中创建QuickSight DataSource和。

AWS DevOps, DevOps 工程师

创建 QuickSight 仪表板。

要创建示例 QuickSight 仪表板和分析,请执行以下操作:

  1. 导航到 QuickSight 控制台并选择部署资源的AWS区域。

  2. 在导航窗格中,选择数据集,然后验证是否ct-operations-iac-ds已在 Amazon 数据集中创建了一个名为 QuickSight 的数据集。

    如果您看不到数据集,请重新部署 QuickSight 构造。

  3. 选择ct-operations-iac-ds数据集,然后选择 I USEN ANALYSIS

  4. 选择默认工作表。

  5. 从左侧的字段列表中选择相应列。

  6. 选择所需列后,选择适当的视觉类型以查看数据。

有关更多信息,请参阅在 Amazon 中启动分析 QuickSight和在 Amazon 中启动可视化类型 QuickSight

AWS DevOps, DevOps 工程师
任务描述所需技能

移除AWS资源。

  1. 要移除解决方案部署的AWS资源,请运行命令cdk destroy

  2. 从两个 S3 存储桶中删除所有对象,然后移除所有存储桶。

    有关更多信息,请参阅删除存储桶

AWS DevOps, DevOps 工程师
任务描述所需技能

监控和清理手动创建资源。

(可选)如果您的组织有使用 IaC 工具创建资源的合规性要求,则可以通过使用AWS资源评估工具自动化来获取手动配置的资源来实现合规性。您也可以使用此工具将资源导入至 IaC 工具或重新创建这些资源。若要监控手动配置的资源,请执行以下概要任务:

  1. 部署AWS资源评估工具自动化。

  2. 设置 Lambda 函数以每天查询 Athena 表,查找有关手动配置资源的相关数据,然后将其导出到以逗号分隔的值 () 文件中。CSV

  3. Lambda 函数运行后,可以向相应利益相关者发送包含所需数据的通知。

  4. 为了延长保留期,可以将 .csv 文件存储至 S3 存储桶。

  5. 根据.csv 文件中的信息,删除手动创建的资源,或将其导入现有的 IaC 解决方案。

AWS DevOps, DevOps 工程师

故障排除

事务解决方案

AWSCDK返回错误。

有关问题的帮助,请参阅常见AWSCDKAWSCDK问题疑难解答

相关资源

其他信息

多个账户

要为多个账户设置AWSCLI凭证,请使用AWS个人资料。有关更多信息,请参阅 “设置” 中的 “配置多个配置文件” 部分AWSCLI。

AWSCDK命令

使用时 AWSCDK,请记住以下有用的命令:

  • 列出应用程序的所有堆栈

    cdk ls
  • 发射合成后的模板 AWS CloudFormation

    cdk synth
  • 将堆栈部署到您的默认AWS账户和区域

    cdk deploy
  • 将已部署的堆栈与当前状态比较

    cdk diff
  • 打开AWSCDK文档

    cdk docs