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

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 1年
简介:

搭建应用服务器之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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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"
}
AI 代码解读

| 获取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。

更多参考资料

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
2
2
0
2973
分享
相关文章
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
1154 73
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
2月前
|
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
生成临时访问URL接口和文件预览其实是同一个方法,只是文件预览内定了七天访问,而这个方法可以自行制定,单位是秒。方法,所以返回的是地址信息,但是可以通过dubug看到Bucket中的属性,确实是当前所有桶信息。配置类中奖MinIOClient客户端注入到Springboot中。MinIO集群的在Linux上的部署可以参考:​​​​​​​。Nginx代理MinIO集群可以参考:​​​​​​​。从Bucket源码可以看出,并没有实现。
241 0
radosgw高可用对象存储网关实战指南
关于radosgw高可用对象存储网关的实战指南,涵盖了从基本概念到具体操作案例,再到架构设计和使用技巧的全面介绍。
214 6
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
572 0
《阿里云 JindoFS+OSS 数据上云实战》下载
为了帮助读者能更全面地了解 JindoFS,我们特地编撰了这本电子书。从架构到场景到实操,全方面解读jindoFS。
175 5
《阿里云 JindoFS+OSS 数据上云实战》下载
《阿里云 JindoFS+OSS 数据上云实战》电子版地址
为了帮助读者能更全面地了解 JindoFS,我们特地编撰了这本电子书。从架构到场景到实操,全方面解读jindoFS。
193 0
《阿里云 JindoFS+OSS 数据上云实战》电子版地址
《阿里云 JindoFS+OSS 数据上云实战》电子版地址下载
为了帮助读者能更全面地了解 JindoFS,我们特地编撰了这本电子书。从架构到场景到实操,全方面解读jindoFS。
213 0
《阿里云 JindoFS+OSS 数据上云实战》电子版地址下载

云存储

+关注

相关产品

  • 对象存储
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等

    登录插画

    登录以查看您的控制台资源

    管理云资源
    状态一览
    快捷访问