AWS StackSets部署策略全解析:平衡速度、安全与规模

本文深入探讨AWS CloudFormation StackSets在多账户环境中的部署策略,包括顺序部署、并行部署和渐进式部署,帮助组织在速度、安全和规模之间找到最佳平衡点,并提供完整的监控解决方案和实际代码示例。

StackSets部署策略:平衡速度、安全与规模以满足不同组织需求

AWS CloudFormation StackSets使组织能够在多个AWS账户和区域中一致地部署基础设施。然而,成功取决于选择正确的部署策略,以平衡三个关键因素:部署速度、操作安全性和组织规模。本指南探讨专门为多账户基础设施管理设计的经过验证的StackSets部署策略。

理解StackSets部署基础

StackSets的实际用途是什么?

与单账户AWS CloudFormation模板不同,StackSets专门设计用于多账户基础设施治理。常见用例包括:

  • 安全基线(在所有账户中部署IAM策略、安全组和访问控制)
  • 合规控制(推出AWS Config规则、AWS CloudTrail配置和审计要求)
  • 组织标准(建立一致的VPC配置、标记策略和命名约定)
  • 共享服务(部署监控解决方案、日志记录基础设施和备份策略)
  • 成本管理(实施预算控制、成本分配标签和资源优化策略)

多账户挑战

跨数十或数百个AWS账户管理基础设施带来独特挑战:

1
2
3
4
5
6
单账户(CFN模板)     多账户(StackSets)
     App A                组织单元A(50个账户)
       |                         |
  [部署一次]          [在所有账户中一致部署]
       |                         |
   成功/失败             复杂的成功/失败矩阵

速度-安全-规模三角关系

每个StackSets部署策略都涉及权衡:

  • 速度(变更在组织中的传播速度)
  • 安全(风险缓解和故障遏制)
  • 规模(有效管理数百个账户的能力)

先决条件

在实施本指南中描述的任何部署策略之前,请确保:

AWS CLI安装

  • 按照AWS CLI安装指南安装最新版本的AWS CLI
  • 使用验证安装:aws --version

AWS配置文件配置

  • 使用配置您的AWS凭据:aws configure
  • 确保您的配置文件具有CloudFormation StackSets操作的适当权限

适当的账户访问

  • 本指南中的命令必须从以下位置执行:
    • 您的AWS组织的管理账户
    • 或CloudFormation的委托管理员账户

注意:使用服务管理权限的StackSets部署无法从独立账户执行。

核心部署策略

1. 顺序部署:最大安全性

使用案例:关键安全更新、合规要求、首次组织推出

可能的用例:

  • 安全基线更新:影响根访问的新IAM策略
  • 合规推出:SOX、HIPAA或PCI-DSS控制实施
  • 关键基础设施变更:VPC安全组修改
  • 组织策略变更:用于审计合规性的新AWS Config规则

实施示例

步骤1:创建StackSet

1
2
3
4
5
6
7
aws cloudformation create-stack-set \
  --stack-set-name security-baseline \
  --template-body file://ConfigRuleCloudtrailEnabled.yml \
  --capabilities CAPABILITY_NAMED_IAM \
  --permission-model SERVICE_MANAGED \
  --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
  --region us-east-1

步骤2:创建堆栈实例

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name security-baseline \
  --deployment-targets OrganizationalUnitIds=ou-test \
  --regions us-east-1 eu-west-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=SEQUENTIAL,MaxConcurrentPercentage=5,FailureTolerancePercentage=0

2. 并行部署:最大速度

并行部署最适合非关键更新、开发环境、例行维护

使用案例

  • 开发账户标准化:推出新的开发工具
  • 监控基础设施:部署Amazon CloudWatch仪表板和警报
  • 成本优化:实施自动化资源清理策略
  • 非生产更新:更新开发和暂存环境

实施示例

步骤1:创建StackSet

1
2
3
4
5
6
7
aws cloudformation create-stack-set \
  --stack-set-name monitoring-baseline \
  --template-body file://monitoring-baseline.yml \
  --capabilities CAPABILITY_NAMED_IAM \
  --permission-model SERVICE_MANAGED \
  --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
  --region us-east-1

步骤2:创建堆栈实例

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name monitoring-baseline \
  --deployment-targets OrganizationalUnitIds=ou-development,ou-sandbox \
  --regions us-east-1 eu-west-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=PARALLEL,MaxConcurrentPercentage=80,FailureTolerancePercentage=20

3. 渐进式部署:平衡方法或多阶段方法(推荐)

对于具有中等风险容忍度的大多数生产场景,推荐使用平衡方法或多阶段实施。

平衡方法

步骤1:创建StackSet

1
2
3
4
5
6
7
aws cloudformation create-stack-set \
  --stack-set-name balanced-deployment \
  --template-body file://balanced-template.yml \
  --capabilities CAPABILITY_NAMED_IAM \
  --permission-model SERVICE_MANAGED \
  --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
  --region us-east-1

步骤2:创建堆栈实例

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name balanced-deployment \
  --deployment-targets OrganizationalUnitIds=ou-development,ou-sandbox \
  --regions us-east-1 eu-west-1 ap-southeast-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=PARALLEL,MaxConcurrentPercentage=25,FailureTolerancePercentage=8

多阶段实施

阶段1:试点账户(目标的10%)

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name balanced-deployment \
  --deployment-targets Accounts=pilot-account-1,pilot-account-2 \
  --regions us-east-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=SEQUENTIAL,MaxConcurrentPercentage=100,FailureTolerancePercentage=0

阶段2:早期采用者组织单元(目标的30%)

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name balanced-deployment \
  --deployment-targets OrganizationalUnitIds=ou-early-adopter \
  --regions us-east-1 eu-west-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=PARALLEL,MaxConcurrentPercentage=25,FailureTolerancePercentage=5

阶段3:完整部署(剩余的60%)

1
2
3
4
5
6
aws cloudformation create-stack-instances \
  --stack-set-name balanced-deployment \
  --deployment-targets OrganizationalUnitIds=ou-standard-prod,ou-legacy-prod \
  --regions us-east-1 eu-west-1 ap-southeast-1 \
  --region us-east-1 \
  --operation-preferences RegionConcurrencyType=PARALLEL,MaxConcurrentPercentage=25,FailureTolerancePercentage=5

使用Step Functions进行编排

AWS Step Functions提供无服务器工作流服务,可以通过高级控制流、错误处理和状态管理功能来编排StackSets部署。这种方法通过标准StackSets操作单独不可用的功能增强了您的多账户部署。

主要优势包括

  • 高级部署编排:通过验证门协调多阶段推出
  • 人工审批工作流:为关键变更实施手动审批步骤
  • 增强的错误处理:定义复杂的重试策略和回退机制
  • 可视化监控:通过Step Functions可视化控制台跟踪部署进度

监控和优化

AWS CloudFormation StackSets没有专门为监控StackSet操作和健康状况设计的大量内置Amazon CloudWatch指标。这就是我们博客文章中监控实施有价值的原因。

AWS原生提供的内容

  • 通过AWS CloudTrail的基本AWS API调用指标
  • CloudFormation整体的常规服务配额和限制指标
  • CloudFormation为单个堆栈提供一些指标,但不提供统一的StackSet特定指标

需要自定义实施的内容

  • StackSet操作跨账户的成功率指标
  • 部署完成时间跟踪
  • 配置漂移检测和监控
  • 账户特定的故障分析
  • 显示组织中StackSet健康状况的综合仪表板

自动化监控实施

以下AWS CloudFormation模板通过自动化基础设施部署为AWS CloudFormation StackSet操作提供实时监控和警报。该解决方案使用AWS Lambda函数、Amazon EventBridge规则、Amazon SNS通知和Amazon CloudWatch仪表板创建完整的监控系统,以跟踪StackSet成功和失败率。

核心Lambda函数StackSetMonitor持续监控您账户中的所有活动StackSet,计算成功率并将自定义指标发布到Amazon CloudWatch中的StackSetMonitoring命名空间。

可能的自定义指标示例:

  • 随时间段的每个StackSet的所有操作计数
  • 具有配置漂移的堆栈实例数量
  • StackSet操作完成的平均时间
  • StackSet操作速率以识别高峰使用时间
  • 操作期间失败的单个堆栈实例数量
  • 重试操作次数

部署监控堆栈:

1
aws cloudformation create-stack --stack-name stackset-monitor --template-body file://StackSetMonitor.yml --parameters ParameterKey=StackSetName,ParameterValue="security-baseline" --capabilities CAPABILITY_IAM

成本

估计的月度费用在5到15美元之间,具体取决于StackSet活动水平,默认监控计划下每天大约有2,880次Lambda执行。通过修改默认的一分钟间隔的ScheduleExpression,该解决方案支持监控频率的自定义。如果监控频率较低,成本将降低。

清理

要清理堆栈实例和StackSet:

1
2
aws cloudformation delete-stack-instances --stack-set-name security-baseline --deployment-targets OrganizationalUnitIds=ou-xxx --regions us-east-1 eu-west-1 --region us-east-1 --no-retain-stack
aws cloudformation delete-stack-set --stack-set-name security-baseline

要清理stackset-monitor堆栈:

1
aws cloudformation delete-stack --stack-name stackset-monitor

结论

在本指南中,我们探讨了跨大规模环境的AWS CloudFormation StackSets部署的细致方法。关键要点包括:

  • 平衡至关重要:每个部署策略都需要根据组织需求仔细考虑速度、安全和规模之间的权衡。
  • 渐进式采用有效:对于大多数组织,具有验证门的渐进式部署方法提供了安全性和效率的最佳平衡。
  • 组织环境很重要:企业、初创公司和受监管行业模式表明,部署策略应根据特定的业务需求和风险容忍度进行定制。
  • 监控至关重要:随着组织扩展到数百个账户,全面的监控对于保持可见性和确保合规性变得至关重要。

这些不同的方法将帮助您为AWS组织中的AWS CloudFormation StackSets部署采用正确的策略。

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