tencent cloud

文档反馈

生效条件

最后更新时间:2023-12-07 18:06:57

    使用场景

    在很多场景下,我们需要对创建的策略进一步约束生效的条件 condition 。 场景1: CAM 用户调用云 API 时,需要限制用户访问来源,则要求在现有的策略基础上加上 IP 条件。 场景2:当 CAM 用户在调用 VPC 对等连接 API 时,除了需要判断 CAM 用户是否拥有对等连接 API 和对等连接资源的访问权限外,还需要确认 CAM 用户是否拥有对等连接关联的 VPC 的访问权限。

    语法结构

    生效条件的语法结构如下图所示。一个条件块可以由若干个子条件块 sub block 构成,每个子条件块 sub block 对应一个条件操作符和若干个多个条件键,每个条件键对应了若干个条件值。
    
    

    评估逻辑

    条件生效的评估逻辑如下所述:
    说明
    按标签授权仅支持 for_any_value,按标签授权请参考 基于标签管理项目资源
    1. 条件键会对应到多个条件值,只要上下文信息中的对应键值在关联的条件操作符作用下满足其中任意一个条件值,则条件生效。
    2. 对于一个子条件块中存在多个条件键的情况下,只有每个条件键对应的条件都生效时,该子条件块才生效。
    3. 对于包含多个子条件块的情况,只有每个子条件块都生效时,整个条件才生效。
    4. 对于包含 _if_exist 后缀的条件操作符,即使上下文信息中不包含条件操作符所关联的条件键,该条件依然生效。
    5. 对于 for_all_value :限定词约束的条件操作符,适用于上下文信息中的条件键包括多个值的场景。只有当上下文信息中的条件键的每个值在关联的条件操作符作用下生效时,整个条件才生效。
    6. 对于 for_any_value :限定词约束的条件操作符,适用于上下文信息中的条件键包括多个值的场景。只要上下文信息中的条件键的任意一个值在关联的条件操作符作用下生效时,整个条件就可以生效。

    使用示例

    1. 以下示例表示用户必须在 10.217.182.3/24 或者 111.21.33.72/24 网段才能调用云 API 访问 cos:PutObject 。
    {
    "version": "2.0",
    "statement":[
    {
    "effect": "allow",
    "action": "cos:PutObject",
    "resource": "*",
    "condition": {
    "ip_equal": {
    "qcs:ip": [
    "10.217.182.3/24",
    "111.21.33.72/24"
    ]
    }
    }
    }
    ]
    }
    2. 以下示例描述允许 VPC 绑定指定的对等连接, VPC 的地域必须是上海。
    {
    "version": "2.0",
    "statement": [
    {
    "effect": "allow",
    "action": "name/vpc:AcceptVpcPeeringConnection",
    "resource": "qcs::vpc:sh::pcx/2341",
    "condition": {
    "string_equal_if_exist": {
    "vpc:region": "sh"
    }
    }
    }
    ]
    }

    条件操作符列表

    下表是条件操作符、条件名以及示例的信息。每个产品自定义的条件键,请参阅对应的产品文档。
    条件操作符
    含义
    条件名
    举例
    string_equal
    字符串等于(区分大小写)
    qcs:tag
    {"string_equal":{"qcs:tag/tag_name1":"tag_value1"}}
    string_not_equal
    字符串不等于(区分大小写)
    qcs:tag
    {"string_not_equal":{"qcs:tag/tag_name1":"tag_value1"}}
    string_equal_ignore_case
    字符串等于(不区分大小写)
    qcs:tag
    {"string_equal_ignore_case":{"qcs:tag/tag_name1":"tag_value1"}}
    string_not_equal_ignore_case
    字符串不等于(不区分大小写)
    qcs:tag
    {"string_not_equal_ignore_case":{"qcs:tag/tag_name1":"tag_value1"}}
    binary_equal
    字符串等于(区分大小写)
    qcs:tag
    {"binary_equal":{"qcs:tag/tag_name1":"tag_value1"}}
    date_not_equal
    时间不等于
    qcs:current_time
    {"date_not_equal":{"qcs:current_time":"2016-06-01T00:01:00Z"}}
    date_greater_than
    时间大于
    qcs:current_time
    {" date_greater_than ":{"qcs:current_time":"2016-06-01T00:01:00Z"}}
    date_greater_than_equal
    时间大于等于
    qcs:current_time
    {" date_greater_than_equal ":{"qcs:current_time":"2016-06-01T00:01:00Z"}}
    date_less_than
    时间小于
    qcs:current_time
    {" date_less_than ":{"qcs:current_time":"2016-06-01T 00:01:00Z"}}
    date_less_than_equal
    时间小于等于
    qcs:current_time
    {" date_less_than_equal ":{"qcs:current_time":"2016-06-01T 00:01:00Z"}}
    date_equal
    时间等于
    qcs:current_time
    {"date_equal ":{"qcs:current_time":"2016-06-01T00:01:00Z"}}
    ip_equal
    IP 等于
    qcs:ip
    {"ip_equal":{"qcs:ip ":"10.121.2.10/24"}}
    ip_not_equal
    IP 不等于
    qcs:ip
    {"ip_not_equal":{"qcs:ip ":["10.121.2.10/24", "10.121.2.20/24"]}}
    numeric_greater_than
    数值大于
    -
    {"numeric_greater_than ":{"cvm_system_disk_size":10}}
    numeric_greater_than_equal
    数值大于等于
    -
    {"numeric_greater_than_equal ":{"cvm_system_disk_size":10}}
    numeric_less_than
    数值小于
    -
    {"numeric_less_than ":{"cvm_system_disk_size":10}}
    numeric_less_than_equal
    数值小于等于
    -
    {"numeric_less_than_equal ":{"cvm_system_disk_size":10}}
    bool_equal
    布尔值匹配
    -
    -
    null_equal
    条件键为空匹配
    -
    -
    说明:
    1. 日期格式按照 ISO8601 标准表示,并需要使用 UTC 时间。
    2. IP 格式要符合 CIDR 规范。
    3. 条件操作符(null_equal除外)加上后缀 if_exist ,表示上下文信息中即便不包含对应的键值依然生效。
    4. for_all_value :限定词搭配条件操作符使用,表示上下文信息中条件键的每个值都满足要求时才生效。
    5. for_any_value :限定词搭配条件操作符使用,表示上下文信息中条件键的任意一个值满足要求时就可以生效。
    6. 部分业务不支持条件,或仅支持部分条件。具体信息参考业务文档说明。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持