权限控制__移动应用端直传实践_最佳实践_对象存储 OSS-阿里云
本文基于30分钟快速搭建移动应用直传服务 中提到的应用服务器,以上海的Bucket app-base-oss
为例子,配置不同的Policy以实现不同的权限控制。以下说明中假设您已经开通了STS,并完全阅读了30分钟快速搭建移动应用直传服务。以下提到的Policy都是上文提到的config.json中指定的Policy文件的内容。以下讲述的获取STS Token 后对OSS操作
指的是应用服务器指定Policy,从STS获取临时凭证后,应用通过临时凭证访问OSS。
常见Policy
完全授权的Policy
上文为了演示方便,默认Policy如下,表示的意思是允许应用对所有OSS的操作。这对移动应用来说也是不安全的授权,不推荐。
{
"Statement": [
{
"Action": [
"oss:*"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:*"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 成功 |
上传不带前缀的Object,test.txt | 成功 |
下载不带前缀的Object, test.txt | 成功 |
上传带前缀的Object, user1/test.txt | 成功 |
下载带前缀的Object, user1/test.txt | 成功 |
列出Object, test.txt | 成功 |
带前缀的Object, user1/test.txt | 成功 |
只读不写的Policy
不限制前缀的只读不写Policy
这个Policy表示,应用可以对Bucket app-base-oss
下所有的Object可列举,可下载。
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 失败 |
下载不带前缀的Object, test.txt | 成功 |
上传带前缀的Object, user1/test.txt | 失败 |
下载带前缀的Object, user1/test.txt | 成功 |
列出Object, test.txt | 成功 |
带前缀的Object, user1/test.txt | 成功 |
限制前缀的只读不写Policy
这个Policy表示,应用可以对Bucket app-base-oss
下带有前缀user1/
的Object可列举,可下载。但无法下载其他前缀的Object。这样不同的应用如果对应不同的前缀,就可以达到在同一个bucket中空间隔离的效果。
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 失败 |
下载不带前缀的Object, test.txt | 失败 |
上传带前缀的Object, user1/test.txt | 失败 |
下载带前缀的Object, user1/test.txt | 成功 |
列出Object, test.txt | 成功 |
带前缀的Object, user1/test.txt | 成功 |
只写不读的Policy
不限制前缀的只写不读Policy
这个Policy表示,应用可以对Bucket app-base-oss
下所有的Object进行上传。
{
"Statement": [
{
"Action": [
"oss:PutObject"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 成功 |
下载不带前缀的Object, test.txt | 失败 |
上传带前缀的Object, user1/test.txt | 成功 |
下载带前缀的Object, user1/test.txt | 失败 |
列出Object, test.txt | 失败 |
带前缀的Object, user1/test.txt | 失败 |
限制前缀的只写不读Policy
这个Policy表示,应用可以对Bucket app-base-oss
下带有前缀user1/
的Object进行上传。但无法上传其他前缀的Object。这样不同的应用如果对应不同的前缀,就可以达到在同一个bucket中空间隔离的效果。
{
"Statement": [
{
"Action": [
"oss:PutObject"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 失败 |
下载不带前缀的Object,test.txt | 失败 |
上传带前缀的Object,user1/test.txt | 成功 |
下载带前缀的Object,user1/test.txt | 失败 |
列出Object,test.txt | 失败 |
带前缀的Object,user1/test.txt | 失败 |
读写的Policy
不限制前缀的读写Policy
这个Policy表示,应用可以对Bucket app-base-oss
下所有的Object进行列举、下载、上传和删除。
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:DeleteObject",
"oss:ListParts",
"oss:AbortMultipartUpload",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 成功 |
下载不带前缀的Object, test.txt | 成功 |
上传带前缀的Object, user1/test.txt | 成功 |
下载带前缀的Object, user1/test.txt | 成功 |
列出Object, test.txt | 成功 |
带前缀的Object, user1/test.txt | 成功 |
限制前缀的读写Policy
这个Policy表示,应用可以对Bucket app-base-oss
下带有前缀user1/
的Object进行列举、下载、上传和删除。但无法对其他前缀的Object进行读写。这样不同的应用如果对应不同的前缀,就可以达到在同一个bucket中空间隔离的效果。
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:DeleteObject",
"oss:ListParts",
"oss:AbortMultipartUpload",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
}
],
"Version": "1"
}
获取STS Token 后对OSS操作 | 结果 |
---|---|
列出所有创建的Bucket | 失败 |
上传不带前缀的Object,test.txt | 失败 |
下载不带前缀的Object,test.txt | 失败 |
上传带前缀的Object,user1/test.txt | 成功 |
下载带前缀的Object,user1/test.txt | 成功 |
列出Object,test.txt | 成功 |
带前缀的Object,user1/test.txt | 成功 |
小结
从上面的例子可以看出:
- 可以根据不同的应用场景制定不同的Policy,然后对应用服务器稍作修改就可以实现对不用的应用用户实现不同的权限控制。
- 也可以在应用端做优化,在STS Token过期之前不需要向应用服务器再次请求。
- 需要特别注意的是Token实际是由STS颁发的,应用服务器相当于定制了Policy,向STS请求Token,然后将Token转发给应用。这里的Token是一个简略的说法。实际上包含了“AccessKeyId”、“AccessKeySecret”、“Expiration”、“SecurityToken”,这些在OSS提供给应用的SDK中会用到。详细参见各个SDK的实现。
更多参考资料
最后更新:2016-11-23 16:04:09
上一篇:
快速搭建移动应用直传服务__移动应用端直传实践_最佳实践_对象存储 OSS-阿里云
下一篇:
快速搭建移动应用上传回调服务__移动应用端直传实践_最佳实践_对象存储 OSS-阿里云
目标模式__场景制定_使用手册_性能测试-阿里云
震惊!阿里云安全指挥中心揭开庐山真面目!
使用管理VPN__金融云新手上路_金融云-阿里云
消息加密传输__最佳实践_消息服务-阿里云
云服务器 ECS FTP上传经常中断
设备接入准备__产品管理_控制台使用手册_阿里云物联网套件-阿里云
修改实例管理终端口令__实例相关接口_API 参考_云服务器 ECS-阿里云
不同REGION ECS无法加入负载均衡实例__常见问题_负载均衡-阿里云
分区设计__最佳实践_云数据库 PetaData-阿里云
DescribeZones__LoadBalancer相关API_API 参考_负载均衡-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云