閱讀417 返回首頁    go 阿裏雲


Policy語法結構__附錄1: 授權策略語言_用戶指南_訪問控製-阿裏雲

Policy結構簡述

Policy結構包括Policy版本號及授權語句列表。每個授權語句又包括Effect(授權類型)、Action(操作名稱列表)、Resource(操作對象列表)以及Condition(條件限製),其中Condition是可選項。

Policy結構簡述如下:

Policy結構簡述

支持JSON格式描述

目前RAM僅僅支持JSON格式的描述。當創建或更新Policy時,RAM會首先檢查JSON格式的正確性。關於JSON的語法標準請參考RFC 7159。用戶也可以使用一些在線的JSON格式驗證器和編輯器來校驗JSON文本的有效性。

Policy語法

語法描述的符號使用說明

  1. 1. Policy所包含的JSON字符有:
  2. { } [ ] " , :
  3. 2. 描述語法使用的特殊字符有:
  4. = < > ( ) |
  5. 3. 當一個元素允許多值時,這裏使用逗號和省略號來表達,比如:
  6. [<action_string>, <action_string>, ...]
  7. 4. 在所有支持多值的語法中,使用單值也是有效的。而且這兩種表達方式是等效的:
  8. "Action": [<action_string>] 和 "Action": <action_string>
  9. 5. 帶有問號的元素表示這是一個可選元素,比如:
  10. <condition_block?>
  11. 6. 多值之間用豎線(|)隔開,表示取值隻能選取這些值中的某一個。比如:
  12. ("Allow" | "Deny")
  13. 7. 使用雙引號引起了的元素,表示它是文本串。比如:
  14. <version_block> = "Version" : ("1")

語法描述

  1. policy = {
  2. <version_block>,
  3. <statement_block>
  4. }
  5. <version_block> = "Version" : ("1")
  6. <statement_block> = "Statement" : [ <statement>, <statement>, ... ]
  7. <statement> = {
  8. <effect_block>,
  9. <action_block>,
  10. <resource_block>,
  11. <condition_block?>
  12. }
  13. <effect_block> = "Effect" : ("Allow" | "Deny")
  14. <action_block> = ("Action" | "NotAction") :
  15. ("*" | [<action_string>, <action_string>, ...])
  16. <resource_block> = ("Resource" | "NotResource") :
  17. ("*" | [<resource_string>, <resource_string>, ...])
  18. <condition_block> = "Condition" : <condition_map>
  19. <condition_map> = {
  20. <condition_type_string> : {
  21. <condition_key_string> : <condition_value_list>,
  22. <condition_key_string> : <condition_value_list>,
  23. ...
  24. },
  25. <condition_type_string> : {
  26. <condition_key_string> : <condition_value_list>,
  27. <condition_key_string> : <condition_value_list>,
  28. ...
  29. }, ...
  30. }
  31. <condition_value_list> = [<condition_value>, <condition_value>, ...]
  32. <condition_value> = ("String" | "Number" | "Boolean")

Policy語法說明:

  • 當前支持的Policy版本為1。
  • 一個Policy可以有多條授權語句(Statement)。
  • 每條授權語句要麼是Deny,要麼是Allow。一條授權語句中,Action是一個支持多個操作的列表,Resource也是一個支持多個對象的列表。
  • 每條授權語句都支持獨立的限製條件。一個條件塊可以支持多種條件操作類型,以及對這多種條件的邏輯組合。
  • 一個用戶可以被授予多個Policy,當這些Policy存在多條授權語句既包含有Allow又包含有Deny時,我們遵循Deny優先(隻認Deny不認Allow)原則。
  • 當取值為數字或布爾值時,與字符串類似,需要用雙引號引起。
  • 當元素取值為字符串值時,可以支持(*)和(?)模煳匹配。(*)可以代表0個或多個任意的英文字母,(?)可以代表1個任意的英文字母。比如,”ecs:Describe*” 可以表示ecs的所有以Describe開頭的API操作名稱。

Effect(授權類型)

Effect取值為Allow或Deny。比如,

  1. "Effect": "Allow"

Action(操作名稱列表)

Action支持多值,取值為雲服務所定義的API操作名稱,其格式定義如下:

  1. <service-name>:<action-name>

格式說明:

  • service-name: 阿裏雲產品名稱,如ecs, rds, slb, oss, ots等。
  • action-name: service相關的api操作接口名稱。

描述樣例:

  1. "Action": ["oss:ListBuckets", "ecs:Describe*", "rds:Describe*"]

Resource(操作對象列表)

Resource通常指操作對象,比如ECS虛擬機實例,OSS存儲對象。我們使用如下格式來命名阿裏雲服務的資源命名。

  1. acs:<service-name>:<region>:<account-id>:<relative-id>

格式說明:

  • acs: Aliyun Cloud Service的首字母縮寫,表示阿裏雲的公有雲平台
  • service-name: 阿裏雲提供的Open Service的名字,如ecs, oss, ots等
  • region: 地區信息。如果不支持該項,可以使用通配符“*”號來代替
  • account-id: 賬號ID,比如 1234567890123456,也可以用“*”代替
  • relative-id: 與service相關的資源描述部分,其語義由具體service指定。這部分的格式描述支持類似於一個文件路徑的樹狀結構。以oss為例,relative-id = “mybucket/dir1/object1.jpg”表示一個OSS對象。

描述樣例:

  1. "Resource": ["acs:ecs:*:*:instance/inst-001", "acs:ecs:*:*:instance/inst-002", "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*"]

Condition(條件限製)

條件塊(Condition Block)由一個或多個條件子句構成。一個條件子句由條件操作類型、條件關鍵字和條件值組成。條件操作類型和條件關鍵字在下文中會有詳細描述。

是否滿足條件的判斷原則如下圖所示。描述如下:(1) 一個條件關鍵字可以指定一個或多個值,在條件檢查時,如果條件關鍵字的值與指定值中的某一個相等,即可判定條件滿足。(2) 同一種條件操作類型的條件子句下的多個條件關鍵字同時滿足的情況下,才能判定該條件子句滿足。(3) 條件塊下的所有條件子句同時滿足的情況下,才能判定該條件塊滿足。

條件塊判斷邏輯:

條件判斷邏輯

條件操作類型

我們支持如下條件操作類型:字符串類型、數字類型、日期類型、布爾類型和IP地址類型。每種條件操作類型分別支持如下的方法:

String

  • StringEquals
  • StringNotEquals
  • StringEqualsIgnoreCase
  • StringNotEqualsIgnoreCase
  • StringLike
  • StringNotLike

Numeric

  • NumericEquals
  • NumericEquals
  • NumericLessThan
  • NumericLessThanEquals
  • NumericGreaterThan
  • NumericGreaterThanEquals

Date and time

  • DateEquals
  • DateNotEquals
  • DateLessThan
  • DateLessThanEquals
  • DateGreaterThan
  • DateGreaterThanEquals

Boolean

  • Bool

IP address

  • IpAddress
  • NotIpAddress

條件關鍵字

阿裏雲保留的條件關鍵字命名格式為:

  1. acs:<condition-key>

阿裏雲保留了如下通用條件關鍵字:

ACS保留條件關鍵字 類型 說明
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 用戶登錄時是否使用了多因素認證(二步認證)

部分產品定義了產品級別的條件關鍵字,格式如下:

  1. <service-name>:<condition-key>

不同產品定義的條件關鍵字,請參見各產品的用戶文檔。

Policy樣例

如下的Policy樣例包含兩條授權語句(Statement):第1條授權語句是允許對ecs的華東 1 (杭州) region所有資源有查看權限(ecs:Describe*);第2條授權語句是允許對oss的mybucket存儲桶中的對象具有讀訪問權限(oss:ListObjects, oss:GetObject),並限製請求者的IP來源必須是”42.120.88.10”或”42.120.66.0/24”。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": "ecs:Describe*",
  7. "Resource": "acs:ecs:cn-hangzhou:*:*"
  8. },
  9. {
  10. "Effect": "Allow",
  11. "Action": [
  12. "oss:ListObjects",
  13. "oss:GetObject"
  14. ],
  15. "Resource": [
  16. "acs:oss:*:*:mybucket",
  17. "acs:oss:*:*:mybucket/*"
  18. ],
  19. "Condition":{
  20. "IpAddress": {
  21. "acs:SourceIp": ["42.120.88.10", "42.120.66.0/24"]
  22. }
  23. }
  24. }
  25. ]
  26. }

最後更新:2016-11-23 16:04:01

  上一篇:go Policy基本元素__附錄1: 授權策略語言_用戶指南_訪問控製-阿裏雲
  下一篇:go 權限檢查規則__附錄1: 授權策略語言_用戶指南_訪問控製-阿裏雲