阿里雲身份管理與訪問控制之信任管理:角色扮演,臨時身份和安全令牌
本文介紹了阿里雲訪問控制中的角色扮演和臨時身份特性。這兩個特性幫助客戶管理好對合作夥伴, 雲服務協同應用, 以及客戶應用服務的信任與訪問授權, 構成了阿里雲安全受控的合作生態的技術基礎設施的一部分。
信任管理
雲平臺中的資源, 我們可以授權給信任的員工, 合作伙伴, 平臺服務, 我們自己部署的應用等不同的身份來訪問.
- 合作伙伴A來負責代運維一組Linux伺服器, 除此以外不能訪問其他資源; 合作伙伴B來負責維護RDB服務, 除此以外不能訪問其他資源;
- 授權給阿里雲的多媒體處理服務來處理存放在OSS中指定目錄中的圖片和視訊, 但不能訪問其他目錄裡中的資源.
- 部署在ECS中的運維工具, 能夠根據負載變動情況, 自動關閉一些ECS機器, 或自動升級或啟動一些ECS機器.
這些應用場景中的信任管理, 都是通過角色扮演和臨時身份實現的.
角色扮演
阿里雲賬號中的資源分權訪問, 對於員工可以使用子使用者來實現. 對於不適合子使用者(含子使用者組)授權的情況, 採取基於角色扮演的授權方法更安全便捷.
比如, 合作伙伴幫助做運維時, 會在他們自己的主賬號中管理自身的員工子使用者, 我們所需要做的是建立一個(或多個)與他們的主賬號繫結的角色, 並把角色與合適的訪問控制策略繫結.
如上圖,我們的主賬號為A1,兩家服務商的主賬號分別為P1和P2。在我們的訪問控制管理介面上,我們可以建立角色A1P11和A1P21,分別繫結了子賬號P1和P2。服務商P1可以在自己的訪問控制管理介面上,授予其子使用者P1U1、P1U2、P1U3等扮演角色A1P11的許可權;服務商P2可以在自己的訪問控制管理介面上,授予其子使用者P2U1、P2U2、P2U3等扮演角色A1P21的許可權。
角色A1P11、A1P21能訪問哪些資源,由A1通過關聯訪問控制策略來設定;哪些人能扮演角色,由合作方P1、P2分別控制。
這種基於角色扮演的代理授權方式, 是一種安全而又便捷的信任管理方式. 阿里云為角色切換及操作過程提供了操作記錄供安全審計, 進一步提升了可追溯性和安全性.
角色扮演(或角色切換)的過程, 隱含了建立臨時身份(臨時子使用者)的過程. 跨賬號的角色是賬號對賬號的關係, 並不會限制實際的扮演者是合作賬號內的哪一個子使用者.
當合作賬號內的某個子使用者開始扮演角色時, 系統會在我們的賬號內建立一個臨時的子使用者. 當合作賬號內的另一個子使用者開始扮演角色時, 系統會建立另外一個臨時的子使用者. 當合作賬號的子使用者完成了工作, 退出所扮演的角色時, 臨時子使用者的生命週期就結束了 (不再可用, 但仍然存在於操作記錄中).
臨時身份和令牌
通過管理控制檯進行角色扮演和角色切換過程中建立的臨時身份是不可見的。在基於API的訪問中, 臨時身份以令牌的形式存在, 對API的開發者使用者而言是必須理解的概念.
通過STS (Security Token Service)建立的臨時身份也叫做令牌,是有過期時間的安全訪問憑證。它的臨時身份資訊由Access Key和Security Token組成。其中Access Key包括Key ID和Key Secret,用於API請求的簽名。
在常見的API的訪問控制中,一般只使用Security Token即可實現安全身份管理,比如網際網路開放平臺上最常用的訪問控制規範oauth2(不使用MAC signature時);而在雲平臺中,對API請求籤名,能進一步提高安全性。
在阿里雲OpenAPI中, 令牌的建立需要呼叫API assumeRole.
client = AcsClient(access_key_id, access_key_secret, region_id)
sts_request = AssumeRoleRequest.AssumeRoleRequest()
sts_request.set_RoleArn(role_arn)
sts_request.set_RoleSessionName(sts_session_name)
sts_response_str = client.do_action_with_exception(sts_request)
sts_response_json = json.loads(sts_response_str)
sts_cred_dict = sts_response_json[`Credentials`]
sts_cred = credentials.StsTokenCredential(
sts_access_key_id=sts_cred_dict[`AccessKeyId`],
sts_access_key_secret=sts_cred_dict[`AccessKeySecret`],
sts_token=sts_cred_dict[`SecurityToken`]
)
獲得了令牌以後, 就可以用於呼叫阿里雲的其他的OpenAPI了, 比如下面的例子, 呼叫ECS API列出ECS 例項列表.
stsClient = AcsClient(region_id=region_id, credential=sts_cred)
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(50)
response = stsClient.do_action_with_exception(request)
完整的程式碼請參考 https://gitee.com/iam2cloud/acs_ram_demo
.
雲服務協同, ECS上的應用與角色扮演
前面我們提到了使用者(子使用者)扮演角色; 此外, 雲平臺所提供的服務之間協作時, 我們所訂購的服務A要去自動訪問服務B或C時, 我們就需要建立一個合適的角色, 該角色允許操作服務B的資源, 並授信服務A來扮演該角色. 服務A在後臺會自動依據所授予的角色來呼叫STS服務, 生成臨時身份和令牌, 用於呼叫服務B或C的API.
目前已經可以支援這種授權方式的服務有: 多媒體轉碼服務, 歸檔儲存服務, 日誌服務, API閘道器服務, 函式計算服務.
雲平臺提供的這些服務, 可以通過該服務的管理控制檯或OpenAPI來配置所授予的服務角色, 服務獲取臨時身份和令牌的過程是不可見的.
與雲平臺提供的服務相比, ECS例項中的應用服務是一種特殊的服務, 由客戶自己負責部署. ECS例項中的應用服務要通過平臺的API訪問雲資源時, 可以通過ECS例項的後設資料服務來獲取臨時身份和安全令牌.
阿里雲平臺中的ECS例項通過以下地址訪問其metadata:
curl http://100.100.100.200/latest/meta-data/
其中, 該例項所扮演的角色所生成的臨時身份和安全令牌路徑為:
ram/security-credentials/[role-name]
下面的程式碼是一個完整的例子:
$curl http://100.100.100.200/latest/meta-data/ram/security-credentials/ecs-i-1
{
"AccessKeyId" : "STS.123",
"AccessKeySecret" : "123456",
"Expiration" : "2018-06-01T15:44:32Z",
"SecurityToken" : "C1111111111111111111111111111111111111111111111111111111111111111==",
"LastUpdated" : "2018-06-01T09:44:32Z",
"Code" : "Success"
}
參考文件
- 角色身份的概念理解 https://help.aliyun.com/document_detail/28649.html
- 合作伙伴間(跨主賬號)基於角色扮演的授權管理場景 https://help.aliyun.com/document_detail/28658.html
- STS SDK Python示例 https://help.aliyun.com/document_detail/28797.html
- 函式計算中的服務角色授權示例 https://yq.aliyun.com/articles/152077
- 通過控制檯授予ECS 例項服務角色 https://help.aliyun.com/document_detail/61175.html
- 移動應用APP使用臨時身份和安全令牌的解決方案https://help.aliyun.com/document_detail/28657.html. 需要注意的是, 這個解決方案在實現移動APP從後臺服務端獲取臨時身份和安全令牌時, 還需要保證後臺服務需要保證對移動APP進行身份識別並保證傳送過程的加密安全.
相關文章
- AWS身份和訪問管理模組新增標籤和基於屬性的訪問控制能力
- 數字區塊鏈技術:身份和訪問管理區塊鏈
- Microsoft Graph for Office 365 - 身份驗證路線圖和訪問令牌ROS
- 什麼是身份和訪問管理策略,企業如何從中受益?
- 區塊鏈改進身份和訪問管理技術(IAM)的方式區塊鏈
- 安全漏洞問題7:失效的身份認證和會話管理會話
- Jwt建立身份令牌TokenJWT
- 零信任身份治理保障遠端辦公安全
- 老柳談安全|零信任架構2.0的進化:以人為中心的身份管理架構
- Activiti 統一身份管理
- cmd怎麼以管理員身份執行 cmd切換管理員身份方法介紹
- 構建使用者管理微服務(六):新增持久 JWT 令牌的 remember me 身份驗證微服務JWTREM
- 如何以管理員身份執行cmd
- win10管理員身份執行在哪裡 win10管理員身份執行設定的方法Win10
- 譯見|構建使用者管理微服務(五):使用 JWT 令牌和 Spring Security 來實現身份驗證微服務JWTSpring
- [譯] Angular 安全 —— 使用 JSON 網路令牌(JWT)的身份認證:完全指南AngularJSONJWT
- 竹雲&巨杉資料庫:基於分散式資料庫打造微服務架構身份管理與訪問控制系統解決方案資料庫分散式微服務架構
- 零信任內網安全訪問內網
- 在業務上雲和數字化轉型過程中,數字身份可能面臨哪些挑戰?如何從雲到端,全鏈路解決身份信任問題?
- 用Perl來管理Apache驗證身份時所用的密碼(轉)Apache密碼
- 筆記本以管理員的身份執行在哪_筆記本怎麼以管理員身份執行電腦筆記
- 華為雲 OneAccess 應用身份管理服務,認證授權雙保駕,身份管理的選擇關鍵
- C# 以管理員身份執行WinForm程式C#ORM
- 多雲編排推動開源身份管理
- 初識ABP vNext(7):vue身份認證管理&租戶管理Vue
- 1.6.3. 資料庫管理員身份驗證方法資料庫
- asp.core 同時相容JWT身份驗證和Cookies 身份驗證兩種模式JWTCookie模式
- win10管理員身份無法執行怎麼辦_win10管理員身份無法執行怎麼解決Win10
- win10系統怎麼以管理員身份執行檔案 win10以管理員身份執行的步驟Win10
- 基於角色管理的系統訪問控制
- 雲安全風險為何轉向身份與授權?
- win10怎麼以管理員身份執行cmdWin10
- C# 讓程式自動以管理員身份執行C#
- 支招 | 如何解決身份驗證系統安全問題
- Gitlab怎麼使用訪問令牌訪問Gitlab
- 遠端訪問的型別使用的協議和身份驗證方法介紹型別協議
- 家庭版win10怎麼取消以管理員身份執行_win10家庭版取消以管理員身份執行的方法Win10
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java