文章

四大存储对象攻防

四大存储对象攻防

攻防矩阵

该矩阵从前期侦查、初始访问、执行、权限提升、权限维持、防御绕过、信息收集、横向移动和影响这九个维度展开,分别研究了每个维度下,云服务可能面临的威胁。

前期侦查初始访问执行权限提升权限维持防御绕过信息收集横向移动影响
API 密钥泄露Bucket 公开访问通过控制台执行利用应用程序提权在存储对象中植入后门关闭安全监控服务用户账号数据泄露窃取云凭证横向移动Bucket 接管
控制台账号密码泄露特定的访问配置策略利用云厂商命令行工具执行Bucket 策略可写写入用户数据在监控区域外攻击对象存储敏感数据泄露窃取用户账号攻击其他应用任意文件上传覆盖
临时访问凭证泄露元数据服务未授权访问使用云API执行Object ACL 可写在云函数中添加后门停止日志记录目标源代码信息通过控制台横向移动敏感数据泄露
访问密码泄露云控制台非法登录写入用户数据执行Bucket ACL 可写在自定义镜像库中导入后门镜像日志清理共享快照使用实例账号爆破破坏存储数据
SDK 泄露账号劫持使用对象存储工具执行通过访问管理提权创建访问密钥通过代理访问元数据使用用户账号攻击其他应用植入后门
前端代码泄露恶意的镜像利用后门文件执行创建高权限角色在 RAM 中创建辅助账号 云服务访问密钥PostgreSQL 数据库 SSRF拒绝服务
共享快照网络钓鱼利用应用程序执行利用服务自身漏洞进行提权利用远控软件 用户数据 子域名接管
 应用程序漏洞利用 SSH、RDP 服务登录到实例执行命令低权限下收集到数据库里的高权限访问凭证信息控制台修改或添加数据库账户密码 获取配置文件中的应用凭证 资源劫持
 服务弱口令利用远程命令执行漏洞执行在 RAM 中将低权限用户分配高权限策略命令行修改或添加数据库账户密码 获取实例网段信息 窃取项目源码
 密码访问利用 SDK 执行 共享快照 数据库连接历史记录 窃取用户数据
 密钥访问数据库连接工具   数据库其他用户账号密码 篡改数据
      数据库中的敏感信息 加密勒索
      警告通知邮箱 恶意公开共享
      性能详情 恶意修改安全组
      MSSQL 读取实例文件 恶意释放弹性IP
      流日志 恶意修改防火墙策略
      安全组配置信息 LB 中的 HTTP 请求走私攻击
      RAM 用户角色权限信息 Bucket 爆破
        Bucket Object 遍历

OSS对象存储

对象存储(OSS)中可以有多个桶(Bucket),然后把对象(Object)放在桶里,对象又包含了三个部分:Key、Data 和 Metadata。

1786383338595

Bucket

存储空间(Bucket)是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。
  • 存储空间内部的对象数目没有限制。

命名规则

同一阿里云账号在同一地域内创建的Bucket总数不能超过100个。Bucket创建后,其名称无法修改。Bucket命名规则如下:

  • Bucket名称在OSS范围内必须全局唯一。
  • 只能包括小写字母、数字和短划线(-)。
  • 必须以小写字母或者数字开头和结尾。
  • 长度为3~63个字符。

命名示例

Bucket名称的正确示例如下:

  • examplebucket1
  • test-bucket-2021
  • aliyun-oss-bucket

Object

对象(Object)是 OSS 存储数据的基本单元,也被称为 OSS 的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的 Key 来标识

例如:

https://hxsecurityteam.oss-cn-beijing.aliyuncs.com/AAccTest.png

Bucket:hxsecurityteam

地区:oss-cn-beijing

Key:AAccTest.png

对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。可以简单的理解成数据的标签、描述之类的信息,这点不同于传统的文件存储,在传统的文件存储中这类信息是直接封装在文件里的,有了元数据的存在,可以大大的加快对象的排序、分类和查找。Data 就是存储的数据本体。

对象存储利用方法

STS服务给其他用户颁发一个临时访问凭证。该用户可使用临时访问凭证在规定时间内访问您的OSS资源。

临时访问凭证无需透露您的长期密钥,使您的OSS资源访问更加安全。

利用工具

alicloud-tools

GitHub地址:https://github.com/iiiusky/alicloud-tools

方法一

ak+sk+sts使用命令:

1
AliCloud-Tools.exe --sak --ssk --sts --token ecs --list --runner

1786384498664

方法二

OSS Browser

GitHub地址:https://github.com/aliyun/oss-browser

1786384514164

Bucket权限配置错误-公开访问

在创建Bucket桶时,默认是private的权限

1786385198328

在此时如果选择公有读的话

情况1(配置读写权限为公有读或公共读写)

可以直接访问对应的KEY路径

1
https://hxsecurityteam.oss-cn-beijing.aliyuncs.com/AAccTest.png

但是无法列出对象

1786385296255

情况2(配置读写权限为公有读或公共读写+在Bucket授权策略中设置ListObject)

1786385359999

1786385368459

这样再当我们访问存储桶域名的时候就会发现,已经把我们存储桶的东西列出来了

1786385379253

Bucket桶爆破

当不知道 Bucket 名称的时候,可以通过爆破获得 Bucket 名称,这有些类似于目录爆破,只不过目录爆破一般通过状态码判断,而这个通过页面的内容判断。

当对于阿里云OSS 不存在有两种返回情况,分别是 InvalidBucketName 和 NoSuchBucket

InvalidBucketName:表示存储桶的名称不符合规范,属于无效的存储桶名称

NoSuchBucket:表示没有这个存储桶

当存储桶存在时,则会返回以下两种情况

返回存储桶的内容

AccessDenied:访问被拒绝,权限不足

这样通过返回内容的不同,就可以进行 Bucket 名称爆破了,知道 Bucket 名称后,Key 的爆破也就很容易了。

特定的Bucket策略配置

如果管理员设置了某些IP,UA才可以请求该存储桶

此时错误的配置了GetBucketPolicy

可导致攻击者获取策略配置

可以看到我们此时是没有权限访问该存储桶的

1786385645822

我们尝试使用aliyun的cli获取policy

1786385726497

我们可以看到,需要符合UserAgent为UzJu才可以访问

1786385739012

Bucket Object遍历

如果设置了ListObject,这将会导致Bucket桶被遍历

1786385786529

1786385815596

可通过访问Key,来下载该文件

1786385839693

任意文件上传与覆盖

如果在配置存储桶时,管理员错误的将存储桶权限,配置为可写,这将会导致攻击者可上传任意文件到存储桶中,或覆盖已经存在的文件

1786386506464

1786386519396

1786386554947

如果目标的对象存储支持 html 解析,那就可以利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作。

AccessKeyId,SecretAccessKey泄露

如果目标的 AccessKeyId、SecretAccessKey 泄露,那么就能获取到目标对象存储的所有权限

1、通过GitHub等开源平台中的源代码可发现存在泄露的Key

2、通过反编译APK,找到敏感信息

3、在目标网站源代码中找到(Js等)

Bucket接管

本质属于悬空 DNS(子域名接管),原业务把存储桶删了,但 DNS 解析记录没删掉。

在阿里云下,当 Bucket 显示 NoSuchBucket 说明是可以接管的,如果显示 AccessDenied 则不行。

1786386787219

假设有以下一种情况,管理员通过域名解析并绑定了一个存储桶,但是管理员将存储桶删除后,没有将域名解析的CNAME删除,这时会访问域名就会出现上面的情况,NoSuchBucket

利用条件:

  1. DNS 配置:域名 CNAME 指向 OSS 的域名

    业务自定义域名做了 CNAME 解析,指向阿里云 OSS 端点:xxx.oss‑region.aliyuncs.com

例如:shturl.cc/I9yy CNAME test.oss‑cn‑beijing.aliyuncs.com

2.原 Bucket 已经被删除,DNS 记录没有删除

业务方删除了 OSS 存储桶,但是没有清理 DNS 的 CNAME 记录

访问域名返回报错:NoSuchBucketThe specified bucket does not exist.

3.攻击者在同一个地域创建同名 Bucket**

  • Bucket 名称在阿里云全局唯一;

  • 必须地域完全一致(原桶是 cn‑beijing,攻击者也必须在北京地域创建同名桶);

Bucket 策略配置可写

当我们访问存储桶的时候,会提示我们已经被policy拦截

1786387189958

查看策略

1786387230744

如果此时配置了存储桶的oss:PutBucketPolicy,就可以更改Deny为Allow即可访问

1786387269212

随后使用PUT方法上传

1786387301335

随后我们再使用GET查看策略

1786387329217

此时我们可以正常看到存储桶中的对象了

1786387343233

修改策略导致网站瘫痪

当策略可写的时候,除了上面的将可原本不可访问的数据设置为可访问从而获得敏感数据外,如果目标网站引用了某个 s3 上的资源文件,而且我们可以对该策略进行读写的话,也可以将原本可访问的资源权限设置为不可访问,这样就会导致网站瘫痪了。

我们只需要将获取该对象的权限修改为Deny,该网站既无法在获取图片,JS等信息了

实战案例

阿里云存储桶劫持(Bucket 接管)

1786387470039

此时可以看到访问该域名显示NoSuchBucket,那么只需要去阿里云存储桶重新创建一个与HostID一样的存储桶名称即可

1786387594141

随后只需要上传文件,就可以让该域名显示我们上传的任意文件

1786387604203

COS对象存储

其实云存储桶都差不多,不过都有一些差别

Bucket 公开访问

腾讯云存储桶的访问权限默认为私有读写权限,且存储桶名称会带上一串时间戳:

这个时间戳其实就是用户自己的 APPID 值

1786389046800

账户中的访问策略包括用户组策略、用户策略、存储桶访问控制列表(ACL)和存储桶策略(Policy)等不同的策略类型。当腾讯云 COS 收到请求时,首先会确认请求者身份,并验证请求者是否拥有相关权限。验证的过程包括检查用户策略、存储桶访问策略和基于资源的访问控制列表,对请求进行鉴权。

1786389095897

Bucket Object 遍历

如果策略中允许了Object的List操作,则在目标资源范围下,会将所有的Bucket Object显示出来,这时,Key值可以理解为文件的目录,通过拼接可获取对应的文件:

1786389302867

在腾讯云的访问策略体系中,如果存储桶访问权限为私有读写,且 Policy 权限为匿名访问,那么 Policy 权限的优先级高于存储桶访问权限。

如果控制台配置了Policy权限,默认是对所有用户生效,并且允许所有操作,这时即使存储桶访问权限配置为私有读写,匿名用户也可通过遍历Bucket Object,获取对应的文件。

1786389403077

1786389411443

Bucket 爆破

同OSS对象存储

Bucket 接管(不存在)

由于Bucket 接管是由于管理人员未删除指向该服务的DNS记录,攻击者创建同名Bucket进而让受害域名解析所造成的,关键在于攻击者是否可创建同名Bucket

而腾讯云有特定的存储桶命名格式

1
<bucketname>-<appid>+cos.ap-nanjing.myqcloud.com

appid是在控制台用时间戳随机生成的,因此无法创建同名Bucket,故不存在Bucket 接管问题

任意文件上传与覆盖

由于Bucket不支持重复命名,所以当匿名用户拥有写入权限时,可通过任意文件上传对原有文件进行覆盖,通过PUT请求可上传和覆盖任意文件

用户身份凭证(签名)泄露

通过 RESTful API 对对象存储(Cloud Object Storage,COS)可以发起 HTTP 匿名请求或 HTTP 签名请求。

匿名请求一般用于需要公开访问的场景,例如托管静态网站;

绝大部分场景都需要通过签名请求完成。 签名请求相比匿名请求,多携带了一个签名值,签名是基于密钥(SecretId/SecretKey)和请求信息加密生成的字符串。SDK 会自动计算签名,您只需要在初始化用户信息时设置好密钥,无需关心签名的计算;对于通过 RESTful API 发起的请求,需要按照签名算法计算签名并添加到请求中。

在开发过程中可能有如下几处操作失误会导致SecretId/SecretKey泄露,获取到SecretId/SecretKey相当于拥有了对应用户的权限,从而操控Bucket

1.Github中配置文件中泄露凭证

2.小程序\APP反编译源码中泄露凭证

3.第三方组件配置不当导致泄露凭证,常见场景:/actuator/heapdump堆转储文件泄露SecretId/SecretKey

4.错误使用SDK泄露凭证

常见场景:代码调试时不是从服务器端获取签名字符串,而是从客户端获取硬编码的签名字符串

Bucket ACL 可读/写

列出Bucket Object提示无权访问:

1786390008522

查看Bucket的ACL配置,发现有http://cam.qcloud.com/groups/global/AllUsers下有FULL_CONTROL权限

1
2
3
4
GET /?acl HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String

1786390036790

官方文档中有对ACL权限配置参数的说明:https://cloud.tencent.com/document/product/436/30752#.E6.93.8D.E4.BD.9C-permission

1786390061931

FULL_CONTROL代表匿名用户有完全控制权限,于是在通过PUT ACL写入策略,将存储桶的访问权限配置为公有读写:

1786390107880

OSS与COS对比

项目腾讯云 COS阿里云 OSS
密钥对SecretId / SecretKeyAccessKeyId / AccessKeySecret
命名含时间戳不含时间戳
账号权限系统CAMRAM
鉴权顺序CAM 策略 → Bucket → ObjectRAM → BucketPolicy → Object
典型生态场景微信小程序、视频号电商、阿里云大数据

AWS S3 对象存储

对象存储(Object-Based Storage),也可以叫做面向对象的存储,现在也有不少厂商直接把它叫做云存储。

说到对象存储就不得不提 Amazon,Amazon S3 (Simple Storage Service) 简单存储服务,是 Amazon 的公开云存储服务,与之对应的协议被称为 S3 协议,目前 S3 协议已经被视为公认的行业标准协议,因此目前国内主流的对象存储厂商基本上都会支持 S3 协议。

操作使用 Amazon S3 的方式也有很多,主要有以下几种:

  • AWS 控制台操作
  • AWS 命令行工具操作
  • AWS SDK 操作
  • REST API 操作,通过 REST API,可以使用 HTTP 请求创建、提取和删除存储桶和对象。

Bucket 公开访问

在 Bucket 的 ACL 处,可以选择允许那些人访问

1786390853527

如果设置为所有人可列出对象,那么只要知道 URL 链接就能访问

对于设置为私有的情况下,则需要有签名信息才能访问,例如 https://teamssix.s3.ap-northeast-2.amazonaws.com/flag?response-content-disposition=xxx&X-Amz-Security-Token=xxx&X-Amz-Algorithm=xxx&X-Amz-Date=xxx&X-Amz-SignedHeaders=xxx&X-Amz-Expires=xxx&X-Amz-Credential=xxx&X-Amz-Signature=xxx

Bucket 爆破

同OSS对象存储

Bucket Object 遍历

在 s3 中如果在 Bucket 策略处,设置了 s3:ListBucket 的策略,就会导致 Bucket Object 遍历

1786390977241

在使用 MinIO 的时候,如果 Bucket 设置为公开,那么打开目标站点默认就会列出 Bucket 里所有的 Key

1786391033163

将 Key 里的值拼接到目标站点后,就能访问该 Bucket 里相应的对象了

任意文件上传与覆盖

如果对象存储配置不当,比如公共读写,那么可能就会造成任意文件上传与文件覆盖。

1786391365141

如果目标的对象存储支持 html 解析,那就可以利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作。

AccessKeyId、SecretAccessKey 泄露

同OSS对象存储

Bucket 接管

假如在进行渗透时,发现目标的一个子域显示如下内容

1786391458454

通过页面特征,可以判断出这是一个 Amazon 的 S3,而且页面显示 NoSuchBucket,说明这个 Bucket 可以接管的,同时 Bucket 的名称在页面中也告诉了我们,为 test.teamssix.com

那么我们就直接在 AWS 控制台里创建一个名称为 test.teamssix.com 的 Bucket 就可以接管了

1786391489388

创建完 Bucket 后,再次访问发现就显示 AccessDenied 了,说明该 Bucket 已经被我们接管了。

1786391500631

成功接管了这个子域名的权限

Bucket ACL 可写

列出目标 Bucket 提示被拒绝

1786391562365

查看目标 Bucket ACL 策略发现是可读的,且策略如下

1
aws s3api get-bucket-acl --bucket teamssix

1786391586705

查询官方文档,内容如下:

1786391603113

1786391611557

通过官方文档,可以分析出这个策略表示任何人都可以访问、写入当前 Bucket 的 ACL

那么也就是说如果我们把权限修改为 FULL_CONTROL 后,就可以控制这个 Bucket 了,最后修改后的策略如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
    "Owner": {
        "ID": "d24***5"
    },
    "Grants": [
    {
            "Grantee": {
                "Type": "Group", 
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            }, 
            "Permission": "FULL_CONTROL"
        } 
    ]
}

将该策略写入

1
aws s3api put-bucket-acl --bucket teamssix --access-control-policy file://acl.json

再次尝试,发现就可以列出对象了

Object ACL 可写

读取 Object 时提示被禁止

1786391964039

查看目标 Object 策略发现是可读的,且内容如下:

1
aws s3api get-object-acl --bucket teamssix --key flag

1786391987163

这个策略和上面的 Bucket ACL 策略一样,表示任何人都可以访问、写入当前 ACL,但是不能读取、写入对象

将权限修改为 FULL_CONTROL 后,Object ACL 策略如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
    "Owner": {
        "ID": "d24***5"
    },
    "Grants": [
    {
            "Grantee": {
                "Type": "Group", 
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            }, 
            "Permission": "FULL_CONTROL"
        } 
    ]
}

将该策略写入后,就可以读取对象了

1
aws s3api put-object-acl --bucket teamssix --key flag --access-control-policy file://acl.json

特定的 Bucket 策略配置

1786392131987

加上对应的 User-Agent 时,就可以正常访问了

Bucket 策略可写

修改策略获得敏感文件

现有以下 Bucket 策略

1786392352700

可以看到根据当前配置,我们可以对 Bucket 策略进行读写,但如果想读取 s3://teamssix/flag 是被禁止的

因为当前策略允许我们写入 Bucket 策略,因此可以将策略里原来的 Deny 改为 Allow,这样就能访问到原来无法访问的内容了。

修改后的策略如下:

这里将第 20 行由原来的 Deny 改成了 Allow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketPolicy",
                "s3:PutBucketPolicy"
            ],
            "Resource": [
                "arn:aws:s3:::teamssix"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::teamssix/flag"
            ]
        }
    ]
}

修改网站引用的 s3 资源进行钓鱼

例如这样的一个页面

1786392446505

查看源代码可以看到引用了 s3 上的资源

1786392459185

查看 Bucket 策略,发现该 s3 的 Bucket 策略是可读可写的

1786392484132

这时我们可以修改 Bucket 的静态文件,使用户输入账号密码的时候,将账号密码传到我们的服务器上

1786392510398

当用户输入账号密码时,我们的服务器就会收到请求了

1786392526021

修改 Bucket 策略为 Deny 使业务瘫痪

如果目标网站引用了某个 s3 上的资源文件,而且我们可以对该策略进行读写的话,也可以将原本可访问的资源权限设置为不可访问,这样就会导致网站瘫痪了。

Bucket ACL vs Bucket Policy

一句话核心差异

  1. ACL:简单粗粒度权限表,老式机制,只控制「谁」对桶拥有基础读写权限,支持的权限类型很少。
  2. Bucket Policy:JSON 格式的强大策略语言,现代推荐方案,可以做细粒度条件控制(来源 IP、请求时间、http 协议、对象前缀等)
对比项Bucket ACL(桶访问控制列表)Bucket Policy(桶策略)
格式简单键值列表,预定义的权限集合JSON Policy 文档,遵循 IAM 策略语法
控制主体AWS 账号、Canonical 用户 ID、预定义组(AuthenticatedUsers、AllUsers 匿名)Principal 可以写:账号、IAM 用户、匿名、服务账号、外部跨账号 AWS 账号
能控制的权限只有少数基础权限:读桶、写桶、读 ACL、写 ACL;不能控制对象内部操作的细粒度动作完整 S3 全部动作:s3:GetObjects3:PutObjects3:DeleteObject等上百种动作;支持条件判断
条件能力没有条件判断,不能限制 IP、Referer、时间、前缀✅支持 Condition 条件:IP 白名单、Referer、HTTPS 强制、对象前缀、时间限制
作用范围作用于 Bucket 本身;也有 Object ACL 针对单个文件作用于 Bucket,也可以限定桶内特定对象前缀(比如images/*
匿名访问可以开启 AllUsers(全网匿名)可以通过 Principal:”*” 开启匿名访问
大小限制很小Policy 最大 20KB
最佳实践AWS 官方不推荐优先使用 ACL,复杂场景用 Bucket Policy生产环境首选,企业标准做法

华为云 OBS 对象存储

其实华为云和其他云的攻防利用方式大同小异

Bucket劫持

华为云bucket劫持和阿里云的差不多,注意的是华为云在删除掉自己的bucket后30分钟后才可重新注册相同名称的bucket

https://console.huaweicloud.com/console/?region=af-south-1#/obs/manager/buckets 进入华为云的对象存储服务、桶列表、创建桶

Bucket爆破

同OSS对象存储

Access Key Id、Secret Access Key泄漏

同OSS对象存储

特定的bucket策略配置

同OSS对象存储

任意文件上传(无法解析)

上传html等后缀的文件无法解析,直接下载

1786430219974

但是其存在分享功能,分享出来的文件是可以解析的

1786430232598

但是分享有时间限制

1786430244242

从上图中可以看到,分享的链接只保持1分钟到18小时

文件覆盖

下面是华为云官方文档介绍,是可以覆盖掉对象

1786430436867

Bucket Object 遍历

1786430451863

如上图,如果设置为公共读或者公共读写就会导致object遍历(设置公共的时候会有提示,问题有可能会出现在复制桶策略上)

1786430496480

可拼接key来下载文件

1786430510739

Bucket ACL配置错误

如果错误配置了对匿名用户的ACL访问权限,就会造成匿名用户修改Bucket ACL策略,遍历存储桶 实际上只需要给匿名用户配置ACL写入权限即可,但是在请求时需要用户的ID,暂时知道读取权限可以获取用户ID,其他地方应该也可以获取到用户ID;这里为了方便也给予了读取权限

首先我们正常访问一下

1786430836037

Access Denied,没有权限,我们看一下ACL策略 https://hxsecurity.obs.cn-north-4.myhuaweicloud.com/?acl

1786430851427

修改此处的Permission为FULL_CONTROL

1786430894396

拥有了桶访问权限的读取和写入权限,验证下,重新访问

1786430907632

核心鉴权优先级(重点)华为云

总原则:显式 Deny > Allow > 默认拒绝 Default Deny

  1. 桶策略的显式 Deny 优先级最高:只要桶策略命中Effect:Deny不管 ACL 开了什么 Allow,直接拒绝访问
  2. 没有任何显式 Deny 时:桶策略 Allow、ACL Allow 两者是叠加关系,任意一个给 Allow 就允许
  3. ACL 的 Allow不能对抗桶策略 Deny;ACL 能力很弱,只能做粗粒度账号授权,不支持 IP、Referer、条件判断。
  4. 完整鉴权链路:IAM身份策略 → 桶Policy → 桶ACL → 对象ACL,每一层只要出现显式 Deny,直接拒绝
场景结果
桶策略 Deny 某用户 GetObject;ACL 给该用户读对象拒绝,Deny 优先
桶策略无配置;ACL 给用户读对象允许
桶策略 Allow;ACL 无授权允许
桶策略、ACL 都没有 Allow默认拒绝

参考文献:

https://cloudsec.huoxian.cn/docs/articles

本文由作者按照 CC BY 4.0 进行授权