更新时间:2025-09-26 GMT+08:00
分享

全局条件键

当主体向云服务发起请求时,云服务会将相关请求信息汇总到请求上下文中。您可以在JSON视图的Condition元素中,将请求上下文中的信息与您在身份策略中指定的条件键进行比较,从而控制访问权限。这些请求信息来源于多个方面,包括发起请求的主体、被请求的资源,以及请求本身的元数据等。

条件键表示策略语句的Condition元素中的键值。根据适用范围,分为全局条件键和服务级条件键。

  • 全局级条件键(前缀为g:)适用于所有操作。
  • 服务级条件键(前缀为服务缩写)仅适用于对应服务的操作,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“条件”小节。

敏感条件键

以下条件键被视为敏感键,因其值由系统自动生成且具有高随机性。对这些条件键使用通配符匹配不存在任何有效应用场景,即使试图匹配键值中的部分字符串也不例外。原因在于,通配符可能使该条件键匹配任意值,从而引入潜在的安全风险。

主体的属性

  • g:PrincipalUrn

    指请求主体的统一资源名称(Uniform Resource Name,URN)。不同身份类型的URN格式如下:

    IAM用户:iam::<account-id>:user:<user-name>

    IAM委托或信任会话:sts::<account-id>:assumed-agency:<agency-name>/<session-name>

    虚拟联邦用户:sts::<account-id>:external-user:<idp-id>/<session-name>

    使用此键可将发出请求的主体的URN与您在身份策略中指定的URN进行比较。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:将以下身份策略绑定至用户组,仅允许用户yyy进行访问。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:PrincipalUrn": "iam::xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:user:yyy"
    			}
    		}
    	}]
    }
  • g:PrincipalAccount
    使用此键可将请求主体所属的账号ID与您在身份策略中指定的账号ID进行比较,与g:DomainId的值完全一致。
    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:PrincipalOrgPath

    指请求主体所属组织中的路径,可以通过该条件键控制只有组织中特定层级的账号才能访问指定API,仅在请求者存在所属组织时,此条件键存在。

    账号的组织路径格式为:<organization-id>/<root-id>/(<ou-id>/)*<account-id>。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示条件键Condition在请求者账号属于组织单元ou-qqq时视为匹配。
    {
    	"Condition": {
    		"StringMatch": {
    			"g:PrincipalOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/*"
    		}
    	}
    }
  • g:PrincipalOrgID

    指请求主体所属的组织ID,用户可以通过该条件键控制只有特定组织内的身份才能访问指定API,仅在请求者存在所属组织时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示用户xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx在组织o-yyyyyyyyyyy内时才能切换IAM委托或信任委托。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Principal": {
    			"IAM": [
    				"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:PrincipalOrgID": "o-yyyyyyyyyyy"
    			}
    		}
    	}]
    }
  • g:PrincipalTag/<tag-key>
    指请求主体携带的标签,标签键<tag-key>不区分大小写,仅请求者为带有标签的IAM用户、带有标签的信任委托、或带有会话标签的委托/信任委托会话时,此条件键存在。

    AssumeAgency API支持获取委托/信任委托会话,会话标签也仅支持AssumeAgency API通过tags参数来设置,CreateTemporaryAccessKeyByAgency API不支持设置会话标签。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示仅当IAM用户上携带了{"department": "hr"}标签,才允许访问IAM相关API。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"iam:*"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:PrincipalTag/department": "hr"
    			}
    		}
    	}]
    }
  • g:PrincipalIsService

    指请求主体是否是云服务,可以通过该属性控制只有云服务身份才能访问指定API。

    • 数据类型 – 布尔值
    • 值类型 – 单值
    示例:允许请求者为云服务之外的主体访问OBS服务。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "OBS:*:*"
          ],
          "Condition": {
            "Bool": {
              "g:PrincipalIsService": [
                "false"
              ]
            }
          }
        }
      ]
    }
  • g:PrincipalServiceName

    指云服务主体名称,仅在请求者为云服务时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示条件键Condition在请求者是IAM服务时视为匹配。
    {
        "Condition": {
            "StringEquals": {
                "g:PrincipalServiceName": "service.IAM"
            }
        }
    }
  • g:PrincipalType

    指请求主体类型,共有三种类型:User、AssumedAgency、ExternalUser。当以IAM用户访问时,该属性取值为User;当以IAM委托或信任委托会话访问时,取值为AssumedAgency;当以虚拟联邦用户访问时,取值为ExternalUser。

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:UserId

    IAM用户ID。仅当请求者为IAM用户时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示允许用户ID为111122223333的IAM用户的所有请求。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"*:*:*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:UserId": [
    					"111122223333"
    				]
    			}
    		}
    	}]
    }
  • g:UserName

    IAM用户名。仅当请求者为IAM用户时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:拒绝以TestUser命名开头的用户删除以vault命名开头的存储库。
    {
        "Version": "5.0",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "cbr:vaults:delete"
                ],
                "Resource": [
                    "cbr:*:*:vault:vault*"
                ],
                "Condition": {
                    "StringMatch": {
                        "g:UserName": [
                            "TestUser*"
                        ]
                    }
                }
            }
        ]
    }
  • g:DomainName

    指请求者的账号名称,账号下的根用户与所有IAM用户的账号名称都是相同的。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:指定账号名为ZhangSan的请求者才拥有获取对象的权限。
    {
        "Version": "5.0",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "obs:object:GetObject"
                ],
                "Condition": {
                    "StringEquals": {
                        "g:DomainName": [
                            "ZhangSan"
                        ]
                    }
                }
            }
        ]
    }
  • g:DomainId

    指请求者的账号ID(等同于AccountId)。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:下面是Config服务关联委托的系统身份策略,在资源中使用"iam::${g:DomainId}:agency:rms_tracker_agency_v5"来指定对应账号下名为rms_tracker_agency_v5的信任委托URN。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"iam:agencies:attachPolicyV5",
    			"iam:agencies:detachPolicyV5"
    		],
    		"Resource": [
    			"iam::${g:DomainId}:agency:rms_tracker_agency_v5"
    		],
    		"Condition": {
    			"StringEquals": {
    				"iam:PolicyURN": "iam::system:policy:ConfigTrackAgencyPolicy"
    			}
    		}
    	}]
    }
  • g:PrincipalIsRootUser

    指请求主体是否是账号根用户,所有请求中都会携带该属性。

    • 数据类型 – 布尔值
    • 值类型 – 单值
    示例:请求者必须为账号Root用户才能查询IAM用户列表。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:users:listUsersV5"
          ],
          "Condition": {
            "Bool": {
              "g:PrincipalIsRootUser": [
                "true"
              ]
            }
          }
        }
      ]
    }
  • g:PrincipalId

    指请求主体对应的ID,不同主体类型的ID格式如下:

    IAM用户:<user-id>

    IAM委托或信任委托会话:<agency-id>:<session-name>

    虚拟联邦用户:<idp-id>:<session-name>

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:PrincipalOrgManagementAccountId

    指请求主体所属组织的管理账号ID,仅在请求者存在所属组织时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示条件键Condition在请求者所在组织的管理账号ID为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx时视为匹配。
    {
    	"Condition": {
    		"StringEquals": {
    			"g:PrincipalOrgManagementAccountId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    		}
    	}
    }

委托会话的属性

您可以使用以下条件键,在生成会话时对委托或信任委托会话的属性进行匹配验证。请注意,这些条件键仅适用于通过委托或信任委托会话发起的请求,其具体取值来源于会话令牌中嵌入的元数据信息。

委托或信任委托本身也是一种主体。您还可以结合“主体的属性”部分的其他条件键,在委托或信任委托会话发起请求时对其属性进行更全面的访问控制。

  • g:SourceIdentity

    指用户第一次通过STS服务的AssumeAgency API获取STS Security Token时指定的source_identity字段,且在后续的委托切换中不可再更改。注意,CreateTemporaryAccessKeyByAgency API不支持设置source_identity,只有通过设置了source_identity的STS Security Token进行后续访问时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示仅允许source_identity为yyyyy的身份切换该委托或信任委托。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Principal": {
    			"IAM": [
    				"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:SourceIdentity": "yyyyy"
    			}
    		}
    	}]
    }
  • g:TokenIssueTime

    指访问凭据中的STS Security Token的签发时间。仅在STS Security Token发出请求时,此条件键存在。

    • 数据类型 – 时间
    • 值类型 – 单值
    示例:通过将此身份策略附加到信任委托上,可以拒绝特定时间前生成的临时安全凭证签名的请求,临时安全凭证由AssumeAgency API切换目标信任委托生成。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"*"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"DateLessThan": {
    				"g:TokenIssueTime": "2024-03-01T12:00:00Z"
    			}
    		}
    	}]
    }
  • g:AssumedByService
    指该请求由云服务切换到委托或信任委托上发起的,其值为云服务主体。

    在该场景下,发起调用方不一定是云服务本身,例如在某些场景下,ECS切换委托后获得委托凭据,将此凭据转交给客户,客户可使用该凭据发起调用,此时并不是由ECS直接发起访问。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:将以下策略绑定至信任委托,表示仅允许RGC服务主体切换到该信任委托时可访问tms。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "tms:*:*"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {
            "StringEquals": {
              "g:AssumedByService": [
                "service.RGC"
              ]
            }
          }
        }
      ]
    }
  • g:MFAPresent

    指是否使用MFA多因素认证方式获取STS Security Token。仅在使用MFA认证登录控制台访问或使用MFA获取的委托/信任委托会话发出请求时,此条件键为true。仅在STS Security Token发出请求时,此条件键存在,如使用永久访问密钥发起请求等场景则此条件键不存在。

    • 数据类型 – 布尔值
    • 值类型 – 单值
    示例:表示用户可以通过该属性控制云服务API仅能被经过多因素认证的身份调用。需注意搭配IfExists后缀以包括永久凭据发起请求此类g:MFAPresent条件键不存在的场景。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"*"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"BoolIfExists": {
    				"g:MFAPresent": "false"
    			}
    		}
    	}]
    }
  • g:MFAAge

    指通过MFA多因素认证方式获取的STS Security Token的生效时长。仅在使用MFA认证登录控制台访问,或使用MFA获取的委托/信任委托会话发出请求时,此条件键存在。此条件键的单位为秒。

    • 数据类型 – 数值
    • 值类型 – 单值
    示例:通过给每个IAM用户设置标签MaxAllowedMfaAge,使得该IAM用户仅能在经过多因素认证MaxAllowedMfaAge秒内才能调用IAM API,若未设置标签MaxAllowedMfaAge,则视作600秒。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:*"
          ],
          "Condition": {
            "NumberLessThanEquals": {
              "g:MFAAge": "${g:PrincipalTag/MaxAllowedMfaAge, '600'}"
            }
          }
        }
      ]
    }

网络的属性

使用以下条件键可将有关请求中源自网络的信息与您在策略中指定的网络属性进行比较。

  • g:SourceIp
    指发起请求的源IP地址,专指来自公网的请求源IP。

    如果请求是从VPC内发起并经过VPC终端节点时,则会使用g:VpcSourceIp来取代g:SourceIp。如果不是通过VPC终端节点发起访问时,此条件键存在,但仅当通过公网发起访问时,该条件键可以作为有效的访问控制条件。云服务使用委托或信任委托代表用户身份不经过公网发起访问时,此条件键不生效。

    • 数据类型 – IP
    • 值类型 – 单值
    示例1:将以下策略绑定至IAM身份,当该调用者源IP地址在xxx.xx.xx.0/24范围内时,不允许通过编程或控制台访问KMS。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"IpAddress": {
    				"g:SourceIp": "xxx.xx.xx.0/24"
    			}
    		}
    	}]
    }

    源IP地址需要为公网IP,请勿在该条件键中包含内网地址。

    需注意:初始请求上下文中的g:SourceIp不会在服务代表主体转发访问的后续请求中继续传递,因此使用这些条件键控制访问权限时,可能导致云服务需代表主体转发访问的请求被拒绝。实际场景中,建议结合不同的转发访问场景,使用诸如g:ViaService,g:PrincipalUrn等条件键控制以允许转发访问请求。例外:主体由控制台发起的公网访问可视为主体直接由公网进行编程访问,因此由控制台代表主体转发访问的此次请求中将包含有初始的SourceIp。

    可能存在部分云服务未完备对接IAM,在跨服务转发访问时会丢失CalledVia信息造成g:ViaService,g:CalledVia,g:CalledViaFirst,g:CalledViaLast等条件键丢失,造成误判,具体情况以实际策略评估结果为准。

    示例2:主体可以通过TMS API修改ECS实例的标签,此时客户的主体访问TMS API,由TMS代表该主体调用ECS的标签管理API完成操作,此时TMS调用ECS即是代表客户的主体跨服务转发访问ECS,在跨服务转发访问场景下不会携带SourceIp至后续被调用云服务。虽然跨服务转发访问并不传递客户发起访问的网络信息,但可以通过控制客户发起调用的入口,可以保证整个调用链路符合客户的访问控制要求,以客户直接调用TMS修改ECS实例标签为例,可以通过CalledVia排除跨服务转发访问的间接调用。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": ["ecs:*:*", "tms:*:*"],
          "Resource": ["*"],
          "Condition": {
            "NotIpAddress": {
              "g:SourceIp": ["103.218.xxx.xx"]
            },
            "BoolIfExists": {
                "g:ViaService": "false"
            }
          }
        }
      ]
    }

    TMS代表主体调用ECS的标签管理API即为跨服务转发访问,在该场景下初始请求的g:SourceIp条件键不会向跨服务转发访问请求传递,因此在策略中添加"BoolIfExists":{"g:ViaService":"false"}条件,其语义为只有在非跨服务访问场景下该策略生效,在跨服务访问场景下该策略不生效。即当请求由公网访问TMS时由于g:ViaService不存在,该策略生效,可以通过g:SourceIp进行访问控制。当TMS跨服务转发访问ECS时由于g:ViaService有值且值为true,该策略不生效,可防止在跨服务转发访问时由于g:SourceIp不传递导致策略访问控制范围与预期不符的情况。

    示例3:由于通过控制台访问云服务资源,被视为由Console云服务代表主体跨服务访问云服务资源。Console跨服务转发时,会将请求中的网络信息传递至被调用服务,且Console仅会将客户发起访问的网络信息传递给Console直接访问的云服务,被访问的云服务不会继续向后传递客户的网络信息。若由Console访问TMS,再由TMS API修改ECS实例的标签,达到示例2效果的策略内容如下。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": ["ecs:*:*", "tms:*:*"],
          "Resource": ["*"],
          "Condition": {
            "NotIpAddress": {
              "g:SourceIp": ["103.218.xxx.xx"]
            },
            "BoolIfExists": {
                "g:ViaService": "false"
            }
          }
        },
        {
          "Effect": "Deny",
          "Action": ["ecs:*:*", "tms:*:*"],
          "Resource": ["*"],
          "Condition": {
            "NotIpAddress": {
              "g:SourceIp": ["103.218.xxx.xx"]
            },
            "StringEquals": {
                "g:CalledViaFirst": "service.console",
                "g:CalledViaLast": "service.console"
            }
          }
        }
      ]
    }
    示例4:您可以创建云服务信任委托,授权云服务帮助您执行一些异步任务。此类场景下,云服务通过信任委托获取凭据后,通过内网直接请求其他云服务,此类请求由云服务发起,可以通过身份排除此类云服务信任委托。
    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": ["rms:*:*", "smn:*:*"],
          "Resource": ["*"],
          "Condition": {
              "NotIpAddress": {
                  "g:SourceIp": ["103.218.xxx.xx"]
              },
              "BoolIfExists": {
                  "g:ViaService": "false"
              },
              "StringNotMatch": {
                  "g:PrincipalUrn": ["sts::<account-id>:assumed-agency:<serivce-agency-name>/*"]
              }
          }
        }
      ]
    }
  • g:SourceVpc

    指请求来源的VPC ID。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:SourceVpce

    指发起请求使用的VPC终端节点ID。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例1:将以下身份策略绑定至IAM用户,仅允许该IAM用户通过VPC终端节点“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”发起的请求可以访问KMS。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:SourceVpce": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    			}
    		}
    	}]
    }
    示例2:将以下身份策略绑定至IAM用户,拒绝该IAM用户通过VPC终端节点 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 外的方式访问KMS;同时该身份策略允许云服务代表主体转发访问请求。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:SourceVpce": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    			},
    			"Bool": {
    				"g:ViaService": "false"
    			}
    		}
    	}]
    }
  • g:VpcSourceIp

    指从VPC内发起的请求的源IP地址。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。

    • 数据类型 – IP
    • 值类型 – 单值
  • g:SourceVpceOrgId

    指发起请求使用的 VPC Endpoint ID所属账号所属组织ID。仅当请求是从 VPC 内部通过 VPC Endpoint 发起,且VPCE所属账号属于某个组织时,请求中会携带该属性。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:客户可以通过在身份策略中指定允许VPCEP所属组织才能访问资源。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": ["obs:*:*"],
    		"Resource": ["*"],
    		"Condition": {
    			"StringEquals": {
    				"g:SourceVpceOrgId": "o-xxxxxx"
    			}
    		}
    	}]
    }
  • g:SourceVpceOrgPath

    指发起请求使用的 VPC Endpoint ID所属账号所属组织中的路径。仅当请求是从 VPC 内部通过 VPC Endpoint 发起,且VPCE所属账号属于某个组织时,请求中会携带该属性。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:客户可以通过在策略中指定允许VPCEP所属组织才能访问资源。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": ["obs:*:*"],
    		"Resource": ["*"],
    		"Condition": {
    			"StringMatch": {
    				"g:SourceVpceOrgPath": "o-xxxx/r-xxxx/ou-xxxx-11111111/ou-xxxx-xxx/*"
    			}
    		}
    	}]
    }
  • g:SourceVpceAccount

    指发起请求使用的 VPC Endpoint ID所属账号ID。仅当请求是从VPC内部通过VPC Endpoint 发起时,请求中会携带该属性。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:客户可以通过在策略中指定只能允许VPCEP所属账号才能访问资源。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": ["obs:*:*"],
    		"Resource": ["*"],
    		"Condition": {
    			"StringEquals": {
    				"g:SourceVpceAccount": [
    					"account-id-1"
    				]
    			}
    		}
    	}]
    }

资源的属性

  • g:ResourceAccount

    指请求所访问的资源的属主账号ID,仅在支持资源细粒度授权服务的授权项(Action)中,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“资源类型”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示拒绝用户使用指定用户以外的KMS密钥解密数据。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:ResourceAccount": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    			}
    		}
    	}]
    }
  • g:ResourceOrgId

    指请求所访问的资源的属主账号所在的组织ID。仅在支持资源细粒度鉴权的授权项(Action)中,且资源属主账号在组织内时,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“资源类型”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示拒绝用户使用指定组织以外的KMS密钥解密数据。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:ResourceOrgId": "o-xxxxxxxx"
    			}
    		}
    	}]
    }
  • g:ResourceOrgPath

    指请求所访问的资源的属主账号在组织中的路径。仅在支持资源细粒度鉴权的授权项(Action)中,且资源属主账号在组织内时,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“资源类型”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例1:表示仅允许用户用组织单元ou-qqq内账号的KMS密钥解密数据。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringMatch": {
    				"g:ResourceOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/*"
    			}
    		}
    	}]
    }
    示例2:表示仅允许用户用组织单元ou-qqq下子OU内账号的KMS密钥解密数据。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringMatch": {
    				"g:ResourceOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/ou-*"
    			}
    		}
    	}]
    }
  • g:ResourceTag/<tag-key>

    指请求所访问的资源身上携带的标签,标签键<tag-key>不区分大小写。用户可以通过该属性控制只能访问带有特定标签的资源。仅在支持 g:ResourceTag/<tag-key>的授权项(Action)中,当前访问资源携带标签,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“条件键”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示仅允许用户访问带有{"team": "engineering"}和{"department": "hr"}标签的VPC。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"vpc:vpcs:get"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:ResourceTag/team": "engineering",
    				"g:ResourceTag/department": "hr"
    			}
    		}
    	}]
    }
  • g:EnterpriseProjectId

    指该请求对应的企业项目ID或者请求操作的资源所属的企业项目ID。当请求指定了具体的企业项目ID或访问的资源属于具体的企业项目时,如该API所对应授权项(Action)支持g:EnterpriseProjectId,则此条件键存在。此条件键为鉴权场景下使用的条件键,并非过滤条件,即不会过滤出符合该条件键所指定的企业项目下的资源。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:此条件键为鉴权场景下使用的条件键,如下身份策略表示限制用户通过企业项目过滤查询虚拟私有云的访问执行操作:仅允许用户请求GET /v1/{project_id}/vpcs时指定enterprise_project_id为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,即请求为/v1/{project_id}/vpcs?enterprise_project_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx时才可访问。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"vpc:vpcs:list"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:EnterpriseProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    			}
    		}
    	}]
    }

请求的属性

  • g:Referer

    指请求携带的HTTP referer header,注意由于该属性是由客户端指定的,故不推荐使用它作为访问控制的安全依赖。

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:CalledVia
    用于控制跨服务访问。当主体向云服务发起访问时,该服务可能会转发主体的访问请求至其他服务,g:CalledVia包含服务转发访问的请求链中代表主体发出请求的服务列表。如服务转发主体的访问时,此条件键存在;如主体直接访问,则此条件键不存在。例如,用户主体请求服务A,服务A以代表用户主体请求服务B,服务B又代表用户主体请求服务C。那么,在服务A收到的请求中,因为是用户主体直接请求,不会包含g:CalledVia属性;在服务B收到的请求中,因为是服务A代表用户主体发起,所以g:CalledVia会包含服务A的服务主体;在服务C收到的请求中g:CalledVia属性会包含服务A和服务B的服务主体,并且顺序与转发访问的请求链顺序一致,此时g:CalledViaFirst为服务A的服务主体,g:CalledViaLast则为服务B的服务主体,通过g:CalledViaFirst和g:CalledViaLast两个条件键可指定由哪个服务在转发访问链中第一个及最后一个调用。
    • 数据类型 – 字符串数组
    • 值类型 – 多值
    1. 用户通过控制台对云服务发起请求时,其CalledVia中将包含service.console。
    2. 支持g:CalledVia条件键的服务列表请参见支持使用全局条件键g:CalledVia的云服务有哪些。g:CalledVia条件键的值为该列表的“云服务主体”列。
    示例:表示仅允许通过DWS服务发起的请求调用KMS加密数据的API。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"kms:cmk:encryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"ForAnyValue:StringEquals": {
    				"g:CalledVia": "service.DWS"
    			}
    		}
    	}]
    }
  • g:CalledViaFirst

    与g:CalledVia相同,该属性特指g:CalledVia属性中的第一个元素,即第一个跨服务转发访问的服务。

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:CalledViaLast

    与g:CalledVia相同,该属性特指g:CalledVia属性中的最后一个元素,即最后一个跨服务转发访问的服务。

    • 数据类型 – 字符串
    • 值类型 - 单值
  • g:CurrentTime

    接收到请求的时间。以ISO 8601格式表示,例如:2012-11-11T23:59:59Z。

    • 数据类型 – 时间
    • 值类型 – 单值
    示例:表示用户通过该属性控制云服务API在2023年3月1日到2023年3月30日的时间段内可以被访问。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"DateGreaterThanEquals": {
    				"g:CurrentTime": "2023-03-01T00:00:00Z"
    			},
    			"DateLessThanEquals": {
    				"g:CurrentTime": "2023-03-30T23:59:59Z"
    			}
    		}
    	}]
    }
  • g:ViaService

    指该请求是否是由云服务代表主体转发访问发起的,当且仅当g:CalledVia属性非空时,该属性值为true。仅在STS Security Token发出请求时,此条件键存在。

    • 数据类型 – 布尔值
    • 值类型 – 单值
  • g:TagKeys

    指请求中携带的所有标签的key组成的列表。仅在支持g:TagKeys的授权项(Action)中,当前请求的API传入标签时,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“条件键”列。

    • 数据类型 – 字符串数组
    • 值类型 – 多值
    示例:给IAM用户或信任委托打标签时,只有标签包含标签键type才能附加标签成功。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"iam::tagForResourceV5"
    		],
    		"Resource": [
    			"iam:*:*:agency:*",
    			"iam:*:*:user:*"
    		],
    		"Condition": {
    			"ForAnyValue:StringEquals": {
    				"g:TagKeys": [
    					"type"
    				]
    			}
    		}
    	}]
    }
  • g:SourceAccount

    指云服务跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceAccount表示的是该资源的所属主账号。仅在支持g:SourceAccount的授权项(Action)中,此条件键存在,且仅应在Principal是服务主体的资源策略中使用此条件键。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“条件键”列。

    • 数据类型 – 字符串
    • 值类型 – 单值

    示例:Service A是一个用于记录活动的服务,能帮助用户(Account B)把其设备(Account C)触发的活动日志转储到用户指定的OBS桶里。为了能让Service A正常向桶中写入数据,Account B的管理员会为Service A创建一个委托/信任委托X来操作自己账号下的OBS桶。当用户(Account B)或某个设备(Account C)接入了Service A并触发请求后,Service A切换获取指定委托/信任委托X的临时安全凭据,然后向桶中写入数据。

    由于委托/信任委托X的名字并非保密内容,如果攻击者(Account D)获取到了委托名并以同样的方式触发Service A,则其活动记录会被错误地记录在用户的OBS桶里。注意到,攻击者利用Service A的委托,间接地修改了用户的OBS桶,Service A的行为即被称为混淆代理。

    g:SourceAccount用于控制云服务为了哪个账号访问此次资源。以下信任策略仅允许Service A为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx或yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy切换至对应委托/信任委托的会话。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Principal": {
    			"Service": [
    				"Service.A"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:sourceAccount": [
    					"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    					"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
    				]
    			}
    		}
    	}]
    }
  • g:SourceUrn

    指云服务跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceUrn表示的是该资源URN。仅在支持g:SourceUrn的授权项(Action)中,此条件键存在,且仅应在Principal是服务主体的资源策略中使用此条件键。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“条件键”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:与g:SourceAccount相同,该条件键也用于解决混淆代理问题。假设用户设备(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)的资源定义分为手表(watch)和手环(bracelet)两种,每种都有若干个。g:SourceUrn用于控制云服务为了哪个资源访问此次资源。以下信任策略表示仅允许Service A为符合条件的手表或手环切换至对应委托/信任委托的会话。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Principal": {
    			"Service": [
    				"Service.A"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:sourceUrn": [
    					"alarm:*:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:watch:*",
    					"alarm:*:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:bracelet:*"
    				]
    			}
    		}
    	}]
    }
  • g:SecureTransport

    指请求是否使用了SSL协议。

    • 数据类型 – 字符串
    • 值类型 – 单值
  • g:RequestedRegion

    指请求的目标区域(Region)。请求的目标云服务是区域级服务时,设置为对应的区域ID以进行控制,例如cn-north-4。仅在请求为部分区域级服务时,此条件键存在,支持该条件键的云服务参见支持身份策略与信任委托的云服务列表的“请求区域控制”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:除来自region-1、region-2、region-3区域的请求,其他区域的请求将被拒绝。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"*:*:*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:RequestedRegion": [
    					"region-1",
    					"region-2",
    					"region-3"
    				]
    			}
    		}
    	}]
    }
  • g:RequestTag/<tag-key>

    指请求中携带的标签,标签键<tag-key>不区分大小写。当请求者在调用API时传入了标签(例如给资源添加标签的API、创建资源同时支持传入标签的API等),可以通过此条件键检查此请求是否包含对应标签。仅在支持g:RequestTag/<tag-key>的授权项(Action)中,当前请求的API传入标签时,此条件键存在。想要查看有哪些授权项支持该条件键,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“操作”小节中表1的“条件键”列。

    • 数据类型 – 字符串
    • 值类型 – 单值
    示例:表示仅允许用户创建带有 {"team": "engineering"} 和 {"department": "hr"} 标签的组织单元。
    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Allow",
    		"Action": [
    			"organizations:ous:create"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:RequestTag/team": "engineering",
    				"g:RequestTag/department": "hr"
    			}
    		}
    	}]
    }
  • g:UserAgent

    指请求携带的HTTP User-Agent header,注意该属性是由客户端指定的,故不推荐使用它作为访问控制的安全依赖。

    • 数据类型 – 字符串
    • 值类型 – 单值

相关文档