本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IaC 强制执行 “必需的标签密钥”
标签策略可帮助您在基础设施即代码 (IaC) 部署中保持一致的标记。使用 “必填标签密钥”,您可以确保通过 IaC 工具(例如 CloudFormation Terraform 和 Pulumi)创建的所有资源都包含组织定义的强制性标签。
在创建资源之前,此功能会根据组织的标签策略检查您的 IaC 部署。当部署缺少必需的标签时,您可以将 IaC 设置配置为警告开发团队或完全阻止部署。这种积极主动的方法从创建资源的那一刻起就保持了标签合规性,而不必在以后需要手动修复。使用单一标签策略定义跨多个 IaC 工具强制执行,无需为组织使用的每种工具配置单独的标记规则。
强制执行 CloudFormation
注意
要使用强制使用所需的标签密钥 CloudFormation,您必须在标签策略中为资源类型指定必需的标签。有关更多详细信息,请参阅报告 “必需的标签密钥” 一节。
为 AWS::TagPolicies: TaggingComplianceValidator Hook 设置执行角色
在激活AWS::TagPolicies::TaggingComplianceValidator挂钩之前,必须创建挂钩用来访问 AWS 服务的执行角色。该角色必须附加以下信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "resources.cloudformation.amazonaws.com", "hooks.cloudformation.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
执行角色还必须具有至少具有以下权限的角色策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "tag:ListRequiredTags" ], "Resource": "*" } ] }
有关为公共扩展设置执行角色的更多信息,请参阅 CloudFormation 用户指南中的使用 IAM 权限配置执行角色和公有扩展访问权限的信任策略。
激活 AWS:::TagPolicies: TaggingComplianceValidator Hook
重要
在继续操作之前,请确认您拥有使用 Hook 所需的权限,并从控制 CloudFormation 台查看主动控件。有关更多信息,请参阅授予 CloudFormation Hook 的 IAM 权限。
更新标签策略后,您必须在要强制执行所需标签合规性的每个 AWS 账户和区域中激活该AWS::TagPolicies::TaggingComplianceValidator挂钩。
这个 AWS托管挂钩可以在两种模式下配置:
-
警告模式:允许继续部署,但在缺少所需标签时会生成警告
-
失败模式:阻止缺少必需标签的部署
要使用 AWS CLI 激活挂钩,请执行以下操作:
aws cloudformation activate-type \ --type HOOK \ --type-name AWS::TagPolicies::TaggingComplianceValidator \ --execution-role-arn arn:aws:iam::123456789012:role/MyHookExecutionRole \ --publisher-id aws-hooks \ --region us-east-1
aws cloudformation set-type-configuration \ --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus": "ENABLED", "FailureMode": "WARN", "TargetOperations": ["STACK"], "Properties":{}}}}' \ --type-arn "arn:aws:cloudformation:us-east-1:123456789012:type/hook/AWS-TagPolicies-TaggingComplianceValidator" \ --region us-east-1
region替换为目标 AWS 区域,"FailureMode":"WARN"如果您更喜欢警告模式,请更改"FailureMode":"FAIL"为。
使用 AWS以下方式激活:TagPolicies::: 跨多个账户和区域的TaggingComplianceValidator 挂钩 CloudFormation StackSets
对于拥有多个 AWS 账户的组织,您可以使用 AWS CloudFormation StackSets 在所有账户和地区同时激活标签合规性挂钩。
CloudFormation StackSets 允许您通过一次操作将同一个 CloudFormation 模板部署到多个账户和区域。这种方法可确保在整个 AWS 组织中实现一致的标签强制执行,而无需在每个账户中进行手动配置。
要 CloudFormation StackSets 用于此目的,请执行以下操作:
-
创建激活标签合规性挂钩的 CloudFormation 模板
-
使用部署模板 CloudFormation StackSets 来定位您的组织单位或特定客户
-
指定要在其中启用强制措施的所有区域
该 CloudFormation StackSets 部署将自动处理所有指定账户和地区的激活流程,从而确保整个组织内统一的标签合规性。要了解如何将 CloudFormation Hook 部署到具有服务管理功能的组织 CloudFormation StackSets,请参阅此AWS 博客
使用以下 CloudFormation 模板 CloudFormation StackSets 为组织中的账户激活 AWS TagPolicies:::: TaggingComplianceValidator Hook。
重要
这个钩子只能用作 StackHook. 当用作资源挂钩时,它没有任何效果。
Resources: # Activate the AWS-managed hook type HookTypeActivation: Type: AWS::CloudFormation::TypeActivation Properties: AutoUpdate: True PublisherId: "AWS" TypeName: "AWS::TagPolicies::TaggingComplianceValidator" # Configure the hook HookTypeConfiguration: Type: AWS::CloudFormation::HookTypeConfig DependsOn: HookTypeActivation Properties: TypeName: "AWS::TagPolicies::TaggingComplianceValidator" TypeArn: !GetAtt HookTypeActivation.Arn Configuration: !Sub | { "CloudFormationConfiguration": { "HookConfiguration": { "TargetStacks": "ALL", "TargetOperations": ["STACK"], "Properties": {}, "FailureMode": "Warn", "TargetFilters": { "Actions": [ "CREATE", "UPDATE" ]} } } }
注意
有关运行 CloudFormation 挂钩的更多信息,请参阅在账户中激活基于主动控制的挂钩。
使用 Terraform 强制执行
要使用 Terraform 强制执行所需的标签密钥,您需要将 Terraform AWS 提供程序更新到 6.22.0 或更高版本,并在提供程序配置中启用标签策略验证。有关实现细节和配置示例,请参阅有关标签策略实施的 Terraform Prov AWS ider 文档
使用 Pulumi 强制执行
要使用 Pulumi 强制执行所需的标签密钥,您需要在 Pulumi Cloud 中启用标签策略报告策略包,并使用标签策略读取权限配置您的 IAM 角色。有关实现细节和配置示例,请参阅 Pulumi 关于标签策略实施的文档