身份策略变量-j9九游会登录
身份策略变量介绍
在编写resource或condition的条件值时,可以使用身份策略变量作为占位符。在实际鉴权的时候,这些占位符将会被自动替换成请求上下文中指定条件键的值。
语法与替换规则
策略变量结构支持使用$前缀,后跟一对大括号{ }。在大括号内,包含想要使用的请求上下文中的条件键的名称,例如${g:username},在实际鉴权的时候,${g:username}将被自动替换为条件键g:username的值。
如果指定条件键在请求上下文中不存在,或者指定条件键是多值条件键,那么将会替换失败,可能会导致整个语句无效。
例如当且仅当访问身份是iam用户时,请求中才会存在g:username。如果以其它身份访问,那么所有包含${g:username}的资源和条件键都将视作不匹配。
同理,对于多值条件键g:calledvia,即使它存在于请求上下文中,由于它是多值条件键,${g:calledvia}依然会被判定为替换失败,从而视作不匹配。
如果变量指定的条件键替换失败,您可以为它提供原定设置文本作为默认值。要向变量添加默认值,请用单引号' '括起默认值,并用英文逗号和空格分隔条件键名称和默认值,例如${key, 'default'},表示当key不存在或者替换失败时,将${key, 'default'}替换为文本串default。条件键名称不区分大小写,但是默认值区分大小写。此外,条件键名称与默认值引号前后的空格都会被忽略。例如${ g:username , 'default_user_name' }表示如果访问身份是iam用户,则替换成g:username的值,否则替换成文本串default_user_name。
对于策略中具有特殊含义的字符:"*"(通配符)、"?"(通配符)、"$"(策略变量标识符),如果您不想让这三个字符表示这些特殊含义,请将它们改写为${*}、${?}、${$};此外,在策略变量默认值中,如果您想表达一个单引号字符('),请使用一对连续的单引号('')来表示。例如${g:username, 'a single quote is '', two quotes are ''''.'},当使用默认值进行替换时,它将被替换成a single quote is ', two quotes are ''.
iam只会进行一轮替换,这意味着即使替换完毕后包含新的策略变量结构,它仍然不会被替换。例如${g:username, '${g:username}${*}'},当使用默认值进行替换时,它将被替换成${g:username}${*},不会继续迭代。
示例
在资源中使用变量
config服务关联委托的预置身份策略,在资源中使用"iam::${g:domainid}:agency: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"
}
}
}]
}
在条件值中使用变量
禁止跨组织访问资源:
{
"version": "5.0",
"statement": [{
"effect": "deny",
"action": ["*"],
"resource": ["*"],
"condition": {
"stringnotequals": {
"g:resourceorgid": "${g:principalorgid}"
},
"null": {
"g:resourceorgid": "false"
}
}
}]
}
与标签配合使用
通过给每个iam用户设置标签maxallowedmfaage,使得该iam用户仅能在经过多因素认证maxallowedmfaage秒内才能调用iam api,若未设置标签maxallowedmfaage,则视作600秒:
{
"version": "5.0",
"statement": [{
"effect": "allow",
"action": ["iam:*"],
"condition": {
"numberlessthanequals": {
"g:mfaage": "${g:principaltag/maxallowedmfaage, '600'}"
}
}
}]
}
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨