本文介紹移動應用如何使用RAM角色的臨時安全令牌(STS Token)訪問阿里云資源。
背景信息
企業A開發了一款移動應用(App),并購買了對象存儲(OSS)服務。App需要直連OSS上傳或下載數據,但是App運行在用戶自己的移動設備上,這些設備不受企業A的控制。
企業A有如下要求:
- 直傳數據:企業A不希望所有App都通過企業的服務端應用服務器(Application Server)來進行數據中轉,而希望能夠直連OSS上傳或下載數據。
- 安全管控:企業A不希望將訪問密鑰(AccessKey)保存到移動設備中,因為移動設備是歸屬于用戶控制,屬于不可信的運行環境。
- 風險控制:企業A希望將風險控制到最小,每個App直連OSS時都必須擁有最小的訪問權限且訪問時效需要很短。
解決方案
當移動應用(App)直連OSS上傳或下載數據時,App需要向應用服務器申請訪問憑證。應用服務器以RAM用戶身份扮演RAM角色,調用STS API AssumeRole接口獲取臨時安全令牌,并將臨時安全令牌傳遞給App,App使用臨時安全令牌訪問OSS。
創建RAM角色并授權
假設阿里云賬號A的賬號ID為123456789012****
。
創建RAM用戶并允許扮演RAM角色
應用服務器獲取臨時安全令牌
限制臨時安全令牌的權限
在線上系統,請務必通過使用Policy
參數來根據用戶或設備限制不同臨時安全令牌的權限,避免越權風險。以下是此參數的使用示例。
以下示例表示:只允許下載sample-bucket/2015/01/01/*.jpg
。
- 請求示例
aliyuncli sts AssumeRole --RoleArn acs:ram::123456789012****:role/oss-objectmanager --RoleSessionName client-002 --Policy "{\"Version\":\"1\", \"Statement\": [{\"Effect\":\"Allow\", \"Action\":\"oss:GetObject\", \"Resource\":\"acs:oss:*:*:sample-bucket/2015/01/01/*.jpg\"}]}"
說明 臨時安全令牌過期時間默認值為3600秒,通過DurationSeconds
參數可以設置過期時間。更多信息,請參見AssumeRole - 獲取扮演角色的臨時身份憑證。 - 返回示例
{ "AssumedRoleUser": { "AssumedRoleId": "391578752573****:client-002", "Arn": "acs:ram::123456789012****:role/oss-objectmanager/client-002" }, "Credentials": { "AccessKeySecret": "28Co5Vyx2XhtTqj3RJgdud4ntyzrSNdUvNygAj7x****", "SecurityToken": "********", "Expiration": "2016-01-13T15:03:39Z", "AccessKeyId": "STS.FJ6EMcS1JLZgAcBJSTDG1****" }, "RequestId": "98835D9B-86E5-4BB5-A6DF-9D3156ABA567" }