128
汽車大全
針對移動App的臨時授權管理__使用場景_用戶指南_訪問控製-阿裏雲
場景描述
企業A開發了一款移動App,並購買了OSS服務。移動App需要上傳數據到OSS(或從OSS下載數據),A不希望所有App都通過AppServer來進行數據中轉,而希望讓App能直連OSS上傳/下載數據。由於移動App運行在用戶自己的終端設備上,這些設備並不受A的控製。出於安全考慮,A不能將訪問密鑰保存到移動App中。A希望將安全風險控製到最小,比如,每個移動App直連OSS時都必須使用最小權限的訪問令牌,而且訪問時效也要很短(比如30分鍾)。
需求說明
- 移動App需要直傳數據到OSS,不需要經過數據proxy
- 不能將AK交給移動App,因為移動設備歸屬於您的用戶來控製(所以並不可信),最佳實踐是使用帶過期時間的訪問令牌
- 每個移動App的訪問權限都可以限製,支持到OSS對象的粒度
解決方法:使用RAM角色令牌
1. 授權流程
步驟1:A創建角色
(1) 進入RAM控製台 -> 角色管理 -> 創建角色。
(2) 在創建角色彈窗中:選擇“用戶角色” -> 選擇“當前雲賬號” -> 填寫角色名稱(假設為oss-readonly)和備注 -> 確定創建角色。
創建角色成功後,可以在角色詳情中查看到該角色的基本信息,比如角色的全局名稱Arn如下:
acs:ram::11223344:role/oss-readonly
角色的信任策略(隻允許A自己來扮演角色)如下:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::11223344:root"
]
}
}
],
"Version": "1"
}
步驟2:A給角色授權,即給角色綁定合適的授權策略。
(1) 在上一步的創建角色完成時,可以直接按照引導進入授權操作界麵;也可以選擇進入角色詳情頁麵,進入“編輯授權策略”進入授權操作界麵。
(2) 在授權操作界麵上,可以選擇係統授權策略,如AliyunOSSReadOnlyAccess,然後點擊確定。
步驟3:A為AppServer創建一個RAM用戶身份,並授權該用戶可以扮演上述角色。
(1) 進入RAM控製台 -> 用戶管理 -> 創建用戶,輸入用戶名,比如appserver,為該用戶創建AccessKey;
(2) 創建用戶後,進入用戶詳情頁 -> 用戶授權策略。在編輯授權策略窗口中,選擇係統授權策略,如AliyunSTSAssumeRoleAccess,然後點擊確定。
2. AppServer頒發STS-Token訪問資源
步驟1:AppServer使用RAM用戶appserver的AccessKey調用STS AssumeRole
比如,使用aliyuncli來調用AssumeRole的方法(注意:必須配置appserver的AccessKey,而不允許是主賬號A的AccessKey):
$ aliyuncli sts AssumeRole --RoleArn acs:ram::11223344:role/oss-readonly --RoleSessionName client-001
{
"AssumedRoleUser": {
"AssumedRoleId": "391578752573972854:client-001",
"Arn": "acs:ram::11223344:role/oss-readonly/client-001"
},
"Credentials": {
"AccessKeySecret": "93ci2umK1QKNEja6WGqi1Ba7Q2Fv9PwxZqtVF2VynUvz",
"SecurityToken": "CAES6AIIARKAAUiwSHpkD3GXRMQk9stDr3YSVbyGqanqkS+fPlEEkjZ+dlgFnGdCI2PV93jksole8ijH8dHJrHRA5JA1YCGsfX5hrzcNM37Vr4eVdWFVQhoCw0DXBpHv//ZcITp+ELRr4MHsnyGiErnDsXLkI7q/sbuWg6PACZ/jzQfEWQb/f7Y1Gh1TVFMuRjEzR2pza1hUamszOGRCWTZZeEp0WEFaayISMzkxNTc4NzUyNTczOTcyODU0KgpjbGllbnQtMDAxMKT+lIHBKjoGUnNhTUQ1QkoKATEaRQoFQWxsb3cSGwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aAwoBKhIfCg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaAwoBKkoFNDMyNzRSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzkxNTc4NzUyNTczOTcyODU0cgllY3MtYWRtaW544Mbewo/26AE=",
"Expiration": "2016-01-13T15:02:37Z",
"AccessKeyId": "STS.F13GjskXTjk38dBY6YxJtXAZk"
},
"RequestId": "E1779AAB-E7AF-47D6-A9A4-53128708B6CE"
}
注意,上述AssumeRole調用時沒有指定Policy參數,那麼意味著該STS-Token擁有oss-readonly的所有權限。如果您的應用場景需要對STS-Token的權限進一步限製,比如隻允許訪問“sample-bucket/2015/01/01/*.jpg”,那麼可以通過Policy參數對STS-Token的權限進一步限製。比如,
$ aliyuncli sts AssumeRole --RoleArn acs:ram::11223344:role/oss-readonly --RoleSessionName client-002 --Policy "{"Version":"1", "Statement": [{"Effect":"Allow", "Action":"oss:GetObject", "Resource":"acs:oss:*:*:sample-bucket/2015/01/01/*.jpg"}]}"
{
"AssumedRoleUser": {
"AssumedRoleId": "391578752573972854:client-002",
"Arn": "acs:ram::11223344:role/oss-readonly/client-002"
},
"Credentials": {
"AccessKeySecret": "28Co5Vyx2XhtTqj3RJgdud4ntyzrSNdUvNygAj7xEMow",
"SecurityToken": "CAESnQMIARKAASJgnzMzlXVyJn4KI+FsysaIpTGm8ns8Y74HVEj0pOevO8ZWXrnnkz4a4rBEPBAdFkh3197GUsprujsiU78FkszxhnQPKkQKcyvPihoXqKvuukrQ/Uoudk31KAJEz5o2EjlNUREcxWjRDRSISMzkxNTc4NzUyNTczOTcyODU0KgpjbGllbnQtMDAxMKmZxIHBKjoGUnNhTUQ1Qn8KATEaegoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOkdldE9iamVjdBJICg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaLAoqYWNzOm9zczoqOio6c2FtcGxlLWJ1Y2tldC8yMDE1LzAxLzAxLyouanBnSgU0MzI3NFIFMjY4NDJaD0Fzc3VtZWRSb2xlVXNlcmAAahIzOTE1Nzg3NTI1NzM5NzI4NTRyCWVjcy1hZG1pbnjgxt7Cj/boAQ==",
"Expiration": "2016-01-13T15:03:39Z",
"AccessKeyId": "STS.FJ6EMcS1JLZgAcBJSTDG1Z4CE"
},
"RequestId": "98835D9B-86E5-4BB5-A6DF-9D3156ABA567"
}
此外,上述STS-Token的默認過期時間為3600秒,用戶還可以通過DurationSeconds參數來限製STS-Token的過期時間(最長不超過3600秒)。
步驟2:AppServer獲取並解析Credentials
AppServer從AssumeRole返回的Credentials中獲取AccessKeyId、AccessKeySecret和SecurityToken。考慮到STS-Token過期時間較短,如果應用業務需要一個較長的過期時間,需要AppServer重新頒發新的STS-Token(比如每隔1800秒頒發一次STS-Token)。
步驟3:AppServer將STS-Token安全傳遞給AppClient
步驟4:AppClient使用STS-Token直接訪問雲服務的API(比如OSS)
下麵是aliyuncli使用STS-Token訪問OSS對象的操作命令(頒發給client-002的STS-Token):
配置STS-Token語法:aliyuncli oss Config --host <OssEndPoint> --accessid <AccessKeyId> --accesskey <AccessKeySecret> --sts_token <SecurityToken>
$ aliyuncli oss Config --host oss.aliyuncs.com --accessid STS.FJ6EMcS1JLZgAcBJSTDG1Z4CE --accesskey 28Co5Vyx2XhtTqj3RJgdud4ntyzrSNdUvNygAj7xEMow --sts_token CAESnQMIARKAASJgnzMzlXVyJn4KI+FsysaIpTGm8ns8Y74HVEj0pOevO8ZWXrnnkz4a4rBEPBAdFkh3197GUsprujsiU78FkszxhnQPKkQKcyvPihoXqKvuukrQ/Uoudk31KAJEz5o2EjlNUREcxWjRDRSISMzkxNTc4NzUyNTczOTcyODU0KgpjbGllbnQtMDAxMKmZxIHBKjoGUnNhTUQ1Qn8KATEaegoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOkdldE9iamVjdBJICg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaLAoqYWNzOm9zczoqOio6c2FtcGxlLWJ1Y2tldC8yMDE1LzAxLzAxLyouanBnSgU0MzI3NFIFMjY4NDJaD0Fzc3VtZWRSb2xlVXNlcmAAahIzOTE1Nzg3NTI1NzM5NzI4NTRyCWVjcy1hZG1pbnjgxt7Cj/boAQ==
訪問OSS對象
$ aliyuncli oss Get oss://sample-bucket/2015/01/01/grass.jpg grass.jpg
更多參考材料
關於移動應用直傳場景的更多參考材料:
最後更新:2016-11-23 16:04:01
上一篇:
企業子賬號管理與分權__使用場景_用戶指南_訪問控製-阿裏雲
下一篇:
不同企業之間的資源操作與授權管理__使用場景_用戶指南_訪問控製-阿裏雲
環境配置問題__常見問題_彈性伸縮-阿裏雲
使用金融雲SLB(經典網絡)__使用金融雲產品_金融雲-阿裏雲
升級__常見問題_雲解析-阿裏雲
Spring 集成__Java SDK_TCP 接入(專業)_消息隊列 MQ-阿裏雲
數據導入(CDP)__快速入門_雲數據庫 PetaData-阿裏雲
給用戶授權__授權管理_用戶指南_訪問控製-阿裏雲
ALTER VIEW__數據定義語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
軟件市場條件__服務商入駐_服務商_雲市場-阿裏雲
伸縮服務實例__應用API列表_API參考_容器服務-阿裏雲
阿裏雲付費用戶破100萬,用戶規模亞洲最大
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲