
# 标签策略语法
#### 标签策略基本语法
以下标签策略显示了基本标签策略语法：
```
{
    "tags": {
        "costcenter": {                 <!-- 策略键 -->
            "tag_key": {
                "@@assign": "CostCenter"                 <!-- 标签键 -->
            },
            "tag_value": {
                "@@assign": [
                    "100",                 <!-- 策略值 -->
                    "200"
                ]
            },
            "enforced_for": {                 <!-- 强制执行 -->
                "@@assign": [
                    "apig:instance"                 <!-- 服务和资源类型 -->
                ]
            }
        }
    }
}
```
- **策略键：**唯一标识策略语句的策略键。它必须与标签键的值相匹配，除了大小写处理。
- **标签键：**值必须跟策略键一致，但可以有多种大小写形式。如果不指定标签键，则默认为全部小写，即便策略键有大写也会使用全部小写指定。例如策略键指定为costcenter，标签键指定为CostCenter，则后续检验规则以CostCenter为准；策略键指定为CostCenter，标签键不指定，则后续校验规则以costcenter为准。
- **策略值：**一个或多个可接受标签值的列表。如果标签策略没有为标签键指定标签值，则任何值（包括没有值）都将视为合规。
- **强制执行：**表示阻止对指定服务和资源执行任何不合规标记操作。如未指定任何服务和资源类型，则此标签策略不会对任何资源生效。
- **通配符：** 可以在标签值和强制执行字段中使用通配符 "\*"，不过必须遵循以下约束：
  - 每个标签值仅使用一个通配符。例如，允许使用 \*@example.com，但不允许使用 \*@\*.com。
  
  - 对于强制执行，可以用"\<service\>:\*"对该服务的所有资源启用强制执行。但是不能使用通配符指定所有服务或指定所有服务的某个资源。
   
 
#### 继承运算符
在标签策略样例中，标签键，标签值和强制执行中使用了"@@assign"标识，该标识即为继承运算符。
继承运算符指定标签策略如何与组织树中的其他标签策略合并，以创建账号的有效标签策略。运算符包括值设置运算符和子控制运算符。
- **值设置运算符**
  您可以使用以下值设置运算符来控制策略与其父策略交互的方式：
  表1值设置运算符 
  | 运算符      | 说明                                                                                                                                                                                                 |
  |:---|:---|
  | @@assign | 用指定设置覆盖任何继承的策略设置。如果未继承指定的设置，则此运算符会将该设置添加到有效策略中。此运算符可以应用于任何类型的任何策略设置。 对于单值设置，此运算符将继承的值替换为指定值。 对于多值设置（JSON数组），此运算符将删除所有继承的值，并将其替换为此策略指定的值。 |
  | @@append | 向继承的设置添加指定的设置（而不删除任何设置）。如果未继承指定的设置，则此运算符会将该设置添加到有效策略中。只能将此运算符用于多值设置。 此运算符将指定的值添加到继承数组中的任何值。                                                                             |
  | @@remove | 从有效策略中删除指定的继承设置（如果存在）。只能将此运算符用于多值设置。 此运算符仅从继承自父策略的值数组中删除指定值。其他值可以继续存在于数组中，并且可由子策略继承。                                                                                 |
     
  
- **子控制运算符**
  默认情况下，允许所有运算符 (@@all)。
  - "@@operators_allowed_for_child_policies":\["@@all"\]表示：子OU和账号可以在策略中使用任何运算符。默认情况下，子策略中允许使用所有运算符。
  
  - "@@operators_allowed_for_child_policies":\["@@assign", "@@append", "@@remove"\]表示：子OU和账号只能在子策略中使用指定的运算符。您可以在此子控制运算符中指定一个或多个值设置运算符。
  
  - "@@operators_allowed_for_child_policies":\["@@none"\]表示：子OU和账号不能在策略中使用运算符。可以使用此运算符有效锁定在父策略中定义的值，以使子策略无法添加、追加或删除这些值。
   
 
