利用AWS Organizations标签策略在IaC部署中强制实施一致的标签

本文介绍了如何通过AWS Organizations的标签策略新功能"Enforce Required tags for IaC",在基础设施即代码(IaC)部署前强制执行一致的标签。它详细阐述了如何为AWS CloudFormation设置标签策略、激活合规验证钩子,并支持跨账户部署,以简化治理、加强合规并统一成本管理。

利用AWS Organizations标签策略在基础设施即代码部署中强制实施一致的标签

组织管理着跨多个账户和区域的数千个AWS资源以支持其业务运营。他们希望拥有一致的标签来支持基本的工作流,例如基于属性的访问控制(ABAC)、成本分配、按项目/应用/所有者/环境组织资源,以及基于标签条件触发自动化流程。许多客户使用基础设施即代码(IaC)工具,如AWS CloudFormation、Terraform和Pulumi,来自动化基础设施部署、减少手动错误,并在开发、预发布和生产环境中保持一致的环境。

客户使用IaC来自动化其基础设施部署,然而,他们在维护不同IaC工具间标签一致性方面面临挑战,因为每个提供商都有自己的策略引擎和语法。此外,传统的标签治理需要对每个IaC工具制定单独的策略和执行机制,从而导致配置漂移和合规性差距。除了IaC部署,不同的团队还需要为AWS、本地和多云环境中的成本分配、合规要求和资源跟踪进行一致的标签标注。因此,团队花费大量时间构建自定义验证脚本、实施特定于工具的钩子,并通过不一致的执行层手动修复不符合资源合规要求的资源。

AWS Organizations标签策略现在通过"为IaC强制执行必需标签"功能消除了这种复杂性,企业可以一次性定义标签要求,并在CloudFormation、Terraform和Pulumi部署中一致地强制执行它们。这项新功能在资源创建之前根据您的标签策略验证IaC模板和代码,防止不合规的部署,并确保在整个基础设施管道中保持一致的治理。客户现在可以维护统一的标签标准,而无需为每个IaC工具构建单独的执行机制,从而减少运营开销,同时加强合规性和成本管理能力。

在本博客中,我们将引导您通过CloudFormation设置必需标签,以跨账户和区域标准化一致的资源标签。

先决条件

  • 访问您的AWS组织管理账户
  • 创建、更新和列出标签策略的AWS Organizations权限
  • 创建激活CloudFormation钩子所需的执行角色
  • AWS CLI

为CloudFormation设置必需标签验证 您可以通过两个步骤为CloudFormation实现必需标签:1/ 更新您的标签策略以包含验证要求,2/ 激活执行验证的AWS托管钩子。此过程确保在创建资源之前,所有CloudFormation部署都会根据您组织的标签标准自动检查。

步骤1:使用必需标签验证定义您的标签策略 在您的AWS组织管理账户中,导航到"策略" > “标签策略”,并修改您现有的标签策略或创建一个包含report_required_tag_for字段的新策略。此字段告诉AWS哪些标签键是资源创建所必需的,并应在CloudFormation部署期间进行验证。您的标签策略应指定必需的标签键,并可选择定义这些标签的允许值。

例如,您可能要求所有EC2实例和S3存储桶具有"CostCenter"标签,并为CostCenter标签指定特定的允许值,如"Finance"、“Engineering"和"Marketing”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "tags": {
    "Environment": {
      "tag_key": {
        "@@assign": "Environment"
      },
      "tag_value": {
        "@@assign": ["Prod", "Test", "Dev"]
      },
      "report_required_tag_for": {
        "@@assign": ["ec2:ALL_SUPPORTED"]
      }
    }
  }
}

[图1] AWS组织策略可视化编辑器中的标签策略

步骤2:激活AWS::TagPolicies::TaggingComplianceValidator CloudFormation钩子 设置好执行角色后,您需要激活AWS::TagPolicies::TaggingComplianceValidator。这是一个AWS托管的钩子,它与CloudFormation的部署流程集成,以根据您的标签策略验证模板。

您可以在希望强制执行标签合规性的每个AWS账户和区域中部署此CloudFormation钩子。您可以在公共扩展中找到此钩子,发布者为AWS。有关公共钩子的更多信息,请访问发布钩子供公共使用

[图2] AWS托管钩子的CloudFormation目录

  激活具有已创建执行角色的AWS::TagPolicies::TaggingComplianceValidator钩子

[图3] 从AWS托管钩子列表中选择AWS::TagPolicies::TaggingComplianceValidator钩子

[图4] AWS::TagPolicies::TaggingComplianceValidator CloudFormation钩子的描述页面

   然后,您可以配置钩子。钩子可以配置为两种模式:警告模式,该模式允许部署继续进行,同时为缺少必需标签生成警告;失败模式,该模式会阻止不符合标签要求的部署。根据您组织的风险承受能力和推广策略选择适当的模式。

[图5] 钩子的激活扩展按钮

[图6] 为WARN或FAIL模式配置AWS::TagPolicies::TaggingComplianceValidator钩子

   在钩子配置页面输入以下配置JSON:
1
{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus": "ENABLED", "FailureMode": "FAIL", "TargetOperations": ["STACK"], "Properties":{}}}}

如果您想使用WARN模式。要了解更多关于CloudFormation钩子的信息,请访问CloudFormation钩子概念

1
{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus": "ENABLED", "FailureMode": "WARN", "TargetOperations": ["STACK"], "Properties":{}}}}

这是钩子激活成功后的页面。

[图7] 成功激活的钩子

   您也可以通过CLI激活AWS::TagPolicies::TaggingComplianceValidator CloudFormation钩子:
1
2
3
4
5
6
7
8
9
 aws cloudformation activate-type \
    --type HOOK \
    --type-name AWS::TagPolicies::TaggingComplianceValidator \
    --execution-role-arn arn:aws:iam::975050053660:role/MyHookExecutionRole \
    --publisher-id aws-hooks \
    --region us-east-1
{
    "Arn": "arn:aws:cloudformation:us-east-1:975050053660:type/hook/AWS-TagPolicies-TaggingComplianceValidator"
}

您可以通过CLI为AWS::TagPolicies::TaggingComplianceValidator钩子配置WARN或FAIL模式:

1
2
3
4
5
6
7
  aws cloudformation set-type-configuration \
  --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus": "ENABLED", "FailureMode": "FAIL", "TargetOperations": ["STACK"], "Properties":{}}}}' \
  --type-arn "arn:aws:cloudformation:us-east-1:975050053660:type/hook/AWS-TagPolicies-TaggingComplianceValidator" \
  --region us-east-1
{
    "ConfigurationArn": "arn:aws:cloudformation:us-east-1:975050053660:type-configuration/hook/AWS-TagPolicies-TaggingComplianceValidator/default"
}

步骤3:使用CloudFormation StackSets跨多个账户部署(可选) 对于管理多个AWS账户的组织,您可以使用AWS CloudFormation StackSets在所有账户和区域中同时激活标签合规性CloudFormation钩子。StackSets消除了手动配置每个账户的需要,确保在整个AWS组织中保持一致的标签执行。

创建一个定义钩子激活和配置的CloudFormation模板,然后使用StackSets将其部署到目标组织单元(OUs)或特定账户。此方法可保证整个AWS环境中统一的标签合规性,并简化执行机制的持续管理。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Resources:
  # 创建钩子执行角色
  MyHookExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: MyHookExecutionRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - resources.cloudformation.amazonaws.com
                - hooks.cloudformation.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: HookExecutionPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - tag:ListRequiredTags
                Resource: '*'
  
  # 激活AWS托管的钩子类型
  MyHookActivation:
    Type: AWS::CloudFormation::TypeActivation
    DependsOn: MyHookExecutionRole
    Properties:
      ExecutionRoleArn: !GetAtt MyHookExecutionRole.Arn
      PublisherId: aws-hooks
      Type: HOOK
      TypeName: AWS::TagPolicies::TaggingComplianceValidator
  
  # 配置钩子
  HookTypeConfiguration:
    Type: AWS::CloudFormation::HookTypeConfig
    DeletionPolicy: Retain
    DependsOn: MyHookActivation
    Properties:
      TypeArn: !GetAtt MyHookActivation.Arn
      Configuration: '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus": "ENABLED", "FailureMode": "FAIL", "TargetOperations": ["STACK"], "Properties":{}}}}'

完成这些步骤后,CloudFormation将在目标账户和区域中部署CloudFormation堆栈集。部署将自动根据您的标签策略进行验证。缺少必需标签的部署将根据您配置的执行模式,要么生成警告,要么完全失败。

AWS标签策略与必需标签的预部署验证简化了您基础设施即代码中的云治理,适用于CloudFormation以及由Terraform和Pulumi提供的IaC工具。您的团队现在可以通过阻止创建不符合您标签策略的资源,主动维护一致的标签标准。IaC的必需标签为您提供了加强AWS组织和账户中治理、合规性、访问控制和自动化的工具。

要了解如何通过Terraform强制执行标签,请参阅使用Terraform实现标签策略合规性

要了解如何通过Pulumi强制执行标签,请参阅使用Pulumi强制执行AWS Organizations标签策略

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