策略语法
更新时间:2020-03-09
ACL语法简介
背景
百度智能云支持基于用户角色的权限校验和基于资源的权限校验。对用户请求,会根据请求身份得到与用户角色关联的accessControlList,进行鉴权;还会根据用户请求的资源路径,得到与资源关联的ACL(Access Control List 访问控制列表),进行鉴权。
名词解释
Access Control List (ACL):附加在用户角色或资源上的一个权限控制列表。用户对于资源的权限控制,可以是resource-based也可以是user-based。用户可以通过设置ACL,来对各个服务进行访问上的细粒度控制。ACL是一个列表,由一条或多条entry组成。
User-based ACL:附加于用户的权限控制列表。添加用户或组到特定的权限策略,在策略中指定此角色对不同资源的权限。请求到来时,通过用户及其所在组所附加的权限列表集合,遍历权限描述进行鉴权。
Resource-based ACL:附加于资源的权限控制列表。对特定level的资源(如BOS的bucket级别),在创建资源的同时指定其适用的策略,并在策略描述中指定对不同用户的权限。用户请求资源时,得到资源上所关联的权限策略,遍历策略中的权限描述进行鉴权。
IAM ACL语法
IAM ACL使用JSON格式的策略描述语言基于user或resource进行细粒度的访问控制。命名方法使用首字母小写的驼峰命名法。
字段总览
字段名称 | 是否必选 | 字段含义 |
---|---|---|
Id | 可选 | 本ACL的标识符,用来标识本ACL的id或对ACL进行描述 |
accessControlList | 必选 | ACL的主元素,标识ACL主体的开始,由一组statement组成 |
eid | 可选 | 标识子acl entry的id,或者对该entry进行描述 |
service | 必选 | 本条entry影响的服务组件,"*"表示所有服务 |
region | 必选 | 本entry影响的区域,"_"表示所有区域(对全局服务,强制为"_") |
effect | 必选 | 指定能够与本条entry匹配上的request,是否允许其继续执行 |
grantee | 可选 | 指明本entry的受影响人,只适用于resource ACL且必选 |
permission | 必选 | 指明本entry所影响的权限 |
resource | 必选 | 指明本entry所影响的资源 |
condition | 可选 | 指明策略生效的条件,该字段下存在子字段 |
- Grantee子字段:
grantee子字段 | 字段含义 | 示例 |
---|---|---|
id | 授权(或禁止)的accountid | b124deeaf6f641c9ac27700b41a350a8 |
user | 授权(或禁止)的用户 | bob |
group | 授权(或禁止)的组 | developers |
saml-provider | 上传的IDP名称 | developers |
- Condition子字段:
Condition子字段 | 字段含义 |
---|---|
ipAddress | 本statement生效的ip地址范围 |
Time | 本statement生效的时间范围 |
Referer | 本statement生效的referer |
ACL与entry之间的关系:
- 每个resource具有一条独立的ACL
- 每条ACL由一条或多条entry组成
entry之间的关系:
- entry之间是相互独立的关系
- 相互独立的含义即:每个entry相互独立,entry逻辑判断与在ACL中的位置无关
综合示例
{
"id": "id or description",
"accessControlList": [
{
"eid": "eid or description",
"service": "bce:bos",
"region": "bj",
"effect": "Allow",
"permission": [
"CreateBucket",
"READ"
],
"resource": [
"bucketname/objectname"
],
"grantee": [
{
"id": "accountid",
"user": "bob",
"saml-provider":"saml.xml"
}
],
"condition": {
"ipAddress": [
"192.168.0.0/16",
"192.169.0.0/16"
],
"time": {
"in": [
{
"greaterThan":"2010-06-01T23:00:00Z",
"lessThan":"2010-07-01T23:00:00Z "
},
{
"greaterThan":"2010-08-01T23:00:00Z "
}
]
},
"referer": {
"stringEquals": [
"www.abc.com",
"www.example.com"
],
"stringLike": [
"www.baidu.com/*"
]
}
}
}
]
}