策略变量

最后更新时间:2020-04-08 13:04:33

    使用场景

    场景假设:您希望给每个 CAM 用户授予其创建资源的访问权限。例如,您想要设置 COS 资源的创建者默认拥有该资源的访问权限。
    如果由资源拥有者(主账号)将资源逐个授权给资源创建者,授权成本很高,需要为每种资源都编写策略并授权给创建者。在这种情况下,您可以通过使用策略变量来实现您的需求。在策略的资源定义中增加占位符描述的创建人信息,该占位符即是策略变量。当鉴权时,策略变量将被替换为来自请求本身的上下文信息。

    授予创建者资源读权限的策略描述方式如下:

    {     
            "version":"2.0", 
            "statement": [       
             { 
                "effect":"allow", 
                "action":"name/cos:Read*", 
                "resource":"qcs::cos:$region:uid/$appid:prefix//$appid/$bucketname" 
             }
            ]
    }
    • 策略变量在每个资源的路径中带上创建人的 uid(即 APPID)。如 APPID 为 125000000 的账号创建了名为 examplebucket 的成都地域存储桶,则其对应的资源描述方式为

      qcs::cos:ap-chengdu:uid/125000000:prefix//125000000/examplebucket
    • uid 为 125000000 的用户访问该资源时,鉴权过程中会把对应的策略信息的占位符替换为访问者,即

      qcs::cos::uid/125000000:prefix//125000000/examplebucket
    • 策略中的资源 qcs::cos::uid/125000000:prefix//125000000/examplebucket 可以通过前缀匹配访问资源 qcs::cos:ap-chengdu:uid/125000000:prefix//125000000/examplebucket

    策略变量的位置

    资源元素位置 :策略变量可以用在 资源六段式 的最后一段。
    条件元素位置 :策略变量可以用在条件值中。

    以下策略表示 VPC 创建者拥有访问权限。

    {  
            "version":"2.0", 
            "statement": [       
             { 
                "effect":"allow", 
                "action":"name/vpc:*", 
                "resource":"qcs::vpc::uin/12357:vpc/*",
                "condition":{"string_equal":{"qcs:create_uin":"${uin}"}} 
             }
          ]
    }

    策略变量列表

    目前支持的策略变量列表如下:

    变量名 变量含义
    ${uin} 当前访问者的子账号 uin 。对于访问者是主账号的情况,它和主账号 uin 一致。
    ${owner_uin} 当前访问者所属的主账号 uin 。
    ${app_id} 当前访问者所属的主账号的 APPID 。