阿里雲許可權管理機制包括存取控制(Resource Access Management,簡稱RAM)和安全憑證管理(Security Token Service,簡稱STS),可以根據需求使用不同許可權的RAM使用者來訪問Tablestore,也支援為使用者提供訪問的臨時授權。使用RAM和STS能極大地提高管理的靈活性和安全性。

RAM的主要作用是控制帳號系統的許可權。通過使用RAM可以在阿里雲帳號的許可權範圍內建立RAM使用者,給不同的RAM使用者指派不同的許可權,從而達到授權管理的目的。更多資訊,請參見存取控制產品幫忙文檔

STS是一個安全憑證(Token)的管理系統,用來授予臨時的存取權限,如此即可通過STS來完成對臨時使用者的訪問授權。更多資訊,請參見STS

背景介紹

RAM和STS需要解決的一個核心問題是如何在不暴露阿里雲帳號AccessKey的情況下安全地授權別人訪問。因為如果阿里雲帳號AccessKey暴露出去,則會帶來極大的安全風險,別人可以隨意操作該帳號下所有的資源、盜取重要訊息等。

RAM提供了一種長期有效許可權控制機制,通過分出不同許可權的RAM使用者,將不同的許可權分給不同的使用者,即使RAM使用者泄露也不會造成全域的資訊泄露。RAM使用者在一般情況下是長期有效。因此,RAM使用者的AccessKey是不能泄露的。

相對於RAM提供的長效控制機制,STS提供的是一種臨時訪問授權,通過STS可以返回臨時的AccessKey和Token,這些資訊可以直接發給臨時使用者用來訪問Tablestore。一般來說,從STS擷取的許可權會受到更加嚴格的限制,並且擁有時間限制,因此即使這些資訊泄露,對於系統的影響也很小。

基本概念

下表是一些基本概念的簡單解釋。

基本概念 描述
RAM使用者 從阿里雲帳號中建立出來的RAM使用者,在建立的時候可以分配獨立的密碼和許可權,每個RAM使用者擁有自己的AccessKey,可以和阿里雲帳號一樣正常完成有許可權的操作。一般來說,此處的RAM使用者可以理解為具有某種許可權的使用者,可以被認為是一個具有某些許可權的操作發起者。
角色(Role) 表示某種操作許可權的虛擬概念,但是沒有獨立的登入密碼和AccessKey。RAM使用者可以扮演角色,扮演角色時的許可權是該角色自身的許可權。
授權策略(Policy) 用來定義許可權的規則,例如允許使用者讀取或者寫入某些資源。
資源(Resource) 代表使用者可訪問的雲資源,例如Tablestore所有的執行個體、某個執行個體或者執行個體中的某個表等。

RAM使用者和角色可以類比為個人和其身份的關係,某人在公司的角色是員工,在家裡的角色是父親,在不同的情境扮演不同的角色,但是還是同一個人。在扮演不同角色的時候也就擁有對應角色的許可權。單獨的員工或者父親概念並不能作為一個操作的實體,只有有人扮演了之後才是一個完整的概念。此處還可以體現一個重要的概念,那就是角色可以被多個不同的個人同時扮演。完成角色扮演之後,該個人就自動擁有該角色的所有許可權。

使用樣本:

某個阿里雲使用者名稱為alice,其在Tablestore有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。