开发者社区> wood23> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

OSS移动开发实战3 (30分钟快速搭建移动应用之安全策略)

简介:
+关注继续查看

搭建应用服务器之STS Policy

上一篇文章中介绍了如何快速搭建应用服务器,在本文中会基于上文提到的应用服务器,以上海的Bucket app-base-oss为例子,配置不同的Policy以实现不同的权限控制。
以下说明中假设你已经开通了STS,并完全阅读了上一篇文章。以下提到的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的实现。

  • 以上的Policy中的app-base-oss是本文使用的Bucket,如果在实际使用中需要替换成自己的Bucket。

更多参考资料

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringCloud微服务实战——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制
Spring Cloud OpenFeign 默认是使用Ribbon实现负载均衡和重试机制的,虽然Feign有自己的重试机制,但该功能在Spring Cloud OpenFeign基本用不上,除非有特定的业务需求,则可以实现自己的Retryer,然后在全局注入或者针对特定的客户端使用特定的Retryer。   在SpringCloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试,下面我们实际操作来测试Spring Cloud架构中的重试机制。
115 0
《Vue.js 3企业级应用开发实战》拆箱和导读
本文是对《Vue.js 3企业级应用开发实战》这本书做了拆箱和导读。介绍本书的写作背景、特点等。
83 0
动手实战-最佳应用实践之使用RDS MySQL和ECS搭建个人博客
场景体验完成,简单描述以下实验过程,可以看到wordpress安装配置非常简单。
104 0
实战使用flask搭建web应用程序
本文小编将带领大家详细地了解Python中的flask框架,并且一步步演示具体如何搭建一个完整的web应用程序。 1、你将学到Flask应用程序的不同部分。同时,你将编写和运行你的第一个Flask web应用程序 所有的Flask应用程序都必须创建一个应用程序实例 。
2342 0
数据库DevOps:我们如何提供安全、稳定、高效的研发全自助数据库服务-iDB/DMS企业版
阿里云数据管理DMS 企业版已于2017.7.18正式发布,一期我们提供MySQL、ORACLE、SQLServer、PostgreSQL、Mongo这几种数据库类型的数据管理服务,支持RDS、ECS自建、其他公网自建类型,支持经典网络、VPC网络,提供实例管理、用户管理、任务管理、安全规则、操作审计、权限管理、数据查询、数据变更/数据订正、数据导出、库表同步、SQL审核/sqlreview等功能。
4277 0
第12章 使用Kotlin开发Web应用《Kotin 编程思想·实战》
第12章 使用Kotlin开发Web应用 12.1 Kotlin集成Spring Boot开发Web应用 12.1.1 Spring Boot简介 12.
1153 0
2017深圳云栖TechInsight活动回顾:动手实验室-从零搭建一个金融级分布式交易系统
作为一次面向开发者的体验活动,我们力求使蚂蚁金服的核心金融技术和产品变得触手可及。旨在通过动手实验室课程,围绕分布式数据库OceanBase、蚂蚁分布式中间件、移动平台mPaaS、零号云客服等产品,实现一个金融场景下移动转账交易的示例解决方案。
4275 0
+关注
3
文章
268
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载