策略语法
更新时间: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中的位置无关
 
综合示例
                Plain Text
                
            
            1{
2    "id": "id or description",
3    "accessControlList": [
4        {
5            "eid": "eid or description",
6            "service": "bce:bos",
7            "region": "bj",
8            "effect": "Allow",
9            "permission": [
10                "CreateBucket",
11                "READ"
12            ],
13            "resource": [
14                "bucketname/objectname"
15            ],
16            "grantee": [
17                {
18                    "id": "accountid",
19                    "user": "bob",
20                    "saml-provider":"saml.xml"
21                }
22            ],
23            "condition": {
24                "ipAddress": [
25                    "192.168.0.0/16",
26                    "192.169.0.0/16"
27                ],
28                "time": {
29                "in": [
30                        {
31                            "greaterThan":"2010-06-01T23:00:00Z",
32                            "lessThan":"2010-07-01T23:00:00Z "
33                        },
34                        {
35                            "greaterThan":"2010-08-01T23:00:00Z "
36                        }
37                    ]
38                },
39                "referer": {
40                    "stringEquals": [
41                        "www.abc.com",
42                        "www.example.com"
43                    ],
44                    "stringLike": [
45                        "www.baidu.com/*"
46                    ]
47                }
48            }
49        }
50    ]
51}
            