You need to enable JavaScript to run this app.
文档中心
访问控制

访问控制

复制全文
下载 pdf
策略语法
条件(Condition)
复制全文
下载 pdf
条件(Condition)
条件(Condition) 是可选的元素,定义了权限声明的生效条件。IAM区别于RBAC模型的关键在于提供了基于属性的访问控制(ABAC),定义权限时不再局限于定义“何种主体通过何种操作访问何种客体”,而是可以进一步通过主客体的属性信息及请求中的属性信息进行访问控制,基于此特性,您可定义出十分精细的访问权限,从而最大化保障云上各类复杂访问场景的安全性。了解当前支持的条件键及使用说明请参考 Condition条件键说明;如需了解云服务对Condition的支持情况可参考 云服务支持的条件键列表。​
原理​
请求上下文​
用户访问云服务的API请求中包含着丰富的请求上下文信息,这些信息可以分类为“身份属性”(主体属性)、“资源属性”(客体属性)、“请求属性”、“环境属性”。​
​alt​​
  • 身份属性: 请求身份的属性,例如PrincipalTag(身份标签)、PrincipalTrn(身份资源标识);​
  • 请求属性: 请求中定义对资源的操作信息,一般通过请求参数进行传递。请求参数分为公共参数和非公共参数。公共参数是构造签名请求中的必填参数(参考API调用指南 - 公共参数)。非公共参数为云服务提供的API参数,通常放置于Query或Body中进行传递,例如RequestTag(请求为云资源附加的标签);​
  • 环境属性: 请求发生时的环境信息,例如IP(访问的IP地址);​
  • 资源属性: 资源上的属性,例如ResourceTag(资源标签)。​
权限策略​
IAM的基于属性的访问控制是通过策略声明中的Condition元素定义的,以下是一条带有Condition的策略示例:​
​
{​
"Statement": [​
{​
"Effect": "Allow",​
"Action": [​
"alb:*"​
],​
"Resource": [​
"*"​
],​
"Condition": {​
"IpAddress": {​
"volc:SourceIp":"8.8.8.8"​
}​
}​
}​
]​
}​
​
解读: 该条策略限制仅能从IP地址8.8.8.8(仅作为示例,非真实IP)中访问应用型负载均衡的全部操作。​
Condition语法​
策略中单条Condition由Operator(运算符)、Condition Key(条件键)、Condition Value(条件值) 三个部分组成。其中对于多值类型的Condition Key,需要在Operator前添加多值匹配符。当判断条件需要满足Condition Key在请求上下文中存在的前提时,需要在Operator前添加IfExists运算符。​
​alt​​
以下面这条Condition为例,StringEquals为Operator,volc:RequestTag/apartment为Condition Key,财务为Condition Value:​
​
{​
"Condition": {​
"StringEquals": {​
"volc:RequestTag/apartment": "财务"​
}​
}​
}​
​
在策略声明中可以有多条condition,一个condition中可以有多对条件键,每个条件键对应的条件值可以是多个(表达为数组形式),例如:​
​
{​
"Condition": {​
"StringEqualsIgnoreCase": {​
"volc:RequestTag/apartment": ["财务","行政","研发"],​
"volc:ResourceTag/project":["游戏项目","短视频项目"]​
},​
"IpAddress": {​
"volc:SourceIp": "203.0.113.0/24"​
}​
}​
}​
​
Condition运算逻辑可参考下图:​
  • AND代表“逻辑与”关系,OR代表“逻辑或”关系。​
​alt​​
对应上述的策略示例中,Condition的组成结构如下:​
​​​
运算符(Operator)​
指条件运算符,例如StringEquals代表字符串精确匹配。运算符包括基本运算符和运算修饰符。运算符大小写敏感,需要确保在策略中正确书写;​
基本运算符​
支持的基本运算符如下:​
​
运算符类型​
运算符类型说明​
运算符​
运算符说明​
String​
字符串运算​
StringEquals​
字符串精确匹配(大小写敏感)​
​
​
StringNotEquals​
字符串精确不匹配(大小写敏感)​
​
​
StringEqualsIgnoreCase​
字符串精确匹配(忽略大小写)​
​
​
StringNotEqualsIgnoreCase​
字符串不匹配(忽略大小写)​
​
​
StringLike​
字符串模糊匹配(大小写敏感)(使用该运算符时符号*或?会作为通配符处理,使用StringEquals时会作为普通字符处理)​
​
​
StringNotLike​
字符串模糊不匹配(大小写敏感)(使用该运算符时符号*或?会作为通配符处理,使用StringNotEquals时会作为普通字符处理)​
IP Address​
IP地址运算​
(IP v4 或IP v6,支持地址段)​
IpAddress​
IP地址或地址段匹配​
​
​
NotIpAddress​
IP地址或地址段不匹配​
Numeric​
数字运算​
(Integer 或Decimal)​
NumericEquals​
数值等于​
​
​
NumericNotEquals​
数值不等于​
​
​
NumericLessThan​
数值小于​
​
​
NumericLessThanEquals​
数值小于等于​
​
​
NumericGreaterThan​
数值大于​
​
​
NumericGreaterThanEquals​
数值大于等于​
Date and time​
日期与时间运算​
(使用UTC时间,精确到秒,支持遵循ISO 8601的标准格式:YYYY-MM-DD'T'HH:MM:SS'Z',例如2023-08-30T23:59:59Z)​
DateEquals​
日期时间等于​
​
​
DateNotEquals​
日期时间不等于​
​
​
DateLessThan​
日期时间早于​
​
​
DateLessThanEquals​
日期时间不晚于​
​
​
DateGreaterThan​
日期时间晚于​
​
​
DateGreaterThanEquals​
日期时间不早于​
Boolean​
布尔运算​
(true 或false)​
Bool​
布尔匹配(true 或false)​
TRN​
全局资源名称(TRN)运算​
TrnEquals​
TRN精确匹配(大小写敏感)。TRN中可包含通配符,在匹配逻辑上与StringLike相同,但使用TrnEquals时,系统会对Condition value进行格式的合法性检查​
​
​
TrnNotEquals​
TRN精确不匹配(大小写敏感)。TRN中可包含通配符,在匹配逻辑上与StringNotLike相同,但使用TrnNotEquals时,系统会对Condition value进行格式的合法性检查​
Null​
条件键存在性运算​
(比对值为true或false)​
Null​
检查条件键在请求上下文中是否存在,当不存在时返回true,存在时返回false。使用该运算符时,Condition value必须为true或false,以对Null检查的返回结果进行比对​
​
运算修饰符​
IfExists修饰符​
在某些场景里,请求上下文中条件键可能不存在,当希望条件键不存在可跳过匹配时,可以在Operator中添加IfExists修饰符,例如以下条件代表当求上下文中包含volc:UserName条件键时,仅在条件值等于bob时可通过匹配;当请求上下文中不包含volc:UserName条件键时,条件可直接通过匹配:​
​
{​
"Condition": {​
"StringEqualsIfExists": {​
"volc:UserName":"bob"​
}​
}​
}​
​
多值修饰符​
在某些场景里,同一个属性在请求上下文中可能会有多个属性值,这时候需要使用多值修饰符来定义多值的匹配方式,多值修饰符包括ForAllValues和ForAnyValue:​
- ForAllValues:请求上下文中的必须包含条件键且全部条件值均匹配通过(注意:无条件值时即条件值为空集,空集是任何集合的子集,因此也可匹配通过);​
- ForAnyValue:请求上下文中必须包含条件键且至少有一个条件值匹配通过 。​
例如下面这条Condition同时使用了IfExists和ForAnyValue。ForAnyValue表示请求传递的标签至少需要有一个标签键等于"department",而IfExists让条件仅在请求传递了标签的情况下才会生效,所以最终的权限效果为:​
  1. 请求中传递了一对或多对标签时,若至少有一个标签键为"department",则条件通过;​
  1. 请求中未传递任何标签时,条件依然通过;​
  1. 其他情况,条件均不通过。​
​
{​
"Condition": {​
"ForAnyValue:StringEqualsIfExists": {​
"volc:RequestTagKeys": "department"​
}​
}​
}​
​
条件键(Condition key)​
条件键指定了请求上下文中的待运算的属性字段,例如volc:PrincipalTrn(代表请求身份的TRN)。其中身份属性、请求属性中的公共参数部分、环境属性通常会作为全局条件键,请求属性中的非公共参数部分、资源属性通常作为服务条件键。​
  • 条件键格式为${ServiceCode}:${ConditonKeyName},${ServiceCode}为具体云服务的Service,全局条件键使用volc关键字(即格式为volc:${ConditionKeyName})。条件键大小写敏感,需要确保在策略中正确书写;​
  • 某些条件键在每次请求的上下文中可能会有多个值,这类条件键称为多值类型条件键;某些条件键在每次请求的上下文中至多会有一个值,这类条件键称为单值类型条件键。多值类型条件键需要使用多值修饰符(参考上方运算修饰符小节)。​
说明​
一些属性的属性值本身是key-value结构,这时候属性值中的key可以作为Condition key中的一部分。例如volc:RequestTag/${TagKey}(这里的${TagKey}需要代入具体的标签键)。​
以下是访问控制支持的条件键及说明:​
​
条件键​
说明​
存在性​
值类型​
支持的运算符​
volc:RequestedRegion​
请求的Region,例如cn-beijing。 策略示例​
所有请求均存在​
单值​
String​
volc:CurrentTime​
请求的时间,使用UTC时间,精确到秒,支持遵循ISO 8601的标准格式:YYYY-MM-DD'T'HH:MM:SS'Z',例如2023-08-30T23:59:59Z。 策略示例​
所有请求均存在​
单值​
Date and time​
volc:SourceIp​
请求环境的IP地址(公网IP或内网IP)。支持IP v4和IP v6,支持地址段。 策略示例​
所有请求均存在​
单值​
IP Address​
volc:SourceVpc​
请求环境的火山引擎VPC ID。策略示例​
从火山引擎VPC 中通过内网请求时存在​
单值​
String​
volc:ViaConsole​
请求是否来自于控制台,true代表登录控制台访问,false代表编程请求API。 策略示例​
所有请求均存在​
单值​
Boolean​
volc:UserName​
请求的IAM子用户的用户名。 策略示例​
当使用IAM子用户直接进行请求时存在​
单值​
String​
volc:PrincipalTrn​
请求身份的TRN。 策略示例​
  • User身份访问(包括用户sso):trn:iam::${AccountId}:user/$​
  • 角色扮演后的临时凭证访问(包括角色sso):trn:iam::${AccountId}:role/$​
  • Root user身份访问(必须是主账号/根用户访问,主账号内的子用户、角色等身份访问不在生效范围内):trn:iam::${AccountId}:root​
使用账号内IAM身份请求时均存在​
单值​
String和TRN​
volc:RequestTagKeys​
请求传递的全部标签键,包括涉及标签附加或标签解除的请求传递的标签,不包含查询接口按标签过滤时传递的标签。 策略示例​
涉及标签附加、标签解除的请求中存在​
多值​
String​
volc:RequestTag/tag_key​
请求时传递的标签中标签键为tag_key的标签值,包括涉及标签附加或标签解除的请求传递的标签,不包含查询接口按标签过滤时传递的标签。 策略示例​
涉及标签附加、标签解除的请求中存在​
单值​
String​
volc:PrincipalTag/tag_key​
请求的IAM身份标签中标签键为tag_key的标签值。 策略示例​
  • User直接访问时,PrincipalTag为User上绑定的标签​
  • User扮演角色访问时,PrincipalTag为Role上绑定的标签+Session Tag(当Role上的TagKey和Session Tag的TagKey存在重复时,Session Tag将覆盖Role Tag)​
使用IAM子用户或角色访问时存在​
单值​
String​
volc:ResourceTag/tag_key​
请求访问的资源的标签中标签键为tag_key的标签值。该条件要求请求中必须传递资源ID,对于部分列表类接口,请求不传递资源ID时代表查询全部资源,此时请求将无法鉴权通过,如需查询资源列表,建议单独针对列表接口不设置该Condition。 策略示例​
请求的支持标签的云资源时存在​
单值​
String​
​
条件值(Condition value)​
条件值限制了条件生效所需匹配成功的属性值范围,条件值可以是数组,数组中多个值之间为“逻辑或”匹配关系。条件值内支持使用通配符:​
  • 通配符*:匹配0个、1个或多个字符。​
  • 通配符?:匹配一个字符(不能为0个)。​
​
最近更新时间:2026.09.03 21:20:46
这个页面对您有帮助吗?
有用
有用
无用
无用