RAM和STS是阿里云提供的權限管理系統。
RAM的主要作用是控制賬號系統的權限。通過使用RAM創建、管理子賬號,并通過給子賬號授予不同的權限,控制子賬號對資源的操作權限。
STS是一個安全憑證(Token)的管理系統,為阿里云子賬號(RAM 用戶)提供短期訪問權限管理。通過 STS 來完成對臨時用戶的訪問授權。
RAM和STS解決的一個核心問題是如何在不暴露主賬號的AccessKey的情況下,安全地授權他人訪問。因為一旦主賬號的AccessKey被泄露,會帶來極大的安全風險。即獲得該賬號AccessKey的人可任意操作該賬號下所有的資源,盜取重要信息等。
RAM提供的是一種長期有效的權限控制機制。通過創建子賬號,并授予子賬號相應的權限,將不同的權限分給不同的用戶。子賬號的AccessKey也不能泄露。即使子賬號泄露也不會造成全局的信息泄露。一般情況下,子賬號長期有效。
相對于RAM提供的長效控制機制,STS提供的是一種臨時訪問授權。通過調用STS,獲得臨時的AccessKey和Token。可以將臨時AccessKey和Token發給臨時用戶,用來訪問相應的資源。從STS獲取的權限會受到更加嚴格的限制,并且具有時間限制。因此,即使出現信息泄露的情況,影響相對較小。
基本概念
使用RAM和STS涉及以下基本概念:
- 子賬號:在 RAM 控制臺中,創建的用戶,每個用戶即一個子賬號。創建時或創建成功后,均可為子賬號生成獨立的 AccessKey。創建后,需為子賬號配置密碼和權限。使用子賬號,可以進行已獲授權的操作。子賬號可以理解為具有某種權限的用戶,可以被認為是一個具有某些權限的操作發起者。
- 角色(Role):表示某種操作權限的虛擬概念,但是沒有獨立的登錄密碼和 AccessKey。子賬號可以扮演角色。扮演角色時,子賬號擁有的權限是該角色的權限。
- 授權策略(Policy):用來定義權限的規則,例如允許子賬號用戶讀取或者寫入某些資源。
- 資源(Resource):代表子賬號用戶可訪問的云資源,例如表格存儲所有的Instance、某個Instance或者某個Instance下面的某個Table等。
子賬號和角色可以類比為個人和其身份的關系。如,某人在公司的角色是員工,在家里的角色是父親。同一人在不同的場景扮演不同的角色。在扮演不同角色的時候,擁有對應角色的權限。角色本身并不是一個操作的實體,只有用戶扮演了該角色之后才是一個完整的操作實體。并且,一個角色可以被多個不同的用戶同時扮演。
使用示例
為避免阿里云賬號的 AccessKey 泄露而導致安全風險,某阿里云賬號管理員使用 RAM 創建了兩個子賬號,分別命名為 A 和 B ,并為 A 和 B 生成獨立的 AccessKey。A 擁有讀權限,B 擁有寫權限。 管理員可以隨時在 RAM 控制臺取消子賬號用戶的權限。
現在因為某些原因,需要授權給其他人臨時訪問物聯網絡管理平臺接口的權限。這種情況下,不能直接把 A 的 AccessKey 透露出去,而應該新建一個角色 C,并給這個角色授予讀取物聯網絡管理平臺接口的權限。但請注意,目前角色 C 還無法直接使用。因為并不存在對應角色 C 的 AccessKey,角色 C 僅是一個擁有訪問物聯網平臺接口權限的虛擬實體。
需調用 STS 的 AssumeRole 接口,獲取訪問物聯網絡管理平臺接口的臨時授權。在調用 STS 的請求中,RoleArn 的值需為角色 C 的 Arn。如果調用成功,STS 會返回臨時的 AccessKeyId、AccessKeySecret和 SecurityToken 作為訪問憑證(憑證的過期時間,在調用 AssumeRole 的請求中指定)。將這個憑證發給需要訪問的用戶,該用戶就可以獲得訪問物聯網絡管理平臺接口的臨時權限。
為什么 RAM 和 STS 的使用這么復雜?
雖然 RAM 和 STS 的概念和使用比較復雜,但這是為了賬號的安全性和權限控制的靈活性而犧牲了部分易用性。
將子賬號和角色分開,主要是為了將執行操作的實體和代表權限集合的虛擬實體分開。如果某用戶需要使用多種權限,例如讀/寫權限,但是實際上每次操作只需要其中的一部分權限,那么就可以創建兩個角色。這兩個角色分別具有讀或寫權限。然后,創建一個可以扮演這兩個角色的用戶子賬號。當用戶需要讀權限的時候,就可以扮演其中擁有讀權限的角色;使用寫權限的時候同理。這樣可以降低每次操作中權限泄露的風險。而且,通過扮演角色,可以將角色權限授予其他用戶,更加方便了協同使用。
STS對權限的控制更加靈活。如按照實際需求設置有效時長。但是,如果需要一個長期有效的臨時訪問憑證,則可以只適用RAM子賬號管理功能,而無需使用STS。
了解更多關于RAM和STS的詳情,請參見訪問控制幫助文檔。