

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IaC 強制執行「必要標籤金鑰」
<a name="enforce-required-tag-keys-iac"></a>

標籤政策可協助您在整個基礎設施中維持一致的標記為程式碼 (IaC) 部署。使用「必要標籤金鑰」，您可以確保透過 IaC 工具建立的所有資源 CloudFormation，例如 Terraform 和 Pulumi，都包含組織定義的強制性標籤。

此功能會在建立資源之前，針對組織的標籤政策檢查您的 IaC 部署。當部署缺少必要的標籤時，您可以設定 IaC 設定來警告您的開發團隊或完全防止部署。這種主動方法會從建立資源的那一刻起維持標記合規性，而不是稍後需要手動修復。強制執行使用單一標籤政策定義跨多個 IaC 工具運作，無需為組織使用的每個工具設定單獨的標記規則。

**Topics**
+ [使用 強制執行 CloudFormation](#enforce-with-cloudformation)
+ [使用 Terraform 強制執行](#enforce-with-terraform)
+ [使用 Pulumi 強制執行](#enforce-with-pulumi)

## 使用 強制執行 CloudFormation
<a name="enforce-with-cloudformation"></a>

**注意**  
若要使用 強制執行必要的標籤金鑰 CloudFormation，您必須在標籤政策中為您的資源類型指定必要的標籤。如需詳細資訊，請參閱 [「必要標籤金鑰」的報告](orgs_manage_policies_tag-policies-report-tagging-compliance.md#reporting-required-tag-key) 區段内容。

 **設定執行角色： 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 許可設定執行角色和公有擴充功能存取的信任政策](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html#registry-public-enable-execution-role)。

 **啟用 AWS：：TagPolicies：：TaggingComplianceValidator Hook** 

**重要**  
繼續之前，請確認您擁有使用勾點所需的許可，並從 CloudFormation 主控台檢視主動控制。如需詳細資訊，請參閱[授予 CloudFormation Hooks 的 IAM 許可](https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/grant-iam-permissions-for-hooks.html)。

更新標籤政策後，您必須在要強制執行必要標記合規的每個 AWS 帳戶和區域中啟用`AWS::TagPolicies::TaggingComplianceValidator`掛鉤。

此 AWS受管勾點可設定為兩種模式：
+  **警告模式**：允許部署繼續，但在缺少必要標籤時產生警告 
+  **失敗模式**：封鎖缺少必要標籤的部署 

若要使用 CLI AWS 啟用勾點：

```
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":"FAIL"``"FailureMode":"WARN"`如果您偏好警告模式，請變更為 。

 **使用 CloudFormation StackSets 跨多個帳戶和區域啟用 AWS：：TagPolicies：：TaggingComplianceValidator Hook** 

對於具有多個 AWS 帳戶的組織，您可以使用 AWS CloudFormation StackSets 同時啟用所有帳戶和區域的標記合規掛鉤。

CloudFormation StackSets 可讓您使用單一操作，將相同的 CloudFormation 範本部署到多個帳戶和區域。此方法可確保在整個 AWS 組織中執行一致的標記，而無需在每個帳戶中手動設定。

若要將 CloudFormation StackSets 用於此目的：

1. 建立啟用標記合規掛鉤的 CloudFormation 範本

1. 使用 CloudFormation StackSets 部署範本，以您的組織單位或特定帳戶為目標

1. 指定您要啟用強制執行的所有區域

 CloudFormation StackSets 部署會自動處理所有指定帳戶和區域的啟用程序，確保整個組織的一致性標記合規。若要了解如何使用 service-managed CloudFormation StackSets 將 CloudFormation 勾點部署至 Organization，請參閱此[AWS 部落格](https://aws.amazon.com/blogs/devops/deploy-cloudformation-hooks-to-an-organization-with-service-managed-stacksets/)。

 *使用 CloudFormation StackSets 部署以下 CloudFormation 範本，為組織中的帳戶啟用 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 勾點的詳細資訊，請參閱[在您的帳戶中啟用主動控制型勾點](https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/proactive-controls-hooks-activate-hooks.html)。

## 使用 Terraform 強制執行
<a name="enforce-with-terraform"></a>

若要使用 Terraform 強制執行必要的標籤金鑰，您需要將 Terraform AWS 提供者更新為 6.22.0 或更新版本，並在提供者組態中啟用標籤政策驗證。如需實作詳細資訊和組態範例，請參閱[標籤政策強制執行的 Terraform AWS 提供者文件](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/tag-policy-compliance)。

## 使用 Pulumi 強制執行
<a name="enforce-with-pulumi"></a>

若要使用 Pulumi 強制執行必要的標籤金鑰，您需要在 Pulumi Cloud 中啟用標籤政策報告政策套件，並使用標籤政策讀取許可來設定 IAM 角色。如需實作詳細資訊和組態範例，請參閱[標籤政策強制執行的 Pulumi 文件](https://www.pulumi.com/docs/insights/policy/integrations/aws-organizations-tag-policies/#aws-organizations-tag-policies)。