概述
高性能桶(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 会话机制
工作原理
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。
策略条件键
高性能桶支持以下条件键用于精细权限控制:
条件键 | 说明 | 适用场景 |
cos:SessionMode | 限制可创建的会话模式(ReadWrite/ReadOnly) | 控制读写权限级别 |
与标准 COS 桶鉴权的对比
维度 | 标准 COS 桶 | 高性能桶(Rapid Bucket) |
鉴权模型 | 每次请求 V4 签名 | 双层模型:控制面 V4 签名 + 数据面会话凭证 |
权限粒度 | 桶/前缀/对象标签 | 仅桶级别 |
匿名访问 | 支持(公有读) | 不支持 |
临时凭证有效期 | STS 凭证最长 2 小时 | 会话凭证固定 5 分钟 |
ACL | 支持 | 不支持(仅策略) |
Presigned URL | 支持 | 不支持 |
最佳实践
1. 使用临时凭证:生产环境建议使用 STS 临时凭证调用
CreateSession,避免永久密钥暴露。2. 会话复用:在 5 分钟有效期内复用同一会话凭证执行多次请求,减少
CreateSession 调用频率。3. 最小权限原则:按需授予
ReadOnly 或 ReadWrite 模式,避免过度授权。4. SDK 自动管理:推荐使用腾讯云 COS SDK(最新版),SDK 内置会话自动创建和刷新逻辑,无需手动管理。
5. 网络隔离:确保客户端与高性能桶在同一 VPC 内,结合安全组规则进一步限制访问来源。
常见问题
Q1:为什么高性能桶不支持对象级别的权限策略?
高性能桶面向 AI/ML 训练、HPC 等高吞吐场景,访问模式通常是批量读写整个桶的数据。桶级别的权限控制已足够满足这些场景的安全需求,同时避免了对象级别策略评估带来的额外延迟开销。
Q2:会话凭证过期后正在进行的请求会受影响吗?
已经建立连接的请求(如正在传输的大文件下载)不会因凭证过期而中断。但新的请求需要使用有效的凭证。建议在凭证过期前主动刷新。
Q3:CreateSession 本身的鉴权方式是什么?
CreateSession 请求使用标准的 V4 签名鉴权,与桶级别操作的鉴权方式相同。只有通过 V4 签名校验且具有 cos:CreateSession 权限的请求才能成功创建会话。Q4:高性能桶是否支持匿名访问(公有读)?
不支持。高性能桶仅面向通过身份验证的用户,所有访问必须通过有效的 CAM 身份凭证。