閱讀969 返回首頁    go 財經資訊


RAM和STS介紹__權限管理_最佳實踐_對象存儲 OSS-阿裏雲

RAM和STS是阿裏雲提供的權限管理係統。

RAM主要的作用是控製賬號係統的權限。通過使用RAM可以將在主賬號的權限範圍內創建子用戶,給不同的子用戶分配不同的權限從而達到授權管理的目的。

STS是一個安全憑證(Token)的管理係統,用來授予臨時的訪問權限,這樣就可以通過STS來完成對於臨時用戶的訪問授權。

為什麼要使用RAM和STS

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

RAM提供的實際上是一種長期有效的權限控製機製,通過分出不同權限的子賬號,將不同的權限分給不同的用戶,這樣一旦子賬號泄露也不會造成全局的信息泄露。但是,由於子賬號在一般情況下是長期有效的。因此,子賬號的AccessKey也是不能泄露的。

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

這些功能在下文中會以實際的例子來說明。

基本概念

以下是一些基本概念的簡單解釋:

  • 子賬號:從阿裏雲的主賬號中創建出來的子賬號,在創建的時候可以分配獨立的密碼和權限,每個子賬號擁有自己AccessKey,可以和阿裏雲主賬號一樣正常的完成有權限的操作。一般來說,這裏的子賬號可以理解為具有某種權限的用戶,可以被認為是一個具有某些權限的操作發起者。
  • 角色(Role):表示某種操作權限的虛擬概念,但是沒有獨立的登錄密碼和AccessKey。子賬號可以扮演角色,扮演角色的時候的權限是該角色自身的權限
  • 授權策略(Policy):用來定義權限的規則,比如允許用戶讀取、或者寫入某些資源。
  • 資源(Resource):代表用戶可訪問的雲資源,比如OSS所有的Bucket、或者OSS的某個Bucket、或者OSS的某個Bucket下麵的某個Object等。

子賬號和角色可以類比為某個個人和其身份的關係,某人在公司的角色是員工,在家裏的角色是父親,在不同的場景扮演不同的角色,但是還是同一個人。在扮演不同的角色的時候也就擁有對應角色的權限。單獨的員工或者父親概念並不能作為一個操作的實體,隻有有人扮演了之後才是一個完整的概念。這裏還可以體現一個重要的概念,那就是角色可以被多個不同的個人同時扮演。完成角色扮演之後,該個人就自動擁有該角色的所有權限

這裏再用一個例子解釋一下。

  • 某個阿裏雲用戶,名為alice,其在OSS下有兩個私有的Bucket,alice_a和alice_b。alice對這兩個Bucket都擁有完全的權限。

  • 為了避免阿裏雲賬號的AccessKey泄露導致安全風險,alice使用RAM創建了兩個子賬號bob和carol,bob對alice_a擁有讀寫權限,carol對alice_b擁有讀寫權限。bob和carol都擁有獨立的AccessKey,這樣萬一泄露了也隻會影響其中一個Bucket,而且alice可以很方便的在控製台取消泄露用戶的權限。

  • 現在因為某些原因,需要授權給別人讀取alice_a中的Object,這種情況下不應該直接把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的子賬號功能而無需使用STS。

下麵會用範例提供一些RAM和STS的使用指南,以及使用上的建議。示例在操作上會盡量使用控製台和命令行等操作方式,減少實際代碼使用。如果需要使用代碼來實現建議參看RAM和STS的API手冊。

測試工具

在測試中使用到了osscmd,這是OSS的pythonSDK中的一個工具,可以直接在命令行操作OSS。獲取的地址為PythonSDK

osscmd的典型使用方法如下:

  1. 下載文件
  2. ./osscmd get oss://BUCKET/OBJECT LOCALFILE --host=Endpoint -i AccessKeyId -k AccessKeySecret
  3. 這裏的BUCKET和OBJECT替換成自己的,Endpoint的格式類似oss-cn-hangzhou.aliyuncs.com。AccessKeyId和AccessKeySecret使用自己賬號對應的
  4. 上傳文件
  5. ./osscmd put LOCALFILE oss://BUCKET/OBJECT --host=Endpoint -i AccessKeyId -k AccessKeySecret
  6. 各個字段含義和下載一致

最後更新:2016-11-23 16:04:09

  上一篇:go 權限管理概述__權限管理_最佳實踐_對象存儲 OSS-阿裏雲
  下一篇:go 不使用主賬號__權限管理_最佳實踐_對象存儲 OSS-阿裏雲