一、当前存在的问题

当前OSS支持用户使用HTTPS/HTTP协议访问Bucket。但由于HTTP存在安全漏洞。大型企业客户都要求使用HTTPS方式访问OSS,并且拒绝HTTP访问请求。

目前OSS可以通过RAM policy方式实现:限制某个用户、角色拒绝通过HTTP协议访问指定的Bucket和对象。但是RAM Policy是一种基于用户的授权方式,无法针对资源进行授权。也就是说无法针对Bucket或者对象级别,拒绝所有用户的HTTP请求。目前我们正在基于Bucket Policy开发该功能,后续用户可以直接通过Bucket Policy设置HTTPS访问策略。

二、通过RAM Policy实现“限制用户仅通过HTTPS方式访问OSS”

阿里云RAM Policy有丰富的Condition参数,可以限制对资源的访问。这里我们利用"Secure Transport"条件参数生成RAM Policy,以实现拒绝指定的用户通过HTTP方式访问Bucket。

Condition 功能 合法取值
acs:SecureTransport 是否是https协议 “true”或者”false”

2.1RAM Policy示例

  • 为了简化配置,我们事先给账号赋予“AliyunOSSFullAccess”,然后模拟拒绝一切通过HTTP的请求。
  • 添加“拒绝HTTP访问请求”RAM Policy。具体RAM Policy内容如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:*"
],
"Resource": [
"acs:oss:*:*:*"
],
"Condition": {
"Bool": {
"acs:SecureTransport": [
"false"
]
}
}
}
]
}

说明::如上Policy能够拒绝该用户通过HTTP方式访问OSS资源;

2.2用户通过HTTPS方式访问OSS进行测试

说明:

  • 我们以Python SDK上传文件方式进行举例说明;
  • 如下我们在脚本中指定访问路径为"https://oss-cn-beijing.aliyunc.com" ;

2.2.1通过HTTPS方式上传文件

  • python脚本示例如下:
# -*- coding: utf-8 -*-
import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'https://oss-cn-beijing.aliyuncs.com', 'test-beijing-2018') # <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
bucket.put_object_from_file('02.txt', '002.txt')
  • 执行结果如下:
root@shanghai-02:~/figo# python putobject.py
2019-01-10 20:55:37,003 oss2.api [INFO] 140496922879744 : Init oss bucket, endpoint: https://oss-cn-beijing.aliyuncs.com, isCname: False, connect_timeout: None, app_name: , enabled_crc: True
2019-01-10 20:55:37,008 oss2.api [INFO] 140496922879744 : Put object from file, bucket: test-beijing-2018, key: 02.txt, file path: 002.txt
2019-01-10 20:55:37,009 oss2.api [INFO] 140496922879744 : Start to put object, bucket: test-beijing-2018, key: 02.txt, headers: {'Content-Type': 'text/plain'}
2019-01-10 20:55:37,212 oss2.api [INFO] 140496922879744 : Put object done, req_id: 5C3740C952FF5BAFB298BDDA, status_code: 200

说明:如上执行结果,表明文件已经上传成功;

2.2.2通过HTTP方式上传文件

说明:如下我们在脚本中指定访问路径为“http://oss-cn-beijing.aliyuncs.com”

  • python脚本示例如下:
# -*- coding: utf-8 -*-
import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-beijing.aliyuncs.com', 'test-beijing-2018') # <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
bucket.put_object_from_file('02.txt', '002.txt')
  • 执行结果如下:
root@shanghai-02:~/figo# python  putobject.py
2019-01-10 21:14:37,499 oss2.api [INFO] 140697781880576 : Init oss bucket, endpoint: http://oss-cn-beijing.aliyuncs.com, isCname: False, connect_timeout: None, app_name: , enabled_crc: True
2019-01-10 21:14:37,501 oss2.api [INFO] 140697781880576 : Put object from file, bucket: test-beijing-2018, key: 02.txt, file path: 002.txt
2019-01-10 21:14:37,503 oss2.api [INFO] 140697781880576 : Start to put object, bucket: test-beijing-2018, key: 02.txt, headers: {'Content-Type': 'text/plain'}
2019-01-10 21:14:37,585 oss2.api [ERROR] 140697781880576 : Exception: {'status': 403, 'x-oss-request-id': '5C37453DDF97EBEDF4BDA095', 'details': {'HostId': 'test-beijing-2018.oss-cn-beijing.aliyuncs.com', 'Message': 'You have no right to access this object because of bucket acl.', 'Code': 'AccessDenied', 'RequestId': '5C37453DDF97EBEDF4BDA095'}}
Traceback (most recent call last):
File "putobject.py", line 10, in <module>
bucket.put_object_from_file('02.txt', '002.txt')
File "build/bdist.linux-x86_64/egg/oss2/api.py", line 481, in put_object_from_file
File "build/bdist.linux-x86_64/egg/oss2/api.py", line 453, in put_object
File "build/bdist.linux-x86_64/egg/oss2/api.py", line 1579, in __do_object
File "build/bdist.linux-x86_64/egg/oss2/api.py", line 210, in _do
oss2.exceptions.AccessDenied: {'status': 403, 'x-oss-request-id': '5C37453DDF97EBEDF4BDA095', 'details': {'HostId': 'test-beijing-2018.oss-cn-beijing.aliyuncs.com', 'Message': 'You have no right to access this object because of bucket acl.', 'Code': 'AccessDenied', 'RequestId': '5C37453DDF97EBEDF4BDA095'}}

说明:

  • 当我们将上传endpoint设置为"http://oss-cn-beijing.aliyuncs.com" 时,上传文件失败。说明RAM Policy已经生效;
  • 目前RAM Policy仅能限制指定的用户通过HTTPS方式访问。下一步OSS将在Bucket Policy中设置"Secure Transport"参数,以实现限制所有用户通过HTTP方式访问指定的Bucket和对象;

原文链接
本文为云栖社区原创内容,未经允许不得转载。

如何限制用户仅通过HTTPS方式访问OSS?的更多相关文章

  1. Linux实现https方式访问站点

    超文本传送协议(HyperText Transfer Protocol,HTML)是一种通信协议,它允许将超文本标记语言文档从web服务器传送到wel浏览器. HTML的特点: 1.支持客户/服务器模 ...

  2. Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

    http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html 配置环境 了解HTTPS 配置CA证书服务器 新建示例网站并发布在IIS ...

  3. IIS7.0 Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

    配置环境 Windows版本:Windows Server 2008 R2 Enterprise Service Pack 1 系统类型: 64 位操作系统 了解HTTPS 为什么需要 HTTPS ? ...

  4. 微信公众平台HTTPS方式调用配置免费https服务器

    微信公众平台数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用.避免影响正常使用中含有HTTP方式调用的服务,请开发者尽快调整,将现有通过HTTP方式调用的切换成HTTPS调用,平台将于 ...

  5. 为阿里云域名配置免费SSL支持https加密访问简单教程

    阿里云之前有免费ssl入口申请,现在已经关闭了.那么现在怎么为自己的域名配置https呢? 首先打开阿里云域名控制台,如以下界面.(这里暂且用我的这个域名讲解吧)  如上图点击ssl证书,点击单域名免 ...

  6. Tomca7t服务器 配置HTTP和HTTPS 同时访问

    (首先你要有 ssl 证书 ,我是阿里的 ) 查看申请ssl证书(https://www.cnblogs.com/lxf-mw/p/14261303.html) 一.下载 tomcat证书(两个文件) ...

  7. 如何让springboot打包的项目部署在阿里云上使用https和http方式访问

    前言 问题描述:怎么让springboot部署在服务器上使用https协议方式访问我们的接口或者域名,目的是某些平台请求的是https协议,而不是https 部署环境:阿里云 centos7服务器,s ...

  8. 用户对动态PHP网页访问过程,以及nginx解析php步骤

    www.example.com | Nginx | 路由到www.example.com/index.php | 加载nginx的fast-cgi模块 | fast-cgi监听127.0.0.1:90 ...

  9. HTTP与HTTPS对访问速度(性能)的影响

    1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗. 本文主要介绍 https 对用户体验的影响. ...

随机推荐

  1. Simple 杂题练手记

    Problem 1 世界上最可爱的珂朵莉 时间限制:C/C++ 1秒,空间限制:C/C++ 65536K 题目描述 我永远喜欢珂朵莉~! 有两个长为n的序列a[i]与b[i] 你可以把任意不多于x个a ...

  2. 20181117-python第二章学习小结-part2

    浮点型补充: 有限小数与无限循环小数,不包括无理数! 小数点后面的数据运算太复杂,精确度不及整数! 尽量使用科学计数表示小数 列表学习(语法) 创建:[] list = []  #创建空表 list ...

  3. python 迭代器,生成器

    在 python 中我们常用 for in 来遍历 list, set, dict, str 等. for in 的本质就干了两件事: 调用 __iter__() 获取迭代器; 调用 next() 直 ...

  4. 配置Https 和 HSTS

    1. 视频 https://www.bilibili.com/video/av33344382/?p=2 using System; using Microsoft.AspNetCore.Builde ...

  5. vs2012,打开早期版本窗体错误

    <runtime>  <NetFx40_LegacySecurityPolicy enabled="true"/></runtime>

  6. 二、JAVA基础、语法

    第二节:JAVA基础.语法 1.修饰符.变量:    Java中主要有如下几种类型的变量    局部变量                                                 ...

  7. Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件

    写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设 ...

  8. RTN 实操

    创建房间 test-rtn 10001 e2uii6r7r 8LfwOcreM76OiV1V1y8jXrMG_BNa-cmktpWUznRa:kdYdsEpcYLc5ceWEHPaK0ZDI7Qc=: ...

  9. List集合和JSON互转工具类

    public class JsonListUtil { /** * List<T> 转 json 保存到数据库 */ public static <T> String list ...

  10. ArrayList源码理解

    ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Col ...