策略語法
更新時間 2023-12-13 10:50:54
最近更新時間: 2023-12-13 10:50:54
分享文章
本節主要介紹策略語法
以OBS的自定義策略為例,說明策略的語法。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"obs:bucket:ListAllMyBuckets",
"obs:bucket:HeadBucket",
"obs:bucket:ListBucket",
"obs:bucket:GetBucketLocation"
],
"Condition": {
"StringEndWithIfExists": {
"g:UserName": [
"specialCharactor"
]
},
"Bool": {
"g:MFAPresent": [
"true"
]
}
},
"Resource": [
"obs:*:*:bucket:*"
]
}
]
}
策略結構
策略結構包括Version(策略版本號)和Statement(策略權限語句)兩部分,其中Statement可以有多個,表示不同的授權項。
圖 策略結構


策略參數
策略參數包含Version和Statement兩部分,下面介紹策略參數詳細說明。了解策略參數后,您可以根據場景自定義策略。
表 策略參數說明
參數 含義 值 Version 策略的版本。 1.0:代表基于角色的訪問控制。
1.1:代表基于策略的訪問控制。Statement:
策略的授權語句Effect:作用 定義Action中的操作權限是否允許執行。
Allow:允許執行。
Deny:不允許執行。
說明
當同一個Action的Effect既有Allow又有Deny時,遵循Deny優先的原則。Action:授權項 操作權限。 格式為“服務名:資源類型:操作”。授權項支持通配符號*,通配符號*表示所有。
示例:
"obs:bucket:ListAllMybuckets":表示查看OBS桶列表權限,其中obs為服務名,bucket為資源類型,ListAllMybuckets為操作。
您可以在對應服務的API接口資料中查看該服務所有授權項。Condition:條件 使策略生效的特定條件,包括條件鍵和運算符。 格式為“條件運算符:{條件鍵:[條件值1,條件值2]}”。
如果您設置多個條件,同時滿足所有條件時,該策略才生效。
示例:
"StringEndWithIfExists":{"g:UserName":["specialCharactor"]}:表示當用戶輸入的用戶名以"specialCharactor"結尾時該條statement生效。Resource: 資源類型 策略所作用的資源。 格式為“服務名:region:domainId:資源類型:資源路徑”, 資源類型支持通配符號*,通配符號表示所有。 示例:
"obs:::bucket:": 表示所有的OBS桶。
"obs:::object:my-bucket/my-object/*": 表示my-bucket桶my-object目錄下的所有對象。
-
條件鍵條件鍵表示策略語句的Condition 元素中的鍵值。根據適用范圍,分為全局條件鍵和服務條件鍵。
- 全局級條件鍵(前綴為g:)適用于所有操作,IAM提供 通用全局條件鍵 。
- 通用全局條件鍵:在鑒權過程中,云服務不需要提供用戶身份信息,IAM將自動獲取并鑒權。詳情請參見表-通用全局條件鍵
- 服務級條件鍵(前綴為服務縮寫,如obs:)僅適用于對應服務的操作,詳情請參見對應云服務的用戶指南。
- 全局級條件鍵(前綴為g:)適用于所有操作,IAM提供 通用全局條件鍵 。
表 通用全局條件鍵
| 全局條件鍵 | 類型 | 說明 |
|---|---|---|
| g:CurrentTime | 時間 | 接收到鑒權請求的時間。以ISO 8601 格式表示,例如:2012-11-11T23:59:59Z |
| g:DomainName | 字符串 | 帳號名稱 |
| g:MFAPresent | 布爾值 | 是否使用MFA多因素認證方式獲取Token |
| g:MFAAge | 數值 | 通過MFA多因素認證方式獲取的Token的生效時長。該條件需要和g:MFAPresent一起使用 |
| g:ProjectName | 字符串 | 項目名稱 |
| g:ServiceName | 字符串 | 服務名稱 |
| g:UserId | 字符串 | IAM用戶ID |
| g:UserName | 字符串 | IAM用戶名 |
- 運算符
運算符與條件鍵、條件值一起構成完整的條件判斷語句,當請求信息滿足該條件時,策略才能生效,詳情請參見下表。運算符可以增加后綴“IfExists”,表示對應請求值為空或滿足條件的請求值均使策略生效,如“StringEqualsIfExists”表示請求值為空或請求值等于條件值均使策略生效。
表 運算符(字符串型運算符,如未增加說明,不區分大小寫。)
| 運算符 | 類型 | 說明 |
|---|---|---|
| StringEquals | 字符串 | 請求值等于條件值(區分大小寫) |
| StringNotEquals | 字符串 | 請求值不等于條件值(區分大小寫) |
| StringEqualsIgnoreCase | 字符串 | 請求值等于條件值 |
| StringNotEqualsIgnoreCase | 字符串 | 請求值不等于條件值 |
| StringLike | 字符串 | 請求值包含條件值 |
| StringNotLike | 字符串 | 請求值不包含條件值 |
| StringStartWith | 字符串 | 請求值以條件值開頭 |
| StringEndWith | 字符串 | 請求值以條件值結尾 |
| StringNotStartWith | 字符串 | 請求值不以條件值開頭 |
| StringNotEndWith | 字符串 | 請求值不以條件值結尾 |
| StringEqualsAnyOf | 字符串 | 可配置多個條件值,請求值與任意一個條件值相同(區分大小寫) |
| StringNotEqualsAnyOf | 字符串 | 可配置多個條件值,請求值與所有條件值都不同(區分大小寫) |
| StringEqualsIgnoreCaseAnyOf | 字符串 | 可配置多個條件值,請求值與任意一個條件值相同 |
| StringNotEqualsIgnoreCaseAnyOf | 字符串 | 可配置多個條件值,請求值與所有條件值都不同 |
| StringLikeAnyOf | 字符串 | 可配置多個條件值,請求值包含任意一個條件值 |
| StringNotLikeAnyOf | 字符串 | 可配置多個條件值,請求值不包含所有條件值 |
| StringStartWithAnyOf | 字符串 | 可配置多個條件值,請求值以任意一個條件值開頭 |
| StringEndWithAnyOf | 字符串 | 可配置多個條件值,請求值以任意一個條件值結尾 |
| StringNotStartWithAnyOf | 字符串 | 可配置多個條件值,請求值不以任意一個條件值開頭 |
| StringNotEndWithAnyOf | 字符串 | 可配置多個條件值,請求值不以任意一個條件值結尾 |
| NumberEquals | 數值 | 請求值等于條件值 |
| NumberNotEquals | 數值 | 請求值不等于條件值 |
| NumberLessThan | 數值 | 請求值小于條件值 |
| NumberLessThanEquals | 數值 | 請求值小于或等于條件值 |
| NumberGreaterThan | 數值 | 請求值大于條件值 |
| NumberGreaterThanEquals | 數值 | 請求值大于或等于條件值 |
| NumberEqualsAnyOf | 數值 | 可配置多個條件值,請求值與任意一個條件值相同 |
| NumberNotEqualsAnyOf | 數值 | 可配置多個條件值,請求值與所有條件值都不同 |
| DateLessThan | 時間 | 請求值早于條件值 |
| DateLessThanEquals | 時間 | 請求值早于或等于條件值 |
| DateGreaterThan | 時間 | 請求值晚于條件值 |
| DateGreaterThanEquals | 時間 | 請求值晚于或等于條件值 |
| Bool | 布爾值 | 請求值等于條件值 |
| IpAddress | IP地址 | 請求值在條件值所設置的IP地址范圍內 |
| NotIpAddress | IP地址 | 請求值不在條件值所設置的IP地址范圍內 |
| IsNullOrEmpty | 空值 | 請求值為null或者空字符串 |
| IsNull | 空值 | 請求值為null |
| IsNotNull | 空值 | 請求值不為null |