简化多账户部署监控:AWS CloudFormation StackSets 集中式日志解决方案

本文介绍如何通过集中式日志系统简化多账户AWS CloudFormation StackSets部署监控,使用EventBridge和CloudWatch Logs实现跨账户事件收集,提供统一监控视图和故障排查能力。

简化多账户部署监控:AWS CloudFormation StackSets 的集中式日志

引言

随着组织采用多账户策略以提升安全功能和治理能力,AWS CloudFormation StackSets 使组织能够跨多个账户和区域部署基础设施。然而,跨多个账户监控和跟踪这些分布式部署带来了运营挑战。当跨50个账户部署的关键安全基线突然开始失败时,团队面临艰巨的任务:需要单独登录每个账户以了解问题所在和受影响的账户。

这种运营开销随着组织增长呈指数级扩大,要求平台团队花费无数时间在账户间切换并手动关联部署事件。缺乏集中可见性会减慢事件响应速度,并使识别模式或实施主动监控变得困难。在本博客文章中,我们将探讨一种解决方案,将来自多个账户的 AWS CloudFormation 日志集中到单个管理账户中,从而更轻松地监控和排查 StackSets 部署问题。

解决方案架构

我们的解决方案创建一个集中式日志系统,从所有目标账户收集 AWS CloudFormation 事件并将其转发到中央管理账户。这种方法为监控和排查整个组织的 AWS CloudFormation 部署提供了单一管理界面。

图1. 架构图显示事件通过 EventBridge 和 CloudWatch Logs 从成员账户流向管理账户。

该架构包含四个主要组件:

  • 管理账户设置:在组织的管理账户中创建中央事件总线、日志组和必要权限。
  • 目标账户配置:通过 StackSets 部署,配置将 AWS CloudFormation 事件转发到管理账户的事件规则。
  • 资源部署:使用 StackSets 跨目标账户部署公共资源,生成我们想要监控的事件。
  • 监控和可视化:提供仪表板和查询以获取运营洞察。

工作原理

解决方案遵循以下事件流:

  1. 事件生成:目标账户中的 AWS CloudFormation 操作生成事件(堆栈创建、更新、删除、资源更改)。
  2. 事件捕获:每个目标账户中的 Amazon EventBridge 规则根据定义的模式捕获这些 AWS CloudFormation 事件。
  3. 跨账户转发:使用跨账户权限将事件转发到管理账户中的自定义事件总线。
  4. 集中式日志记录:中央事件总线将所有事件路由到具有结构化日志记录的 Amazon CloudWatch 日志组。
  5. 监控和警报:管理员可以从单一位置查看合并的日志、创建自定义查询和设置警报。

先决条件

在实施此解决方案之前,请确保满足以下先决条件:

  • AWS 账户:确保您拥有有效的 AWS 账户。
  • AWS Organizations:您必须设置 AWS Organization 结构,包含一个主要管理账户和多个成员账户。
  • 可信访问:从管理账户启用 AWS CloudFormation StackSets 的可信访问(这允许 StackSets 在成员账户中担任角色)。
  • 适当权限:您必须有权访问管理账户或被配置为委托管理员才能创建和管理 StackSets。

实施深度解析

该解决方案使用两个 AWS CloudFormation 模板共同创建一个全面的监控系统:

1. 管理账户日志设置 (log-setup-management.yaml)

此模板通过创建具有跨账户访问策略的自定义 Amazon EventBridge 事件总线和使用客户管理的 AWS Key Management Service (AWS KMS) 密钥加密的 Amazon CloudWatch 日志组,在管理账户中建立中央日志基础设施。一个关键特性是包含的堆栈集资源会自动将目标账户配置部署到所有成员账户,消除了手动设置并确保整个组织的一致配置。

2. 堆栈集部署模板 (common-resources-stackset.yaml)

此模板创建一个服务管理的堆栈集,将公共资源部署到指定组织单元中的所有账户。StackSet 配置为启用自动部署,以自动配置添加到组织的新账户,并包含具有容错设置的并行区域部署的操作首选项。

分步部署指南

步骤1:下载模板:

  • log-setup-management.yaml
  • common-resources-stackset.yaml

步骤2:部署管理账户基础设施

将集中式日志基础设施部署到您的管理账户。

使用 CLI:

1
2
3
4
5
6
7
8
aws cloudformation deploy \
  --template-file log-setup-management.yaml \
  --stack-name log-setup-management \
  --parameter-overrides \
    OUID=your-organizational-unit-id \
    OrgID=your-organization-id \
  --capabilities CAPABILITY_IAM \
  --region us-east-1

使用 AWS 控制台:

  1. https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。
  2. 在堆栈页面,选择右上角的创建堆栈,然后选择使用新资源(标准)。
  3. 在创建堆栈页面,上传模板文件,选择选择文件从本地计算机选择模板文件。
  4. 选择下一步继续并验证模板。
  5. 在指定堆栈详细信息页面,在堆栈名称框中输入堆栈名称。
  6. 在参数部分,指定模板中定义的参数值。
  7. 选择下一步继续创建堆栈。
  8. 确认能力和转换。
  9. 选择下一步继续。
  10. 选择提交启动堆栈。

此单一部署:

  • 在管理账户中创建中央日志基础设施
  • 自动将 Amazon EventBridge 规则部署到指定 OU 中的所有账户
  • 设置跨账户访问所需的 IAM 角色和策略

图2.1:显示在管理账户中成功部署 log-setup-management.yaml 模板的截图

图2.2:在管理账户中 log-setup-management.yaml 模板的部署时间线视图

步骤3:部署公共资源

部署示例公共资源以演示日志功能。

使用 CLI:

1
2
3
4
5
6
7
aws cloudformation deploy \
  --template-file common-resources-stackset.yaml \
  --stack-name common-resources-stackset \
  --parameter-overrides \
    OUID=your-organizational-unit-id \
  --capabilities CAPABILITY_IAM \
  --region us-east-1

使用 AWS 控制台:

  1. https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。
  2. 在堆栈页面,选择右上角的创建堆栈,然后选择使用新资源(标准)。
  3. 在创建堆栈页面,上传模板文件,选择选择文件从本地计算机选择模板文件。
  4. 选择下一步继续并验证模板。
  5. 在指定堆栈详细信息页面,在堆栈名称框中输入堆栈名称。
  6. 在参数部分,指定模板中定义的参数值。
  7. 选择下一步继续创建堆栈。
  8. 确认能力和转换。
  9. 选择下一步继续。
  10. 选择提交启动堆栈。

这将创建一个堆栈集,将 Amazon Simple Storage Service (Amazon S3) 基础设施部署到所有目标账户,生成将被集中式日志系统捕获的 AWS CloudFormation 事件。

图3:显示为目标账户成功部署 common-resources-stackset.yaml 模板的截图

步骤4:验证和测试

通过查看 ‘central-cloudformation-logs’ 日志组中的日志流来确认事件流和监控功能。

监控和可视化

集中式日志解决方案通过 Amazon CloudWatch Logs Insights 和自定义仪表板提供高级监控功能。

您可以自定义查询以获取:

  • 跨所有账户的最近 AWS CloudFormation 事件
  • 用于快速故障排查的失败堆栈操作
  • 用于验证的成功部署
  • 按账户和区域划分的事件分布
  • 所有 AWS CloudFormation 操作的状态细分

以下查询帮助您分析组织中的 CloudFormation 事件,显示:

  • 事件时间戳
  • 事件发生的账户 ID
  • 部署区域
  • 正在部署的资源类型
  • 部署状态
  • 逻辑资源标识符
1
fields @timestamp, account, region | parse @message /"resource-type":"(?<resource_type>[^"]+)"/ | parse @message /"status":"(?<status>[^"]+)"/ | parse @message /"logical-resource-id":"(?<logical_resource_id>[^"]+)"/ | sort @timestamp desc

图4:CloudWatch Logs Insights 查询结果显示跨账户的 CloudFormation 事件

您可以自定义查询以筛选特定条件,如失败的部署状态、特定资源类型或特定账户,以快速识别和排查组织 AWS CloudFormation 部署中的问题。

成本影响

实施此集中式监控解决方案时,您应考虑以下成本组成部分:

  • Amazon EventBridge 定价 - 与跨账户发布到中央事件总线的事件相关的成本
  • Amazon CloudWatch 定价 - 存储来自所有账户的 CloudFormation 事件的集中式日志组的存储成本。分析集中式日志时的查询成本
  • AWS Key Management Service 定价 - 与用于日志加密的客户管理密钥相关的成本

清理

要清理此解决方案中创建的资源,请按照以下步骤操作:

  1. 首先,从管理账户的 AWS CloudFormation 控制台中删除公共资源堆栈集 (common-resources-stackset)。这将移除跨成员账户部署的所有资源。
  2. 堆栈集操作完成后,删除管理账户日志设置堆栈 (log-setup-management) 以移除集中式日志基础设施,包括事件总线、日志组和关联的 IAM 角色。

注意:在删除管理账户日志设置之前,请确保所有堆栈集操作都已完成,以确保正确清理所有资源。

结论

跨多个 AWS 账户管理基础设施不必复杂。通过集中 AWS CloudFormation 日志,您可以获得多账户部署的可见性,更有效地排查问题,并帮助在组织中实现一致的资源部署。

此解决方案演示了如何将 AWS CloudFormation StackSets、Amazon EventBridge 和 Amazon CloudWatch Logs 等 AWS 服务结合起来,为基础设施即代码部署创建强大的监控系统。

立即开始在您的 AWS Organization 中实施此解决方案,以获得多账户部署的即时可见性。从我们的 GitHub 存储库下载模板,并按照分步指南增强您的云运营。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计