对象预签名
接口
POST /api/v1/open/objects/presign:为租户授权范围内的对象生成对象存储上传或下载预签名 URL。POST /api/v1/open/objects/credentials:创建租户自己的对象存储 access key,secret 只返回一次。GET /api/v1/open/objects/credentials:列出租户对象存储凭证,不返回 secret。GET /api/v1/open/objects/credentials/{credential_id}:获取对象存储凭证,不返回 secret。PUT /api/v1/open/objects/credentials/{credential_id}:更新或轮换对象存储凭证。POST /api/v1/open/objects/resources:创建 bucket/key prefix/method/TTL 策略,可绑定指定credential_id。GET /api/v1/open/objects/resources:列出租户对象资源策略。PUT /api/v1/open/objects/resources/{resource_id}:更新租户对象资源策略。
鉴权
- 必须通过开放平台签名鉴权:
X-Api-Id、X-Api-Timestamp、X-Api-Nonce、X-Api-Signature X-Request-Id可选;未传时平台生成- 需要租户域内授权:
open:object:create - 租户身份来自认证凭据绑定,请求体不能声明或覆盖租户
请求体
| Field | Type | Required | Description |
|---|---|---|---|
| bucket | string | yes | 对象存储 bucket |
| object_key | string | yes | 对象 key,必须命中租户对象资源策略的前缀 |
| method | string | yes | PUT 或 GET |
| expires_seconds | integer | no | URL 有效期;缺省 900,最大 3600,且不能超过资源策略 |
| content_type | string | no | 上传时建议传入;仅 PUT 响应会返回对应 header |
响应
安全规则
- 平台只根据认证后的
tenant_id和client_id做对象策略匹配。 - 对象策略必须允许 bucket、key 前缀、method 和 TTL。
object_key不能以/开头,也不能包含../。- 平台记录安全审计事实,但不持久化预签名 URL、访问密钥、secret key、session token 或对象内容。
- 日志不得记录签名 URL、对象内容或对象存储密钥。
常见错误
| code | HTTP | 说明 |
|---|---|---|
UNAUTHORIZED | 401 | 缺少或无效的认证身份 |
SIGNATURE_INVALID | 401 | 签名不匹配 |
TIMESTAMP_EXPIRED | 401 | 请求时间戳超过允许偏差窗口 |
NONCE_REPLAYED | 401 | nonce 在重放窗口内重复使用 |
FORBIDDEN | 403 | 当前客户端无租户域内权限 |
OBJECT_POLICY_DENIED | 403 | bucket、key、method 或 TTL 不满足对象资源策略 |
OBJECT_SIGNING_FAILED | 500 | 对象存储预签名失败 |
VALIDATION_FAILED | 400 | 字段缺失、类型非法或超出范围 |
INTERNAL_ERROR | 500 | 平台内部错误 |