赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 操作指南
  5. 权限控制
  6. 阻止公共访问

阻止公共访问

  • 权限控制
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

OSS支持通过设置Bucket Policy和ACL来实现公共访问。公共访问无需特定权限或身份验证,容易引发数据泄露和外网下行流量的风险。OSS支持在OSS全局、单个Bucket、单个接入点和单个对象FC接入点的维度一键开启阻止公共访问,以避免公共访问可能带来的风险。开启后,已有的公共访问权限会被忽略,且不允许创建新的公共访问权限,从而确保数据安全。

判断是否包含公共访问语义

您需要结合Bucket Policy和ACL(包括Bucket ACL和Object ACL)判断OSS资源是否包含公共访问的语义。如果任意一种包含公共访问的语义,您的资源可能存在安全风险,建议开启阻止公共访问功能。

Bucket Policy

(推荐)调用API接口判断

您可以调用GetBucketPolicyStatus接口判断当前Bucket Policy是否包含公共访问的语义。

  • 如果IsPublic返回字段取值为true,表示当前Bucket Policy包含公共访问的语义。

  • 如果IsPublic返回字段取值为false,表示当前Bucket Policy不包含公共访问的语义或者没有设置Bucket Policy。

更多信息,请参见GetBucketPolicyStatus。

自行判断

非公共访问判断条件和示例

  • Bucket Policy中的一条Statement的Principal和Condition,只要任一满足以下条件,该Statement视为非公共访问。

    说明
    • Action和Resource不作为判断是否为公共访问的条件。

    • 如果Bucket Policy中的Effect是Deny,则被视为非公共访问。

    元素

    字段

    取值

    Principal

    不适用

    指定一个或多个固定值,即取值不包含通配符星号(*)

    Condition

    acs:SourceVpcId

    指定一个或多个固定值,即取值不包含通配符星号(*)

    acs:SourceVpc

    指定一个或多个固定值,即取值不包含通配符星号(*)

    acs:AccessId

    指定一个或多个固定值,即取值不包含通配符星号(*)

    acs:SourceVpcIp

    如果是IPv4地址,掩码大于等于8。

    如果是IPv6地址,掩码大于等于32。

    acs:SourceIp

    如果是IPv4地址,掩码大于等于8。

    如果是IPv6地址,掩码大于等于32。

  • 非公共访问示例

    {
        "Version":"1",
        "Statement":[
            {
                "Action":[
                    "oss:GetObject",
                    "oss:GetObjectAcl",
                    "oss:GetObjectVersion",
                    "oss:GetObjectVersionAcl"
                ],
                "Effect":"Allow",
                "Principal":[
                    "20214760404935xxxx"
                ],
                "Resource":[
                    "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                    "acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*"
                ]
            },
            {
                "Action":[
                    "oss:ListObjects",
                    "oss:ListObjectVersions"
                ],
                "Condition":{
                    "StringLike":{
                        "oss:Prefix":[
                            "hangzhou/2020/*",
                            "shanghai/2015/*"
                        ]
                    }
                },
                "Effect":"Allow",
                "Principal":[
                    "20214760404935xxxx"
                ],
                "Resource":[
                    "acs:oss:*:174649585760xxxx:examplebucket"
                ]
            }
        ]
    }

公共访问判断条件和示例

不满足非公共访问条件的Bucket Policy视为公共访问。示例如下:

  • 示例1

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:GetObject",
                "Principal": "*",
                "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*"
            }
        ]
    }
  • 示例2

    Policy中同时包含公共访问(允许所有VPC访问)和非公共访问(仅允许指定用户访问)的策略时,最终判断结果仍被视为公共访问。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:GetObject",
                "Principal": "*",
                "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*",
                "Condition": {
                    "StringLike": {
                        "acs:SourceVpc": [
                            "vpc-*"
                            ]
                    }
                }
            },
          	{
                "Effect": "Allow",
                "Action": "oss:*",
                "Principal": "27464958576xxxx",
                "Resource": "*"
            }
        ]
    }

ACL

  • Bucket ACL或者Object ACL设置为公共读或者公共读写,允许公共访问。

  • Bucket ACL和Object ACL同时设置为私有,不允许公共访问。

不同维度阻止公共访问的优先级说明

OSS支持对OSS全局、单个Bucket、单个接入点和单个对象FC接入点开启阻止公共访问功能。当不同维度的阻止公共访问设置不一致时,OSS将遵循以下优先级来确定最终访问效果。

OSS全局 > 单个Bucket > 单个接入点 > 单个对象FC接入点

根据以上优先级顺序,下一层级是否允许公共访问取决于上一层级的阻止公共访问设置。只要OSS全局开启了阻止公共访问,则单个Bucket、接入点以及对象FC接入点均不允许公共访问。

  • 如果希望单个Bucket允许公共访问,则需关闭OSS全局和该Bucket的阻止公共访问。

  • 如果希望单个接入点允许公共访问,则需关闭OSS全局、接入点关联的Bucket和该接入点的阻止公共访问。

  • 如果希望单个对象FC接入点允许公共访问,则需关闭OSS全局、对象FC接入点关联的接入点、接入点关联的Bucket和该对象FC接入点的阻止公共访问。

注意事项

  • RAM用户需要以下权限来阻止公共访问:

    • OSS全局:oss:PutPublicAccessBlock、oss:GetPublicAccessBlock、oss:DeletePublicAccessBlock。

    • Bucket级别:oss:PutBucketPublicAccessBlock、oss:GetBucketPublicAccessBlock、oss:DeleteBucketPublicAccessBlock。

    • 接入点级别:oss:PutAccessPointPublicAccessBlock、oss:GetAccessPointPublicAccessBlock、oss:DeleteAccessPointPublicAccessBlock。

    • 对象FC接入点级别:oss:PutAccessPointConfigForObjectProcess、oss:GetAccessPointConfigForObjectProcess、oss:DeleteAccessPointForObjectProcess。

  • 开启阻止公共访问时,已有的公共访问权限会被忽略,且无法创建新的公共访问权限。关闭时,已有权限仍生效,并允许创建新的公共访问权限。

  • 如果您在Bucket Policy中设置了允许任何人操作接入点的管控API,即使该接入点开启了阻止公共访问,用户仍然可以通过Bucket三级域名修改该接入点的阻止公共访问,原因是通过Bucket三级域名访问的请求不受接入点的配置影响。

  • 对于跨区域或者同区域复制,无论源Bucket和目标Bucket是否开启阻止公共访问,均不影响复制前后Object的ACL。如果目标Bucket开启了阻止公共访问,则复制到目标Bucket中ACL为公共读或者公共读写的Object,仍不允许公共访问。

操作方式

使用OSS控制台

为OSS全局开启阻止公共访问

  1. 登录OSS管理控制台。

  2. 在左侧导航栏,选择数据服务 > 阻止公共访问。

  3. 在阻止公共访问页面,开启阻止公共访问,然后按照页面指引完成开启操作。

为Bucket开启阻止公共访问

  1. 登录OSS管理控制台。

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择权限控制 > 阻止公共访问。

  4. 在阻止公共访问页签,开启阻止公共访问,然后按照页面指引完成开启操作。

为接入点开启阻止公共访问

  1. 登录OSS管理控制台。

  2. 在左侧导航栏,单击接入点列表,然后单击目标接入点。

  3. 在接入点基础信息区域,开启阻止公共访问,然后按照页面指引完成开启操作。

为对象FC接入点开启阻止公共访问

  1. 登录OSS管理控制台。

  2. 在左侧导航栏,单击对象 FC 接入点列表,然后单击目标对象FC接入点。

  3. 在FC 接入点基础信息,开启阻止公共访问,然后按照页面指引完成开启操作。

使用命令行工具ossutil

您可以使用命令行工具ossutil来设置阻止公共访问,ossutil的安装请参见安装ossutil。

  • 以下命令用于开启OSS全局阻止公共访问的配置信息。

    ossutil api put-public-access-block --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-public-access-block。

  • 以下命令用于开启存储空间examplebucket阻止公共访问的配置信息。

    ossutil api put-bucket-public-access-block --bucket examplebucket --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-bucket-public-access-block。

  • 以下命令用于开启OSS全局阻止公共访问的配置信息。

    ossutil api put-access-point-public-access-block --bucket examplebucket --access-point-name ap-01 --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-access-point-public-access-block。

相关API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。

  • 为OSS全局开启阻止公共访问的API接口说明,请参见PutPublicAccessBlock。

  • 为Bucket开启阻止公共访问的API接口说明,请参见PutBucketPublicAccessBlock。

  • 为接入点开启阻止公共访问的API接口说明,请参见PutAccessPointPublicAccessBlock。

  • 为对象FC接入点开启阻止公共访问的API接口说明,请参见PutAccessPointConfigForObjectProcess。

相关文档

阻止公共访问用于集中管控OSS全局、Bucket、接入点及对象FC接入点的权限。如果您需要细粒度地管控Bucket内的部分资源或单个Object的权限,请结合使用Bucket Policy和设置Object ACL。

相关文章

OSS鉴权详解 2025-04-21 18:16

默认情况下,OSS资源(包括Bucket和Object)默认为私有权限。只有资源拥有者或被授权的用户可以访问这些资源。您可以通过多种权限控制策略授权他人访问或使用您的OSS资源。只有通过OSS鉴权,才能访问授权资源。 请求类型

阻止公共访问 2025-04-21 18:16

OSS支持通过设置Bucket Policy和ACL来实现公共访问。公共访问无需特定权限或身份验证,容易引发数据泄露和外网下行流量的风险。OSS支持在OSS全局、单个Bucket、单个接入点和单个对象FC接入点的维度一键开启阻止公共访问,以避免公共访问可能带来的风险。开启后,已有的公共访问权限会被忽

设置Bucket ACL 2025-04-21 18:16

当您希望粗粒度地控制某个Bucket的读写权限,即Bucket内的所有Object均为统一的读写权限时,您可以选择使用Bucket ACL的方式。Bucket ACL包含公共读、公共读写和私有。您可以在创建Bucket时设置Bucket ACL,也可以在创建Bucket后根据自身的业务需求修改Buc

设置Object ACL 2025-04-21 18:16

您可以使用Object ACL为Bucket中的某个Object设置特定的读写权限。Object ACL可以精确控制某个Object的访问权限,不影响其他Object。Object ACL包含公共读、公共读写、私有三种类型。您可以在上传Object时设置ACL,也可以在上传后随时修改。

Bucket Policy 2025-04-21 18:16

OSS支持面向资源的授权方式,允许在Bucket级别而不是用户级别设置权限策略。使用Bucket Policy可以授权当前云账号或者其他阿里云账号下单个或多个RAM用户、RAM角色等访问Bucket内的指定资源。Bucket Policy除提供策略语法的授权方式以外,还提供了图形化界面的授权方式,助

Bucket Policy常见示例 2025-04-21 18:16

Bucket Policy是OSS提供的一种针对存储空间(Bucket)的授权策略,使您可以精细化地授权或限制有身份的访问者(阿里云账号、RAM用户、RAM角色)或匿名访问者对指定OSS资源的访问。例如,您可以为其他阿里云账号的RAM用户授予指定OSS资源的只读权限。 通用说明 与RAM Polic

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号