tencent cloud

文档反馈

使用临时密钥访问 COS

最后更新时间:2022-05-16 18:24:32

    临时密钥简介

    临时密钥是由安全凭证服务(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://intl.cloud.tencent.com/document/product/436/6224?from_cn_redirect=1
    // 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 请求上传、下载数据。

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

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持