阿里云權限管理機制包括訪問控制RAM(Resource Access Management)和阿里云STS(Security Token Service),可以根據需求使用不同權限的RAM用戶來訪問表格存儲,也支持為用戶提供訪問的臨時授權。使用RAM和STS能極大地提高管理的靈活性和安全性。

訪問控制RAM是阿里云提供的管理用戶身份與資源訪問權限的服務。通過使用RAM可以在阿里云賬號的權限范圍內創建RAM用戶,給不同的RAM用戶分配不同的權限,從而達到授權管理的目的。更多信息,請參見什么是訪問控制

阿里云STS是阿里云提供的一種臨時訪問權限管理服務,用來授予臨時的訪問權限。通過STS可以完成對臨時用戶的訪問授權。更多信息,請參見什么是STS

背景介紹

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

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

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

基本概念

下表是一些基本概念的簡單解釋。更多信息,請參見基本概念

基本概念 描述
RAM用戶 RAM用戶也叫RAM賬號,是RAM的一種實體身份類型,有確定的身份ID和身份憑證,它通常與某個確定的人或應用程序一一對應。RAM用戶具備以下特點:
  • 一個阿里云賬號下可以創建多個RAM用戶,對應企業內的員工、系統或應用程序。
  • RAM用戶不擁有資源,不能獨立計量計費,由所屬阿里云賬號統一控制和付費。
  • RAM用戶歸屬于阿里云賬號,只能在所屬阿里云賬號的空間下可見,而不是獨立的阿里云賬號。
  • RAM用戶必須在獲得阿里云賬號的授權后才能登錄控制臺或使用API操作阿里云賬號下的資源。
RAM角色(RAM role) RAM角色有確定的身份,可以被賦予一組權限策略,但沒有確定的登錄密碼或訪問密鑰。RAM角色需要被一個可信的實體用戶扮演,扮演成功后實體用戶將獲得RAM角色的安全令牌,使用這個安全令牌就能以角色身份訪問被授權的資源。
權限策略(Policy) 權限策略是用語法結構描述的一組權限的集合,可以精確地描述被授權的資源集、操作集以及授權條件。權限策略是描述權限集的一種簡單語言規范。關于RAM支持的語言規范,請參見權限策略語法和結構

在RAM中,權限策略是一種資源實體。RAM支持以下兩種權限策略:

  • 阿里云管理的系統策略:統一由阿里云創建,用戶只能使用不能修改,策略的版本更新由阿里云維護。
  • 客戶管理的自定義策略:用戶可以自主創建、更新和刪除,策略的版本更新由客戶自己維護。

通過為RAM用戶、用戶組或RAM角色綁定權限策略,可以獲得權限策略中指定的訪問權限。

資源(Resource) 資源是云服務呈現給用戶與之交互的對象實體的一種抽象,例如表格存儲所有的實例、某個實例或者實例中的某個表等。

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

使用示例:

某個阿里云用戶名為alice,其在表格存儲有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。