控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

文档捉虫大赛火热进行中,好礼多多> HOT

临时密钥简介

临时密钥是由 安全凭证服务(Security Token Service,STS) 提供的临时访问凭证。临时密钥由 TmpSecretId、TmpSecretKey 和 Token 三部分组成,相比于永久密钥,临时密钥具有以下特点:

  • 有效时间短(30min - 36h),不必暴露永久密钥,降低账号泄露风险。
  • 在获取临时密钥时,可通过传入 policy 参数设置临时权限来进一步约束使用者的权限范围。

因此,临时密钥适用于前端直传等临时授权场景,相比永久密钥,分发临时密钥给不受信任的用户,安全性更高。

获取临时密钥

获取临时密钥,可以通过我们提供的 COS STS SDK 方式获取,也可以直接通过 STS 云 API 的方式获取。
详情可参考 临时密钥生成及使用指引

临时密钥的权限

申请临时密钥之前,您必须拥有访问管理(Cloud Access Management,CAM)用户(腾讯云主账号或子账号),可以通过设置 Policy 参数,为临时密钥增加临时策略约束使用者的权限。

  • 若不设置 policy 参数,获取的临时密钥具有与 CAM 用户相同的权限。
  • 若设置了 policy 参数,获取的临时密钥会在 CAM 用户权限的基础上,进一步将权限限制在 policy 设置的范围以内。

假设,“A”代表 CAM 用户的原有权限,“B”代表通过 policy 参数为临时密钥设置的权限,“A”和“B”的交集代表了临时密钥最终的有效权限。

如下图,CAM 用户权限和 policy 临时权限的交集为有效权限:

如下图,policy 在 CAM 用户权限以内,policy 为有效权限:

使用临时密钥访问 COS


临时密钥包括 SecretId、SecretKey 和 Token,每个主账号和子账号都可以生成多个临时密钥。相比永久密钥,临时密钥的有效期只有30分钟 - 36小时。临时密钥适用于前端直传等临时授权场景,相比永久密钥,分发临时密钥给不受信任的用户,安全性更高,详情参考 临时密钥生成及使用指引用于前端直传的临时密钥使用指引

  • 发起 API 请求
    类似永久密钥,您也可以通过临时密钥生成签名,填入请求头部 Authorization,形成签名请求。COS 接收到请求后,会校验签名是否有效,以及临时密钥是否过期。
    签名算法的介绍请参见 请求签名,COS 同时提供了 签名生成工具,也可以通过 SDK 生成签名,可参考 SDK 签名实现
  • 使用 SDK 工具
    安装 SDK 工具后,除了使用临时密钥初始化用户身份信息,您也可以使用临时密钥(SecretId、SecretKey、Token)初始化 COSClient,直接使用 SDK 进行上传、下载等操作,而无需生成签名。临时密钥生成可参考临时密钥生成及使用指引。

Java SDK 参考示例如下,更多语言 demo 可参考 SDK 概览

// 1 传入获取到的临时密钥 (tmpSecretId, tmpSecretKey, sessionToken)
String tmpSecretId = "SECRETID";
String tmpSecretKey = "SECRETKEY";
String sessionToken = "TOKEN";
BasicSessionCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
// 2 设置 bucket 的地域, COS 地域的简称请参阅 https://cloud.tencent.com/document/product/436/6224
// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参阅源码或者常见问题 Java SDK 部分
Region region = new Region("COS_REGION");
ClientConfig clientConfig = new ClientConfig(region);
// 3 生成 cos 客户端
COSClient cosClient = new COSClient(cred, clientConfig);

临时密钥的使用场景

临时密钥主要用于授权第三方临时访问 COS。例如,用户开发了客户端 App,将数据存储在 COS 存储桶上,此时将永久密钥直接存放在 App 客户端上是不安全的,但又需要授予客户端上传、下载的权限,针对这种场景可使用临时密钥。

如上图所示,用户开发了 App 客户端,用户服务器上存放有永久密钥,使用临时密钥进行前端直传需要经过以下几步:

  1. App 客户端向用户服务器请求临时密钥,用于上传、下载数据。
  2. 用户服务器使用永久密钥身份,向 STS 服务器申请临时密钥。
  3. STS 服务返回临时密钥给用户服务器。
  4. 用户服务器将临时密钥下发到 App 客户端。
  5. App 客户端使用临时密钥生成签名请求,向 COS 请求上传、下载数据。

临时密钥适用于前端数据直传的使用场景,您可以参考以下最佳实践使用临时密钥:

目录