控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

服务端加密

最近更新时间:2022-02-23 14:37:57

简介

本文档提供关于如何使用在上传对象时开启服务端加密。服务端加密的密钥分为三种:

  • COS 托管加密密钥
  • 客户提供的加密密钥
  • KMS 托管加密密钥

使用 COS 托管加密密钥的服务端加密(SSE-COS)保护数据

由腾讯云 COS 托管主密钥和管理数据。COS 会帮助您在数据写入数据中心时自动加密,并在您取用该数据时自动解密。目前支持使用 COS 主密钥对数据进行 AES-256 加密。

小程序 SDK 通过调用 API 时传入 ServerSideEncryption 参数完成。

putObject代码示例

cos.putObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    Body: 'hello!',
    ServerSideEncryption: 'AES256',
}, function(err, data) {
    console.log(err || data);
});

postObject代码示例

cos.postObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    FilePath: tmpFilePath, // 使用小程序api获得,比如使用wx.chooseImage 选择文件得到的 tmpFilePath
    ServerSideEncryption: 'AES256',
}, function(err, data) {
    console.log(err || data);
});

使用客户提供的加密密钥的服务端加密 (SSE-C)保护数据

加密密钥由用户自己提供,用户在上传对象时,COS 将使用用户提供的加密密钥对用户的数据进行 AES-256 加密。小程序 SDK 通过调用 API 时传入 SSECustomerKey 参数完成。

注意:

  • 该加密所运行的服务需要使用 HTTPS 请求。
  • customerKey:用户提供的密钥,传入一个32字节的字符串的base64编码,字符串支持数字、字母、字符的组合,不支持中文。
  • 如果上传源文件(putObject)使用了该参数,那么在使用 headObject(查询)、getObject(下载)、multipartInit(初始化分块上传)、multipartUpload(上传分块)、putObjectCopy(复制)时对源对象操作的时候也要调用该方法。

putObject代码示例

cos.putObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    Body: 'hello!',
    SSECustomerAlgorithm: 'AES256',
    SSECustomerKey: 'MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY',
    SSECustomerKeyMD5: 'U5L61r7jcwdNvT7frmUG8g==',
}, function(err, data) {
    console.log(err || data);
});

postObject代码示例

cos.postObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    FilePath: tmpFilePath, // 使用小程序api获得,比如使用wx.chooseImage 选择文件得到的 tmpFilePath
    SSECustomerAlgorithm: 'AES256',
    SSECustomerKey: 'MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY',
    SSECustomerKeyMD5: 'U5L61r7jcwdNvT7frmUG8g==',
}, function(err, data) {
    console.log(err || data);
});

使用 KMS 托管加密密钥的服务端加密(SSE-KMS)保护数据

SSE-KMS 加密即使用 KMS 托管密钥的服务端加密。KMS 是腾讯云推出的一款安全管理类服务,使用经过第三方认证的硬件安全模块 HSM(Hardware Security Module)来生成和保护密钥。它能够帮助用户轻松创建和管理密钥,满足用户多应用多业务的密钥管理需求以及满足监管和合规要求。关于如何开通 KMS 服务请参考:服务端加密概述

putObject代码示例

cos.putObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    Body: 'hello!',
    ServerSideEncryption: 'cos/kms',  /* 上传或复制对象(包括简单上传/复制与分块上传/复制)时必选,下载对象时不能指定此头部 */
    // SSEKMSKeyId: 用于指定 KMS 的用户主密钥 CMK,如不指定,则使用 COS 默认创建的 CMK,更多详细信息可参见 SSE-KMS 加密
    SSEKMSKeyId: 'xxxx', /* 这里填入自己的key,非必须 */
    // SSEContext: 用于指定加密上下文,值为 JSON 格式加密上下文键值对的 Base64 编码。
    SSEContext: 'eyJhIjoiYXNkZmEiLCJiIjoiMTIzMzIxIn0=', /* 这里指定加密上下文,需要自行使用Base64编码,非必须 */
}, function(err, data) {
    console.log(err || data);
});

postObject代码示例

cos.postObject({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    FilePath: tmpFilePath, // 使用小程序api获得,比如使用wx.chooseImage 选择文件得到的 tmpFilePath
    ServerSideEncryption: 'cos/kms',  /* 上传或复制对象(包括简单上传/复制与分块上传/复制)时必选,下载对象时不能指定此头部 */
    // SSEKMSKeyId: 用于指定 KMS 的用户主密钥 CMK,如不指定,则使用 COS 默认创建的 CMK,更多详细信息可参见 SSE-KMS 加密
    SSEKMSKeyId: 'xxxx', /* 这里填入自己的key,非必须 */
    // SSEContext: 用于指定加密上下文,值为 JSON 格式加密上下文键值对的 Base64 编码。
    SSEContext: 'eyJhIjoiYXNkZmEiLCJiIjoiMTIzMzIxIn0=', /* 这里指定加密上下文,需要自行使用Base64编码,非必须 */
}, function(err, data) {
    console.log(err || data);
});

目录