对象存储 访问控制

高性能桶(Rapid Bucket)采用与 AWS S3 Express One Zone 类似的双层鉴权模型,将桶级别操作(控制面)与对象级别操作(数据面)的鉴权机制分离,以在保障安全性的前提下实现数据面的低延迟访问。

相关产品
对象存储 产品页,含版本规格、价格与购买入口。

一、概述

核心设计理念:

·控制面(桶级别操作):使用标准的 CAM(云访问管理)身份鉴权,通过 V4 签名校验请求合法性。

·数据面(对象级别操作):使用基于会话(Session)的轻量级鉴权机制,通过 CreateSession 获取临时凭证,减少每次请求的鉴权开销。

二、访问控制边界

高性能桶的访问控制边界仅设置在桶级别。与标准 COS 通用桶不同,高性能桶不支持对象级别(前缀或标签)的精细权限策略。这意味着:

·在 CAM 身份策略或桶策略中,高性能桶是唯一可以指定的资源粒度。

·不支持基于对象前缀(prefix)或对象标签(tag)的条件策略。

·桶默认私有,只有被明确授予权限的用户才能访问。

四、控制面鉴权(桶级别操作)

桶级别操作使用标准的 CAM 身份鉴权模型,不涉及会话管理。权限通过 CAM 策略逐一授予。

适用的 API 操作:

API 操作 CAM Action 说明
PutBucket cos:CreateBucket 创建高性能桶
DeleteBucket cos:DeleteBucket 删除高性能桶
HeadBucket cos:HeadBucket 查询桶是否存在
PutBucketPolicy cos:PutBucketPolicy 设置桶策略
GetBucketPolicy cos:GetBucketPolicy 查询桶策略
DeleteBucketPolicy cos:DeleteBucketPolicy 删除桶策略

控制面操作的请求域名为区域端点(Regional Endpoint),格式:

<BucketName>-x–<APPID>.cosrapid.<Region>.myqcloud.com

五、数据面鉴权(对象级别操作)

对象级别操作使用基于会话的鉴权机制。客户端通过 CreateSession API 创建会话并获取临时凭证,后续数据面请求携带该临时凭证即可完成鉴权,无需每次请求都进行完整的 V4 签名计算。

适用的 API 操作:

API 操作 所需权限 说明
PutObject cos:CreateSession 上传对象
GetObject cos:CreateSession 下载对象
HeadObject cos:CreateSession 查询对象元数据
DeleteObject cos:CreateSession 删除单个对象
DeleteMultipleObjects cos:CreateSession 批量删除对象
PutObjectCopy cos:CreateSession 桶内复制对象
ListObjects cos:CreateSession 列出对象
RenameObject cos:CreateSession 重命名对象
InitiateMultipartUpload cos:CreateSession 初始化分片上传
UploadPart cos:CreateSession 上传分片
UploadPartCopy cos:CreateSession 复制分片
CompleteMultipartUpload cos:CreateSession 完成分片上传
AbortMultipartUpload cos:CreateSession 终止分片上传
ListMultipartUploads cos:CreateSession 列出正在进行的分片上传
ListParts cos:CreateSession 列出已上传的分片

七、工作原理

CreateSession 是高性能桶数据面鉴权的核心机制。通过将身份验证和授权集中到会话创建阶段,后续数据面请求只需携带轻量级会话凭证,从而降低每次请求的鉴权延迟。

工作流程如下:

1. 客户端使用 CAM 永久/临时凭证调用 CreateSession,传入目标桶名称。

2. 服务端校验调用方身份及其 cos:CreateSession 权限,校验通过后返回临时凭证。

3. 客户端使用返回的临时凭证(AccessKeyId + SecretAccessKey + SessionToken)直接调用数据面 API。

4. 临时凭证过期后,客户端需重新调用 CreateSession 获取新凭证。

八、临时凭证

CreateSession 返回的临时凭证包含:

字段 说明
AccessKeyId 临时访问密钥 ID
SecretAccessKey 临时访问密钥
SessionToken 会话令牌,数据面请求必须携带
Expiration 凭证过期时间

临时凭证的关键特性:

·桶级别作用域:凭证仅对创建时指定的高性能桶有效,不能跨桶使用。

·有效期短:临时凭证有效期为 5 分钟,过期后需重新创建会话。

·权限继承:临时凭证的权限与调用 CreateSession 时的身份权限一致。

九、会话模式(SessionMode)

创建会话时可以指定会话模式,控制临时凭证的读写权限:

模式 说明
ReadWrite 读写模式,允许所有对象级别操作
ReadOnly 只读模式,仅允许 GetObject、HeadObject、ListObjects 等读操作

如果未显式指定 SessionMode,系统将自动尝试最大权限:先尝试 ReadWrite,若策略不允许则降级为 ReadOnly。

可以在桶策略中通过条件键 cos:SessionMode 精细控制不同身份可以创建的会话类型。例如,限制某些只读角色只能创建 ReadOnly 会话。

十一、CAM 身份策略

通过 CAM 身份策略(附加到用户、用户组或角色)授予高性能桶的访问权限。策略示例:

{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ] } ]}

上述策略授予对指定高性能桶的数据面完整访问权限(通过 CreateSession 授权所有对象操作)。

十二、场景一:授予子账号只读访问权限

{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ], "condition": { "string_equal": { "cos:SessionMode": "ReadOnly" } } } ]}

通过 cos:SessionMode 条件键限制子账号只能创建只读会话,从而限制其只能执行 GetObject、HeadObject、ListObjects 等读操作。

十三、场景二:授予子账号对多个高性能桶的完整访问权限

{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:training-data-x–1250000000/*", "qcs::cosrapid:ap-nanjing:uid/1250000000:model-output-x–1250000000/*" ] } ]}

一条策略同时授权多个高性能桶的读写访问,适用于 AI 训练场景中同时需要读取训练数据桶和写入模型输出桶的情况。

十四、场景三:授予子账号桶管理权限(控制面)

{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:CreateBucket", "cos:DeleteBucket", "cos:HeadBucket", "cos:PutBucketPolicy", "cos:GetBucketPolicy", "cos:DeleteBucketPolicy" ], "resource": [ "*" ] } ]}

授予子账号在指定地域下创建和管理所有高性能桶的权限。通常只授予管理员角色。

十五、场景四:完整权限(控制面 + 数据面)

{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:CreateBucket", "cos:DeleteBucket", "cos:HeadBucket", "cos:PutBucketPolicy", "cos:GetBucketPolicy", "cos:DeleteBucketPolicy", "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ] } ]}

同时授予桶管理和数据读写的完整权限,适用于桶的完全管理者。

十六、桶策略

高性能桶支持桶策略(Bucket Policy),可实现精细化的桶级别访问控制。桶策略示例:

{ "version": "2.0", "statement": [ { "effect": "allow", "principal": { "qcs": [ "qcs::cam::uin/100000000001:uin/100000000002" ] }, "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ], "condition": { "string_equal": { "cos:SessionMode": "ReadOnly" } } } ]}

上述策略授予指定用户以只读模式访问高性能桶的权限。

十七、场景一:允许特定用户访问

{ "version": "2.0", "statement": [ { "effect": "allow", "principal": { "qcs": [ "qcs::cam::uin/100000000001:uin/100000000002", "qcs::cam::uin/100000000001:uin/100000000003" ] }, "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:shared-data-x–1250000000/*" ] } ]}

允许多个用户以读写模式访问共享数据桶,适用于多团队协作场景。

十八、场景二:授予特定用户读写模式访问

{ "version": "2.0", "statement": [ { "effect": "allow", "principal": { "qcs": [ "qcs::cam::uin/100000000001:uin/100000000005" ] }, "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ], "condition": { "string_equal": { "cos:SessionMode": "ReadWrite" } } } ]}

明确授予特定用户 ReadWrite 模式的会话权限。在需要对方写入数据(如合作方上传训练结果)时使用。

十九、场景三:拒绝特定账号访问(黑名单)

{ "version": "2.0", "statement": [ { "effect": "deny", "principal": { "qcs": [ "qcs::cam::uin/100000000001:uin/100000000099" ] }, "action": [ "cos:CreateSession" ], "resource": [ "qcs::cosrapid:ap-nanjing:uid/1250000000:examplebucket-x–1250000000/*" ] } ]}

显式拒绝特定账号创建会话,即使该账号通过其他策略获得了权限。Deny 策略优先级高于 Allow。

20、策略条件键

高性能桶支持以下条件键用于精细权限控制:

条件键 说明 适用场景
cos:SessionMode 限制可创建的会话模式(ReadWrite/ReadOnly) 控制读写权限级别

21、与标准 COS 桶鉴权的对比

维度 标准 COS 桶 高性能桶(Rapid Bucket)
鉴权模型 每次请求 V4 签名 双层模型:控制面 V4 签名 + 数据面会话凭证
权限粒度 桶/前缀/对象标签 仅桶级别
匿名访问 支持(公有读) 不支持
临时凭证有效期 STS 凭证最长 2 小时 会话凭证固定 5 分钟
ACL 支持 不支持(仅策略)
Presigned URL 支持 不支持

22、最佳实践

1. 使用临时凭证:生产环境建议使用 STS 临时凭证调用 CreateSession,避免永久密钥暴露。

2. 会话复用:在 5 分钟有效期内复用同一会话凭证执行多次请求,减少 CreateSession 调用频率。

3. 最小权限原则:按需授予 ReadOnly 或 ReadWrite 模式,避免过度授权。

4. SDK 自动管理:推荐使用腾讯云 COS SDK(最新版),SDK 内置会话自动创建和刷新逻辑,无需手动管理。

5. 网络隔离:确保客户端与高性能桶在同一 VPC 内,结合安全组规则进一步限制访问来源。

24、Q1:为什么高性能桶不支持对象级别的权限策略?

高性能桶面向 AI/ML 训练、HPC 等高吞吐场景,访问模式通常是批量读写整个桶的数据。桶级别的权限控制已足够满足这些场景的安全需求,同时避免了对象级别策略评估带来的额外延迟开销。

25、Q2:会话凭证过期后正在进行的请求会受影响吗?

已经建立连接的请求(如正在传输的大文件下载)不会因凭证过期而中断。但新的请求需要使用有效的凭证。建议在凭证过期前主动刷新。

26、Q3:CreateSession 本身的鉴权方式是什么?

CreateSession 请求使用标准的 V4 签名鉴权,与桶级别操作的鉴权方式相同。只有通过 V4 签名校验且具有 cos:CreateSession 权限的请求才能成功创建会话。

27、Q4:高性能桶是否支持匿名访问(公有读)?

不支持。高性能桶仅面向通过身份验证的用户,所有访问必须通过有效的 CAM 身份凭证。

赞 (0)
上一篇 4天前
下一篇 4天前