首页 >通过RAM Policy如何实现仅通过HTTPS方式访问OSS资源

通过RAM Policy如何实现仅通过HTTPS方式访问OSS资源

概述

阿里云对象存储OSS支持用户使用HTTPS和HTTP协议访问OSS的Bucket资源,但由于HTTP访问存在安全漏洞,为防止OSS遭受攻击,需要使用HTTPS方式访问OSS资源,并且拒绝HTTP访问请求。本文主要介绍通过RAM Policy如何实现仅通过HTTPS方式访问OSS资源。

详细信息

阿里云对象存储OSS可以通过RAM Policy方式实现限制某个用户、角色通过HTTP协议访问指定的Bucket和对象。但是RAM Policy是基于用户的授权策略,只能针对用户授权,无法对资源(Bucket或者对象)进行授权,拒绝所有用户的HTTP请求。详情请参见通过Bucket Policy授权用户访问指定资源

  1. 使用阿里云主账号登录RAM访问控制台,创建管理员子账号,对账号授予AliyunOSSFullAccess、AliyunRAMFullAccess以及AliyunSTSAssumeRoleAccess权限。如何为RAM用户授权,请参见为RAM用户授权
  2. 使用Secure Transport参数生成RAM Policy,以实现拒绝指定的用户通过HTTP方式访问Bucket。请参见创建自定义策略,通过脚本配置方式创建自定义的RAM Policy,RAM Policy示例如下:
    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "oss:*"
          ],
          "Resource": [
            "acs:oss:*:*:*"
          ],
          "Condition": {
            "Bool": {
              "acs:SecureTransport": [
                "false"
              ]
            }
          }
        }
      ]
    }
    说明:Secure Transport参数的功能:如果请求是HTTP协议,则为HTTP,如果请求是HTTPS协议,则为HTTPS。建议您通过deny的方式拒绝HTTP的访问请求,而不是通过Allow方式允许HTTPS访问请求。
  3. 请参见为RAM用户授权,为RAM用户授权RAM Policy。
  4. 使用Python SDK示例,通过HTTP方式上传文件,Python SDK示例如下:
    # -*- coding: utf-8 -*-
    import oss2

    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录登录RAM管理控制台创建RAM账号。
    auth = oss2.Auth('[$AccessKeyId]', '[$AccessKeySecret]')
    #yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为http://oss-cn-hangzhou.aliyuncs.com,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

    # 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
    # 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    bucket.put_object_from_file('exampleobject.txt', 'D:\\localpath\\examplefile.txt')
    系统显示类似如下,上传文件失败,说明RAM Policy已经生效。
    oss2.exceptions.AccessDenied: {'status': 403, 'x-oss-request-id': '6V37D53DMF67EBeDF5BDa095', 
    'details': {'HostId': 'examplebucket.oss-cn-hangzhou.aliyuncs.com',
    'Message': 'You have no right to access this object because of bucket acl.',
    'Code': 'AccessDenied', 'RequestId': '6V37D53DMF67EBeDF5BDa095'}}
  5. 使用Python SDK示例,通过HTTPS方式上传文件,Python SDK示例如下:
    # -*- coding: utf-8 -*-
    import oss2

    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM管理控制台创建RAM账号。
    auth = oss2.Auth('[$AccessKeyId]', '[$AccessKeySecret]')
    #yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

    # 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
    # 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    bucket.put_object_from_file('exampleobject.txt', 'D:\\localpath\\examplefile.txt')
    系统显示类似如下,说明文件已经上传成功。
    Put object done, req_id: 6V37D53DMF67EBeDF5BDa095, status_code: 200

通过图形化配置Bucket Policy授权

阿里云对象存储OSS可以通过RAM Policy方式实现限制某个用户、角色通过HTTP协议访问指定的Bucket和对象。但是RAM Policy是基于用户的授权策略,只能针对用户授权,无法对资源(Bucket或者对象)进行授权。以下策略实现了拒绝所有用户(包括授权的用户以及未授权的匿名用户)通过HTTP协议访问指定的Bucket,具体操作如下:

  1. 登录OSS管理控制台,在Bucket列表中,单击Bucket名称。
  2. 在左侧导航栏选择权限管理>Bucket授权策略,单击设置,进入设置页面。
  3. 单击新增授权,在新增授权弹窗中,根据实际需求设置授权资源选择整个Bucket授权用户选择匿名账号(*)授权操作选择拒绝访问条件中的访问方式选择HTTP,单击确定,即可实现只允许使用HTTPS访问OSS资源。

相关文档

通过HTTPS方式访问OSS资源的实现方法,请参见如何实现通过HTTPS方式访问对象存储OSS资源

适用于

  • 对象存储OSS
阿里云首页 相关技术圈