服务端加密

最近更新时间:2024-08-15 11:42:31

我的收藏

简介

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

相关示例

功能名称
描述
示例代码
服务端加密
提供了上传对象时开启服务端加密的功能

前期准备

开始使用前,需要先创建一个 TransferManager 的实例。创建 TransferManager 的实例之前,需要创建一个 CosXmlService 实例,详细代码可以参见 创建 CosXmlService
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档
// 默认对大于或等于2M的文件自动进行分块上传,分块大小为1M,可以通过如下代码修改分块阈值
TransferConfig transferConfig = new TransferConfig.Builder() // 设置启用分块上传的最小对象大小 默认为2M .setDivisionForUpload(2097152) // 设置分块上传时的分块大小 默认为1M .setSliceSizeForUpload(1048576) // 设置是否强制使用简单上传, 禁止分块上传 .setForceSimpleUpload(false) .build();
// 初始化 TransferManager
TransferManager transferManager = new TransferManager(cosXmlService,
transferConfig);

使用案例

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

由腾讯云 COS 托管主密钥和管理数据。COS 会帮助您在数据写入数据中心时自动加密,并在您取用该数据时自动解密。目前支持使用 COS 主密钥对数据进行 AES-256 加密。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
// 设置使用 COS 托管加密密钥的服务端加密(SSE-COS)保护数据
putObjectRequest.setCOSServerSideEncryption();

// 上传文件
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(putObjectRequest, uploadId);

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

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

// 设置使用客户提供的用户主密钥的服务端加密 (SSE-KMS)保护数据
try {
putObjectRequest.setCOSServerSideEncryptionWithKMS(customKey, encryptContext);
} catch (CosXmlClientException e) {
e.printStackTrace();
}
// 上传文件
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(putObjectRequest, uploadId);

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

加密密钥由用户自己提供,用户在上传对象时,COS 将使用用户提供的加密密钥对用户的数据进行 AES-256 加密。
注意:
该加密所运行的服务需要使用 HTTPS 请求。
用户需要提供一个32字节的字符串作为密钥,支持数字、字母、字符的组合,不支持中文。
如果上传文件时设置了密钥加密,那么在使用 GET(下载)、HEAD(查询)源对象时也需要在请求中带上相同的密钥,才能正常响应。
// 服务端加密密钥
String customKey = "服务端加密密钥";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
// 设置使用客户提供的加密密钥的服务端加密 (SSE-C)保护数据
try {
putObjectRequest.setCOSServerSideEncryptionWithCustomerKey(customKey);
} catch (CosXmlClientException e) {
e.printStackTrace();
}

// 上传文件
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(putObjectRequest, uploadId);

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参考 SDK API