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-阿里云