ram中使用policy(授權政策)來描述授權的具體内容,授權内容主要包含效力(effect)、資源(resource)、對資源所授予的操作權限(action)以及限制條件(condition)這幾個基本元素。
效力(effect)
授權效力包括兩種:允許(allow)和拒絕(deny)。
資源(resource)
資源是指被授權的具體對象。比如,通路政策“允許張三對資源samplebucket執行getbucket操作”中的資源是“samplebucket”。
操作方法(action)
操作方法是指對具體資源的操作。比如,通路政策“允許張三對資源samplebucket執行getbucket操作”中的操作是“getbucket”。
限制條件(condition)
限制條件是指授權生效的限制條件。比如,通路政策“允許張三在2011年12月31日之前對資源samplebucket執行getbucket操作”中的限制條件是“在2011年12月31日之前”。
policy結構包括policy版本号及授權語句清單。每個授權語句又包括effect(授權類型)、action(操作名稱清單)、resource(操作對象清單)以及condition(條件限制),其中condition是可選項。
policy結構簡述如下:
<b>支援json格式描述</b>
目前ram僅僅支援json格式的描述。當建立或更新policy時,ram會首先檢查json格式的正确性。關于json的文法标準請參考rfc 7159。使用者也可以使用一些線上的json格式驗證器和編輯器來校驗json文本的有效性。
文法描述的符号使用說明:
<b>文法描述:</b>
policy文法說明:
目前支援的policy版本為1。
一個policy可以有多條授權語句(statement)。
每條授權語句要麼是deny,要麼是allow。一條授權語句中,action是一個支援多個操作的清單,resource也是一個支援多個對象的清單。
每條授權語句都支援獨立的限制條件。一個條件塊可以支援多種條件操作類型,以及對這多種條件的邏輯組合。
一個使用者可以被授予多個policy,當這些policy存在多條授權語句既包含有allow又包含有deny時,我們遵循deny優先(隻認deny不認allow)原則。
當取值為數字或布爾值時,與字元串類似,需要用雙引号引起。
當元素取值為字元串值時,可以支援(*)和(?)模糊比對。(*)可以代表0個或多個任意的英文字母,(?)可以代表1個任意的英文字母。比如,”ecs:describe*” 可以表示ecs的所有以describe開頭的api操作名稱。
<b></b>
<b>effect(授權類型)</b>
effect取值為allow或deny。比如,
<b>action(操作名稱清單)</b>
action支援多值,取值為雲服務所定義的api操作名稱,其格式定義如下:
格式說明:
service-name: 阿裡雲産品名稱,如ecs, rds, slb, oss, ots等。
action-name: service相關的api操作接口名稱。
描述樣例:
<b>resource(操作對象清單)</b>
resource通常指操作對象,比如ecs虛拟機執行個體,oss存儲對象。我們使用如下格式來命名阿裡雲服務的資源命名。
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對象。
<b>condition(條件限制)</b>
條件塊(condition block)由一個或多個條件子句構成。一個條件子句由條件操作類型、條件關鍵字和條件值組成。條件操作類型和條件關鍵字在下文中會有較長的描述。
是否滿足條件的判斷原則如下圖所示。描述如下:(1) 一個條件關鍵字可以指定一個或多個值,在條件檢查時,如果條件關鍵字的值與指定值中的某一個相等,即可判定條件滿足。(2) 同一種條件操作類型的條件子句下的多個條件關鍵字同時滿足的情況下,才能判定該條件子句滿足。(3) 條件塊下的所有條件子句同時滿足的情況下,才能判定該條件塊滿足。
條件塊判斷邏輯:
我們支援如下條件操作類型:字元串類型、數字類型、日期類型、布爾類型和ip位址類型。每種條件操作類型分别支援如下的方法:
<b>string</b>
stringequals
stringnotequals
stringequalsignorecase
stringnotequalsignorecase
stringlike
stringnotlike
<b>numeric</b>
numericequals
numericlessthan
numericlessthanequals
numericgreaterthan
numericgreaterthanequals
<b>date and time</b>
dateequals
datenotequals
datelessthan
datelessthanequals
dategreaterthan
dategreaterthanequals
<b>boolean</b>
bool
<b>ip address</b>
ipaddress
notipaddress
阿裡雲保留的條件關鍵字命名格式為:
阿裡雲保留了如下通用條件關鍵字:
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
使用者登入時是否使用了多因素認證(二步認證)
部分産品定義了産品級别的條件關鍵字,格式如下:
不同産品定義的條件關鍵字,請參見各産品的使用者文檔。
<b>基本模型</b>
當主賬号身份通路資源時,如果主賬号是資源owner,則允許通路;否則不允許通路。該規則的例外情況說明:存在極少數雲産品(如sls)直接支援對跨雲賬号acl授權,如果通過acl授權檢查,則允許通路。
當ram使用者身份通路資源時,如果ram使用者所屬的主賬号對資源有通路權限,并且主賬号對ram使用者有顯式的allow授權政策,則允許通路;否則不允許通路。
當ram角色身份通路資源時,如果ram角色所屬的主賬号對資源有通路權限,并且主賬号對ram角色有顯式的allow授權政策,并且角色通路令牌(sts-token)有顯式的授權,則允許通路;否則不允許通路。
ram使用者身份的授權政策檢查邏輯
ram使用者通路資源時,預設沒有任何權限,除非有進行顯式的授權(給ram使用者綁定授權政策)。授權政策語句支援allow(允許)和deny(禁止)兩種授權類型,當多個授權語句對一個資源操作分别出現allow和deny授權時,我們使用deny優先的原則。
授權政策檢查邏輯如下圖所示:
ram使用者通路資源時,權限檢查邏輯如下:
按照ram使用者身份所綁定的授權政策是否有授權,如果是deny,則拒絕通路;否則進入下一步檢查。
檢查ram角色所屬的主賬号是否有通路權限。如果是資源owner,則允許通路;否則檢視該資源是否有支援跨賬号acl許可,有則允許通路,否則拒絕通路。
<b>ram角色身份的授權政策檢查邏輯</b>
ram角色(使用角色通路令牌)通路資源時,權限檢查邏輯如下:
如果目前通路令牌有指定授權政策(調用assumerole時所傳入的授權政策參數),則按照上述授權政策檢查邏輯進行判斷,如果是deny,則拒絕通路;否則進入下一步檢查。 如果目前通路令牌沒有指定授權策,則直接進入下一步檢查。
檢查ram角色身份所綁定的授權政策是否有授權。如果是deny,則拒絕通路;否則進入下一步檢查。
注:本文章摘抄于阿裡雲幫助文檔,用來彙總起來友善自己檢視。