本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
标签策略语法和示例
本页介绍标签策略语法并提供示例。
标签策略语法
标签策略是一个纯文本文件,根据 JSON
以下标签策略显示了基本标签策略语法:
{ "tags": { "costcenter": { "tag_key": { "@@assign": "CostCenter" }, "tag_value": { "@@assign": [ "100", "200", "300*" ] }, "enforced_for": { "@@assign": [ "secretsmanager:ALL_SUPPORTED" ] } } } }
标签策略语法包括以下元素:
-
tags字段键名称。标签策略始终以此固定键名开头。它是上面示例策略中的顶行。 -
唯一标识策略语句的策略键。它必须与标签键 的值相匹配,除了大小写处理。策略值区分大小写。
在此示例中,
costcenter是策略键。 -
至少有一个标签键,指定允许的标签键(具有您希望资源遵循的大小写)。如果未定义大小写处理,则标签键的默认大写处理是小写。标签键的值必须与策略键的值匹配。但是,由于策略键值不区分大小写,所以大小写可以不同。
在此示例中,
CostCenter是标签键。这是符合标签策略要求所需的大小写处理。为此标签键使用其他大小写处理的资源不符合标签策略要求。您可以在一个标签策略中定义多个标签键。
-
(可选)标签键的一个或多个可接受标签值 的列表。如果标签策略没有为标签键指定标签值,则任何值(包括没有值)都将视为合规。
在此示例中,
CostCenter标签键的可接受值为100、200和300*。 -
(可选)一个
enforced_for选项,指示是否阻止对指定服务和资源执行任何不合规标记操作。在控制台中,这是用于创建标签策略的可视化编辑器中的 Prevent noncompliant operations for this tag (防止此标签的不合规操作) 选项。此选项的默认设置为空。示例标签策略指定应用于所有 Amazon Secrets Manager 资源的
CostCenter标签必须符合此策略。警告
只有当您具有使用标签策略经验的情况下,才可以更改默认选项。否则,您可能会阻止组织账户中的用户创建他们所需的资源。
-
运算符指定标记策略如何与组织树中的其他标记策略合并,以创建账户的有效标签策略。在此示例中,
@@assign用于将字符串分配给tag_key、tag_value和enforced_for。有关运算符的更多信息,请参阅继承运算符。 -
您可以在标签值中使用
*通配符。-
您仅可以为每个标签值使用一个通配符。例如,允许使用
*@example.com,但不允许使用*@*.com。 -
您可以将
enforced_for字段中的ALL_SUPPORTED通配符与某些服务一起使用,以启用对该服务所有支持的资源的强制执行。有关支持enforced_for的服务和资源类型的列表,请参阅支持强制执行的服务和资源类型。 -
您不能使用通配符指定所有服务或指定所有服务的某个资源。
-
标签策略示例
下面的示例标签策略 仅供参考。
注意
示例 1:定义组织级的标签键大小写
以下示例显示了一个标签策略,该策略仅定义了两个标签键和您希望组织中的账户标准化所采用的大小写。
策略 A – 组织根标签策略
{ "tags": { "CostCenter": { "tag_key": { "@@assign": "CostCenter", "@@operators_allowed_for_child_policies": ["@@none"] } }, "Project": { "tag_key": { "@@assign": "Project", "@@operators_allowed_for_child_policies": ["@@none"] } } } }
此标签策略定义两个标签键:CostCenter 和 Project。将此标签策略附加到组织根具有以下效果:
-
组织中的所有账户继承此标签策略。
-
组织中的所有账户都必须使用定义的大小写处理以实现合规性。具有
CostCenter和Project标签的资源符合要求。为标签键(例如,costcenter、Costcenter或COSTCENTER)使用其他大小写处理的资源不符合要求。 -
@@operators_allowed_for_child_policies": ["@@none"]行锁定标签键。附加在组织树(子策略)下方的标签策略不能使用值设置运算符来更改标签键,包括其大小写处理。 -
对于所有标签策略,不会评估未标记的资源或未在标签策略中定义的标签是否符合标签策略。
Amazon 建议您使用此示例作为指南,为要使用的标签密钥创建类似的标签策略。将其附加到组织根。然后创建类似于下一个示例的标签策略,该策略仅为已定义的标签键定义可接受值。
下一步:定义值
假定您将以前的标签策略附加到组织根。接下来,您可以创建类似于下文的标签策略并将其附加到账户。此策略定义 CostCenter 和 Project 标签键的可接受值。
策略 B – 账户标签策略
{ "tags": { "CostCenter": { "tag_value": { "@@assign": [ "Production", "Test" ] } }, "Project": { "tag_value": { "@@assign": [ "A", "B" ] } } } }
如果将策略 A 附加到组织根,并将策略 B 附加到账户,则这些策略将合并,以便为该账户创建以下有效标签策略:
策略 A + 策略 B = 账户的有效标签策略
{ "tags": { "Project": { "tag_value": [ "A", "B" ], "tag_key": "Project" }, "CostCenter": { "tag_value": [ "Production", "Test" ], "tag_key": "CostCenter" } } }
有关策略继承的更多信息,包括继承运算符的工作原理示例和有效标签策略示例,请参阅了解管理策略继承。
示例 2:防止使用标签键
要防止使用标签键,您可以将类似以下内容的标签策略附加到组织实体。
此示例策略指定 Color 标签键不接受任何值。它还指定子标签策略中不允许运算符。因此,受影响账户中的资源上的任何 Color 标签都被视为不符合要求。但是,enforced_for 选项实际上可防止受影响的账户仅使用 Color 标签标记 Amazon DynamoDB 表。
{ "tags": { "Color": { "tag_key": { "@@operators_allowed_for_child_policies": [ "@@none" ], "@@assign": "Color" }, "tag_value": { "@@operators_allowed_for_child_policies": [ "@@none" ], "@@assign": [] }, "enforced_for": { "@@assign": [ "dynamodb:table" ] } } } }
示例 3:为特定 Amazon 服务支持的所有资源类型指定标签策略
要为特定 Amazon 服务的所有支持的资源类型指定标签策略,请使用ALL_SUPPORTED通配符。
此策略使用了 ALL_SUPPORTED 通配符来指定,所有带有 Environment 标签键的 Amazon EC2 实例只能具有 Prod 或 Non-prod 标签值。此通配符提供了一种有效的单行替代方案,无需单独列出每个 Amazon EC2 实例。有关支持 ALL_SUPPORTED 通配符的服务和资源类型的列表,请参阅支持强制执行的服务和资源类型。
{ "tags": { "Environment": { "tag_key": { "@@assign": "Environment", "@@operators_allowed_for_child_policies": ["@@none"] }, "tag_value": { "@@assign": [ "Prod", "Non-prod" ], "@@operators_allowed_for_child_policies": ["@@none"] }, "enforced_for": { "@@assign": [ "ec2:ALL_SUPPORTED" ] } } } }
示例 4:强制执行所需的标签密钥以实现合规性
此示例演示如何定义要求所有资源都包含强制合规性标签的标签策略。Organizations 通常使用这种模式来确保适当的成本分配、所有权跟踪和环境识别。
{ "tags": { "CostCenter": { "report_required_tag_for": { "@@assign": [ "ec2:instance", "s3:bucket", "rds:db", "lambda:function" ] }, "tag_key": { "@@assign": "CostCenter" } }, "Environment": { "report_required_tag_for": { "@@assign": [ "ec2:ALL_SUPPORTED", "rds:ALL_SUPPORTED", "s3:ALL_SUPPORTED" ] }, "tag_key": { "@@assign": "Environment" }, "tag_value": { "@@assign": [ "Production", "Staging", "Development", "Test" ] } }, "Owner": { "report_required_tag_for": { "@@assign": [ "ec2:ALL_SUPPORTED" ] }, "tag_key": { "@@assign": "Owner" } } } }
当您应用此策略并使用标签策略强制配置您的 IaC 工具时:
-
CostCenter: EC2 实例、S3 存储桶、RDS 数据库和 Lambda 函数所必需的
-
环境:所有 EC2、RDS 和 S3 资源均为必填项,允许的值仅限于生产、暂存、开发或测试
-
所有者:您组织中的所有 EC2 资源都必须填写
符合此政策的基础设施代码示例:
EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0c02fb55956c7d316 InstanceType: t2.micro Tags: - Key: CostCenter Value: CC-12345 - Key: Environment Value: Test - Key: Owner Value: john.doe@company.com
如果您尝试创建不带所需标签的资源,则根据您的配置,IaC 部署将失败或在规划阶段生成警告。如果配置为失败模式,则在创建任何资源之前会阻止部署。在警告模式下配置时,部署会继续进行,但会提醒您的团队注意缺少的标签。验证错误消息可以准确识别缺少哪些必需的标签以及哪些资源需要它们。
有关您的 iaC 工具的具体配置说明:
-
Amazon CloudFormation: 强制执行 Amazon CloudFormation 要激活标签合规性挂钩,请参阅
-
Terraform:使用 Terraform 强制执行要在提供程序中启用标签策略验证,请参阅 Amazon
-
Pulumi:使用 Pulumi 强制执行要启用 “标签策略报告” 策略包,请参阅