Policy結構

基本元素
1. 效力(Effect)
授權效力包括兩種:允許(Allow)和拒絕(Deny)。
2. 資源(Resource)
資源是指被授權的具體對象。
3. 操作(Action)
操作是指對具體資源的操作。
4. 限制條件(Condition)
限制條件是指授權生效的限制條件。
Policy 元素使用規則
1. Effect(效力)
Effect 取值 為 Allow 或 Deny。比如,
"Effect": "Allow"
2. Action(操作列表)
Action 支持多值,取值為雲服務所定義的 API 操作名稱,其格式定義如下:
<service-name>:<action-name>
格式說明
- service-name: 阿里雲產品名稱,如 ecs, rds, slb, oss, ots 等。
- action-name: service 相關的 API 操作接口名稱。
描述樣例
"Action": ["oss:ListBuckets", "ecs:Describe*", "rds:Describe*"]
3. Resource(資源列表)
Resource 通常指資源,即操作對象,比如 ECS 虛擬機實例,OSS存儲桶。我們使用如下格式來命名阿里雲服務的資源命名。
acs:<service-name>:<region>:<account-id>:<relative-id>
格式說明:
- acs: Alibaba Cloud Service 的首字母縮寫,表示阿里雲的公有雲平台。
- service-name: 阿里雲提供的服務名字,如 ecs, oss, ots 等。
- region: 地域信息。如果不支持該項,可以使用通配符“*”號來代替。
- account-id: 賬號 ID,比如 1234567890123456,也可以用“*”代替。
- relative-id: 與服務相關的資源描述部分,其語義由具體服務指定。這部分的格式描述支持類似於一個文件路徑的樹狀結構。以 oss 為例,relative-id = “mybucket/dir1/object1.jpg” 表示一個 OSS 對象。
描述樣例
"Resource": ["acs:ecs:*:*:instance/inst-001", "acs:ecs:*:*:instance/inst-002", "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*"]
條件限制(Condition)
條件塊(Condition Block)由一個或多個條件子句構成。一個條件子句由條件操作類型、條件關鍵字和條件值組成。條件操作類型和條件關鍵字在下文中會有詳細描述。
條件塊判斷邏輯
是否滿足條件的判斷原則如下圖所示:
圖 2. 是否滿足條件的判斷原則

具體規則如下:
- 一個條件關鍵字可以指定一個或多個值,在條件檢查時,如果條件關鍵字的值與指定值中的某一個相等,即可判定條件滿足。
- 同一種條件操作類型的條件子句下的多個條件關鍵字同時滿足的情況下,才能判定該條件子句滿足。
- 條件塊下的所有條件子句同時滿足的情況下,才能判定該條件塊滿足。
條件操作類型
支持如下條件操作類型:字符串類型(String)、數字類型(Numeric)、日期類型(Date and time)、布爾類型(Boolean)和 IP 地址類型(IP address)。
每種條件操作類型分別支持如下的方法:
| string | Numeric | Date and time | Boolean | IP address |
|---|---|---|---|---|
| StringEquals | NumericEquals | DateEquals | Bool | IpAddress |
| StringNotEquals | NumericNotEquals | DateNotEquals | - | NotIpAddress |
| StringEqualsIgnoreCase | NumericLessThan | DateLessThan | - | - |
| StringNotEqualsIgnoreCase | NumericLessThanEquals | DateLessThanEquals | - | - |
| StringLike | NumericGreaterThan | DateGreaterThan | - | - |
| StringNotLike | NumericGreaterThanEquals | DateGreaterThanEquals | - | - |
條件關鍵字(Condition-key
阿里雲服務保留的條件關鍵字命名格式為:
acs:<condition-key>
阿里雲服務保留的通用條件關鍵字如下:
| 通用條件關鍵字 | 類型 | 說明 |
|---|---|---|
| acs:CurrentTime | Date and time | Web Server 接收到請求的時間,以 ISO 8601 格式表示,如 2012-11-11T23:59:59Z |
| acs:SecureTransport | Boolean | 發送請求是否使用了安全信道,如 HTTPS |
| acs:SourceIp | IP address | 發送請求時的客戶端 IP 地址 |
| acs:MFAPresent | Boolean | 用戶登錄時是否使用了多因素認證(二步認證) |
雲產品可以定義產品級別的條件關鍵字,格式如下:
<service-name>:<condition-key>
部分雲產品定義的條件關鍵字如下:
| 產品名稱 | 條件關鍵字 | 類型 | 說明 |
|---|---|---|---|
| ECS | ecs:tag/
|
String | ECS資源的標簽關鍵字,可由用戶自定義 |
| RDS | rds:ResourceTag/
|
String | RDS資源的標簽關鍵字,可由用戶自定義 |
| OSS | oss:Delimiter | String | OSS對Object名字進行分組的分隔符 |
| OSS | oss:Prefix | String | OSS Object名稱的前綴 |
Policy 樣例
如下所示的 Policy 樣例中,包含兩條授權語句(Statement):
- 第 1 條授權語句是允許對華東 1(杭州)地域的所有 ecs 資源有查看權限(ecs:Describe*);
- 第 2 條授權語句是允許對 oss 的 mybucket 存儲桶中的對象具有只讀訪問權限(oss:ListObjects,
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "ecs:Describe*",
"Resource": "acs:ecs:cn-hangzhou:*:*"
},
{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Resource": [
"acs:oss:*:*:mybucket",
"acs:oss:*:*:mybucket/*"
],
"Condition":{
"IpAddress": {
"acs:SourceIp": ["42.120.88.10", "42.120.66.0/24"]
}
}
}
]
}
