阿里雲許可權管理機制包括存取控制RAM(Resource Access Management)和阿里雲STS(Security Token Service),可以根據需求使用不同許可權的RAM使用者來訪問Table Store,也支援為使用者提供訪問的臨時授權。使用RAM和STS能極大地提高管理的靈活性和安全性。
存取控制RAM是阿里雲提供的系統管理使用者身份與資源存取權限的服務。通過使用RAM可以在阿里雲帳號的許可權範圍內建立RAM使用者,給不同的RAM使用者指派不同的許可權,從而達到授權管理的目的。更多資訊,請參見什麼是存取控制。
阿里雲STS是阿里雲提供的一種臨時存取權限管理服務,用來授予臨時的存取權限。通過STS可以完成對臨時使用者的訪問授權。更多資訊,請參見臨時訪問憑證STS概念。
背景介紹
RAM和STS需要解決的一個核心問題是如何在不暴露阿里雲帳號AccessKey的情況下安全地授權別人訪問。因為如果阿里雲帳號AccessKey暴露出去,則會帶來極大的安全風險,別人可以隨意操作該帳號下所有的資源、盜取重要訊息等。
RAM提供了一種長期有效許可權控制機制,通過分出不同許可權的RAM使用者,將不同的許可權分給不同的使用者,即使RAM使用者泄露也不會造成全域的資訊泄露。RAM使用者在一般情況下是長期有效。因此,RAM使用者的AccessKey是不能泄露的。
相對於RAM提供的長效控制機制,STS提供的是一種臨時訪問授權,通過STS可以返回臨時的AccessKey和Token,這些資訊可以直接發給臨時使用者用來訪問Table Store。一般來說,從STS擷取的許可權會受到更加嚴格的限制,並且擁有時間限制,因此即使這些資訊泄露,對於系統的影響也很小。
基本概念
下表是一些基本概念的簡單解釋。更多資訊,請參見基本概念。
基本概念 | 描述 |
RAM使用者 | RAM使用者也叫RAM帳號,是RAM的一種實體身份類型,有確定的身份ID和身份憑證,它通常與某個確定的人或應用程式一一對應。RAM使用者具備以下特點:
|
RAM角色(RAM role) | RAM角色有確定的身份,可以被賦予一組權限原則,但沒有確定的登入密碼或存取金鑰。RAM角色需要被一個可信的實體使用者扮演,扮演成功後實體使用者將獲得RAM角色的安全性權杖,使用這個安全性權杖就能以角色身份訪問被授權的資源。 |
權限原則(Policy) | 權限原則是用文法結構描述的一組許可權的集合,可以精確地描述被授權的資源集、操作集以及授權條件。權限原則是描述許可權集的一種簡單語言規範。關於RAM支援的語言規範,請參見權限原則文法和結構。 在RAM中,權限原則是一種資源實體。RAM支援以下兩種權限原則:
通過為RAM使用者、使用者組或RAM角色綁定權限原則,可以獲得權限原則中指定的存取權限。 |
資源(Resource) | 資源是雲端服務呈現給使用者與之互動的對象實體的一種抽象,例如Table Store所有的執行個體、某個執行個體或者執行個體中的某個表等。 |
RAM使用者和角色可以類比為個人和其身份的關係,某人在公司的角色是員工,在家裡的角色是父親,在不同的情境扮演不同的角色,但是還是同一個人。在扮演不同角色的時候也就擁有對應角色的許可權。單獨的員工或者父親概念並不能作為一個操作的實體,只有當有人扮演了之後才是一個完整的概念。此處還可以體現一個重要的概念,那就是角色可以被多個不同的個人同時扮演。完成角色扮演之後,該個人就自動擁有該角色的所有許可權。
使用樣本:
某個阿里雲使用者名稱為alice,其在Table Store有alice_a和alice_b兩個執行個體。alice對兩個執行個體都擁有完全的許可權。
為避免阿里雲帳號的AccessKey泄露而導致安全風險,alice使用RAM建立了兩個RAM使用者bob和carol。bob對alice_a擁有讀寫權限,carol對alice_b擁有讀寫權限。bob和carol都擁有獨立的AccessKey,這樣萬一泄露了也只會影響其中一個執行個體,而且alice可以很方便地在控制台取消泄露使用者的許可權。
假設現在需要授權給其他人讀取alice_a中的資料表。這種情況下不應該直接把bob的AccessKey透露出去,可以建立一個角色,例如AliceAReader,給該角色賦予讀取alice_a的許可權。請注意此時AliceAReader還是沒法直接使用,因為並不存在對應AliceAReader的AccessKey,AliceAReader當前僅表示一個擁有訪問alice_a許可權的虛擬實體。
為了能擷取臨時授權,此時可以調用STS的AssumeRole介面,通知STS bob將要扮演AliceAReader角色。如果成功,則STS會返回一個臨時的AccessKeyId、AccessKeySecret和SecurityToken作為訪問憑證。將該憑證發給需要訪問的臨時使用者即可獲得訪問alice_a的臨時許可權。臨時訪問憑證的到期時間在調用AssumeRole時指定。
為什麼RAM和STS這麼複雜
RAM和STS的概念之所以複雜,是為了許可權控制的靈活性而犧牲了部分的易用性。
將RAM使用者和角色分開,主要是為了將執行操作的實體和代表許可權集合的虛擬實體分開。如果使用者本身需要的許可權很多,例如讀寫權限,但是實際上每次操作只需要其中的一部分許可權,那麼我們就可以建立兩個角色,分別具有讀和寫入權限,然後建立一個沒有任何許可權但是可以擁有扮演兩個角色許可權的使用者。當使用者需要讀許可權時就可以臨時扮演其中擁有讀許可權的角色,寫入權限同理,以降低每次操作中許可權泄露的風險。而且通過扮演角色可以將許可權授予其他的阿里雲使用者,更加方便了協同使用。
當然,提供了靈活性並不代表一定要使用全部的功能,應該根據需求來使用其中的一個子集。例如,不需要帶到期時間的臨時訪問憑證,可以只使用RAM的RAM使用者功能而無需使用STS。