You need to enable JavaScript to run this app.
导航

变量与通配符

最近更新时间2023.09.05 17:54:34

首次发布时间2023.09.05 17:54:34

您可以在策略声明的特定位置使用通配符或变量,从而定义出更灵活、更复杂的权限规则。

通配符

访问控制支持使用通配*?

  • 通配符*:匹配0个、1个或多个字符。
  • 通配符?:匹配一个字符(不能为0个)。

您可以在策略的以下位置使用通配符:

  • 策略的Action部分。
  • 策略Resource中TRN从第2段至后续的每一段。
  • 策略Condition中的Condition value部分。

例如,以下是一条使用了通配符的策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "natgateway:*"
      ],
      "Resource": [
        "trn:natgateway:*:2000000001:ngw/*"
      ],
      "Condition":{
          "StringEquals":{
                  "volc:PrincipalTrn":"trn:iam::2000000001:role/*"
          }
      }
    }
  ]
}

解读: 该条策略一共使用了四个通配符,Action中通配符*表达操作范围是NAT网关中的全部操作;Resource中NAT网关实例的TRN中,第一个通配符*表达了资源范围不限地域,第二个通配符*表达了NAT网关的任何实例;在Condition中,通配符*表达了该则声明的生效条件为请求身份为账号下的任何角色。

变量

条件键可以作为变量放在策略声明的某些位置中代理固定值。

  • 变量的的格式为${condition-key},condition-key可代入任一支持的条件键,例如${volc:UserName}

  • 变量支持在以下位置使用:

    • Resource中TRN表达式中资源名称路径部分(即${AccountId}:之后的部分);

    • Condition中的条件键和条件值中。

例如,以下是一条使用了变量的策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:UpdateSecureContactInfo"
      ],
      "Resource": [
        "trn:iam::2000000000:user/${volc:UserName}"
      ]
    }
  ]
}

该策略通过限定了”访问主体 = 访问客体“,从而限制住IAM用户仅能为自身修改安全邮箱或手机号。具体原理为:策略Resource元素内的变量${volc:UserName}可获取到请求用户的用户名(该条件键的具体说明可参考Condition帮助文档)。假设一名用户名为Bob的IAM用户发起了一次修改安全信息操作(UpdateSecureContactInfo),此时变量${volc:UserName}的取值为请求者的用户名(即Bob),系统会将该值代入到trn:iam::2000000000:user/${volc:UserName}表达式中,因此在这次请求中,该策略将等价于以下策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:UpdateSecureContactInfo"
      ],
      "Resource": [
        "trn:iam::2000000000:user/Bob"
      ]
    }
  ]
}

因此,该策略限制了用户将仅能为自己修改安全信息。同理,当其他被授予该策略的IAM用户发起修改安全信息操作时,变量也将按同样逻辑进行取值并代入,结果为其他用户也同样只能为自己修改安全信息。