

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

# 使用 IaC 强制执行 “必需的标签密钥”


标签策略可帮助您在基础设施即代码 (IaC) 部署中保持一致的标记。使用 “必填标签密钥”，您可以确保通过 IaC 工具（例如 Amazon CloudFormation Terraform 和 Pulumi）创建的所有资源都包含组织定义的强制性标签。

在创建资源之前，此功能会根据组织的标签策略检查您的 IaC 部署。当部署缺少必需的标签时，您可以将 IaC 设置配置为警告开发团队或完全阻止部署。这种积极主动的方法从创建资源的那一刻起就保持了标签合规性，而不必在以后需要手动修复。使用单一标签策略定义跨多个 IaC 工具强制执行，无需为组织使用的每种工具配置单独的标记规则。

**Topics**
+ [

## 强制执行 Amazon CloudFormation
](#enforce-with-cloudformation)
+ [

## 使用 Terraform 强制执行
](#enforce-with-terraform)
+ [

## 使用 Pulumi 强制执行
](#enforce-with-pulumi)

## 强制执行 Amazon CloudFormation


**注意**  
要使用强制使用所需的标签密钥 Amazon CloudFormation，您必须在标签策略中为资源类型指定必需的标签。有关更多详细信息，请参阅[报告 “必需的标签密钥”](orgs_manage_policies_tag-policies-report-tagging-compliance.md#reporting-required-tag-key) 一节。

 **为 Amazon::TagPolicies: TaggingComplianceValidator Hook 设置执行角色** 

在激活`Amazon::TagPolicies::TaggingComplianceValidator`挂钩之前，必须创建挂钩用来访问 Amazon 服务的执行角色。该角色必须附加以下信任策略：

```
{
    "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": "*"
        }
    ]
}
```

有关为公共扩展设置执行角色的更多信息，请参阅 Amazon CloudFormation 用户指南中的[使用 IAM 权限配置执行角色和公有扩展访问权限的信任策略](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/registry-public.html#registry-public-enable-execution-role)。

 **激活 Amazon:::TagPolicies: TaggingComplianceValidator Hook** 

**重要**  
在继续操作之前，请确认您拥有使用 Hook 所需的权限，并从控制 CloudFormation 台查看主动控件。有关更多信息，请参阅[授予 CloudFormation Hook 的 IAM 权限](https://docs.amazonaws.cn/cloudformation-cli/latest/hooks-userguide/grant-iam-permissions-for-hooks.html)。

更新标签策略后，您必须在要强制执行所需标签合规性的每个 Amazon 账户和区域中激活该`Amazon::TagPolicies::TaggingComplianceValidator`挂钩。

这个 Amazon托管挂钩可以在两种模式下配置：
+  **警告模式**：允许继续部署，但在缺少所需标签时会生成警告 
+  **失败模式**：阻止缺少必需标签的部署 

要使用 Amazon 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`替换为目标 Amazon 区域，`"FailureMode":"WARN"`如果您更喜欢警告模式，请更改`"FailureMode":"FAIL"`为。

 **使用 Amazon以下方式激活:TagPolicies::: 跨多个账户和区域的TaggingComplianceValidator 挂钩 Amazon CloudFormation StackSets** 

对于拥有多个 Amazon 账户的组织，您可以使用 Amazon Amazon CloudFormation StackSets 在所有账户和地区同时激活标签合规性挂钩。

Amazon CloudFormation StackSets 允许您通过一次操作将同一个 Amazon CloudFormation 模板部署到多个账户和区域。这种方法可确保在整个 Amazon 组织中实现一致的标签强制执行，而无需在每个账户中进行手动配置。

要 Amazon CloudFormation StackSets 用于此目的，请执行以下操作：

1. 创建激活标签合规性挂钩的 Amazon CloudFormation 模板

1. 使用部署模板 Amazon CloudFormation StackSets 来定位您的组织单位或特定客户

1. 指定要在其中启用强制措施的所有区域

该 Amazon CloudFormation StackSets 部署将自动处理所有指定账户和地区的激活流程，从而确保整个组织内统一的标签合规性。要了解如何将 Amazon CloudFormation Hook 部署到具有服务管理功能的组织 Amazon CloudFormation StackSets，请参阅此[Amazon 博客](https://www.amazonaws.cn/blogs/devops/deploy-cloudformation-hooks-to-an-organization-with-service-managed-stacksets/)。

 *使用以下 Amazon CloudFormation 模板 Amazon CloudFormation StackSets 为组织中的账户激活 Amazon 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"
                ]}
            }
          }
        }
```

**注意**  
有关运行 Amazon CloudFormation 挂钩的更多信息，请参阅在[账户中激活基于主动控制的挂钩](https://docs.amazonaws.cn/cloudformation-cli/latest/hooks-userguide/proactive-controls-hooks-activate-hooks.html)。

## 使用 Terraform 强制执行


要使用 Terraform 强制执行所需的标签密钥，您需要将 Terraform Amazon 提供程序更新到 6.22.0 或更高版本，并在提供程序配置中启用标签策略验证。有关实现细节和配置示例，请参阅有关[标签策略实施的 Terraform Prov Amazon ider 文档](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/tag-policy-compliance)。

## 使用 Pulumi 强制执行


要使用 Pulumi 强制执行所需的标签密钥，您需要在 Pulumi Cloud 中启用标签策略报告策略包，并使用标签策略读取权限配置您的 IAM 角色。有关实现细节和配置示例，请参阅 [Pulumi 关于标签策略实施的文档](https://www.pulumi.com/docs/insights/policy/integrations/aws-organizations-tag-policies/#aws-organizations-tag-policies)。