You need to enable JavaScript to run this app.
导航

服务端加密概述

最近更新时间2024.01.15 15:20:43

首次发布时间2022.05.31 18:57:35

服务端加密是指 TOS 在收到您上传的数据时,在文件级别加密这些数据,再将加密的数据持久化存储;您下载文件时,TOS 自动将加密数据解密后返回给您。

使用场景

服务端加密适用于需要加密存储数据或者合规性要求的应用场景。通过服务端加密可以有效保证数据的安全,且访问加密对象会自动解密,在体验上与未加密对象完全一致。

加密方式

TOS 提供了多种服务器端加密方式,您可以根据实际使用场景选用。

加密方式

功能描述

使用场景

费用说明

支持地域

使用 TOS 托管密钥的服务器端加密 (SSE-TOS)

加密密钥由 TOS 托管,TOS 使用唯一密钥对每个文件进行 AES-256 加密,并定期轮换主密钥。

仅需要基础的加密能力,没有自管理密钥的需求。

免费

华北2(北京)

使用用户提供密钥的服务器端加密(SSE-C)

加密密钥由您自己管理,您在上传文件时,TOS 使用您提供的加密密钥对数据进行 AES-256 加密。

需要使用自管理的密钥来加密数据。

免费

全部

使用火山引擎 KMS 的服务端加密(SSE-KMS)

加密密钥由 KMS 托管,TOS 使用 KMS 托管的用户主密钥生成唯一的数据密钥加密数据。

需要将密钥进行全托管,并使用自管理、可指定的密钥来加密数据。

收费,详情请参见 KMS 计费说明

华北2(北京)

使用 TOS 托管密钥的服务端加密 (SSE-TOS)

SSE-TOS 加密方式,即由对象存储管理您的密钥信息。SSE-TOS 采用了多因素强加密,确保使用唯一的密钥加密每个文件,同时采用 256 位高级加密标准(即 AES-256)来加密数据,并且会通过定期轮换的主密钥来对密钥本身进行加密。您可以使用以下方式对文件进行 SSE-TOS 加密。

使用对象存储控制台

  • 您可以在上传文件时开启 SSE-TOS 服务端加密,具体操作,请参见上传文件
  • 您可以在创建存储桶时或创建存储桶后开启存储桶的 SSE-TOS 服务端加密。具体操作,请参见创建存储桶设置存储桶服务端加密
    为存储桶开启 SSE-KMS 服务端加密后,在该存储桶上传文件时,如果您没有指定文件的服务端加密方式,文件会默认继承存储桶的服务端加密方式。

使用 REST API

使用 API 上传服务端加密文件时,您需要在请求 Header 中提供 x-tos-server-side-encryption 参数。支持该参数的 API 如下:

说明

  • 当使用分片上传 API 上传大对象时,您可以通过在 CompleteMultiPartUpload 请求中添加 x-tos-server-side-encryption 头域来指定对象的服务端加密方式。
  • 当您复制一个现有对象时,无论源对象是否被加密,目标对象都不会被加密,除非您在请求中明确指定服务端加密方式。

当一个对象采用 SSE-TOS 加密存储时,以下 REST API 的响应头会返回 x-tos-server-side-encryption 头域:

注意

  • 当使用 POST 操作上传对象时,请在表单字段中提供相同的信息,而不是提供该请求头部,详情请参见 PostObject。
  • 如果对象使用 SSE-TOS 加密,就不应在 GET 和 HEAD 请求中携带 x-tos-server-side-encryption 加密头域,如果携带了该加密头域,会收到 HTTP 400 BadRequest 错误。

使用用户提供密钥的服务端加密(SSE-C)

SSE-C 加密即用户自定义密钥的服务端加密,加密密钥由您自己管理,您在上传对象时,TOS 使用提供的加密密钥对数据进行 AES-256 加密。使用 SSE-C 时,您必须使用以下请求头域提供加密密钥信息。

名称

描述

x-tos-server-side-encryption-customer-algorithm

使用此头域指定加密算法,值必须是 AES256。

x-tos-server-side-encryption-customer-key

使用此头域为 TOS 提供 256 位、base64 编码的加密密钥,以用于加密或解密您的数据。

x-tos-server-side-encryption-customer-key-MD5

根据 RFC 1321,使用此头域来提供加密密钥的 base64 编码的128位 MD5 摘要。
TOS 使用此头域进行消息完整性检查,以确保加密密钥的传输没有错误。

使用 REST API

当请求以下接口时,对于 PUT 和 POST 请求可以通过提供 x-tos-server-side-encryption-customer-* 头部来应用服务端加密,对于 GET 和 HEAD 请求使用 SSE-C 加密的对象时,需要提供 x-tos-server-side-encryption-customer-* 头部来解密指定对象。以下操作支持此头部:

当您复制一个对象时,您同时拥有一个源对象和一个目标对象:

  • 如果要使用 SSE-C 加密目标对象,则必须使用上表中描述的三个头域提供加密信息。
  • 如果源对象使用 SSE-C 加密,您必须使用以下头域提供加密密钥信息,以便 TOS 能够解密该对象进行复制。

名称

描述

x-tos-copy-source-server-side-encryption-customer-algorithm

使用此头域来指定解密源对象的算法,值必须是 AES256。

x-tos-copy-source-server-side-encryption-customer-key

使用此头域来提供 base64 编码的加密密钥,以便 TOS 用来解密源对象。在此头域中提供的加密密钥必须是创建源对象时使用的密钥。

x-tos-copy-source-server-side-encryption-customer-key-MD5

根据 RFC 1321,使用此头域来提供加密密钥的 base64 编码的128位 MD5 摘要。
TOS 使用此头域进行消息完整性检查,以确保加密密钥的传输没有错误。

注意

  • SSE-C 必须使用 HTTPS。
  • TOS 不会存储您提供的加密密钥,只会存储添加了随机数据的加密密钥 HMAC 值,该值用于验证访问对象的请求。TOS 无法使用随机数据的 HMAC 值来推导出加密密钥的值或解密加密对象的内容。因此,如果您丢失了加密密钥,则无法再次获取到该对象。
  • 当使用 POST 操作上传对象时,需在表单字段中提供相同的信息,而不是提供x-tos-server-side-encryption-* 头部。详情请参见 PostObject
  • SSE-C 仅能通过 API 进行使用,不支持控制台操作。

使用火山引擎 KMS 的服务端加密(SSE-KMS)

SSE-KMS 采用火山引擎 KMS 服务托管的主密钥生成数据密钥。通过信封加密技术,TOS 使用数据密钥的明文对用户数据进行加密,加密之后仅存储数据密钥的密文,数据密钥明文则会丢弃,保证数据的安全。

KMS 说明

KMS 是火山引擎上一站式的密钥管理和数据加密服务平台,提供简单易用的加密接口,帮助您轻松管理密钥、保护云上核心数据的安全。KMS 对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足监督和合规性要求。您可以通过 KMS 控制台 自主创建密钥,也可以将外部密钥导入到 KMS。关于 KMS 的详细介绍,请参见 KMS 快速入门

注意事项

  • 目前 SSE-KMS 仅支持华北2(北京)地域。
  • 首次使用 SSE-KMS 进行服务端加密,您需要开通 KMS 服务。开通 KMS 服务免费,使用 KMS 服务会收费。使用 SSE-KMS 进行服务端加密会产生 API 调用费用,创建 KMS 密钥会产生密钥托管费用,由 KMS 收取,更多信息,请参见 KMS 计费说明
  • 目前 SSE-KMS 仅支持使用从 KMS 创建的自定义密钥,不支持使用 TOS 服务托管的默认密钥。
  • SSE-KMS 仅加密对象数据而不加密对象元数据。
  • 使用 SSE-KMS 上传加密对象,您需要具备该密钥的 kms:GenerateDataKey 权限;若要下载 SSE-KMS 加密对象,您需要具备该密钥的 kms:Decrypt 权限。
  • 使用 SSE-KMS 加密的对象不支持匿名用户访问。您必须开通 KMS 服务,具备访问主密钥的权限,才能使用有效签名访问 SSE-KMS 加密的对象。

使用对象存储控制台

  • 您可以在上传文件时开启 SSE-KMS 服务端加密,具体操作,请参见上传文件
  • 您可以在创建存储桶时或创建存储桶后开启存储桶的 SSE-KMS 服务端加密。具体操作,请参见创建存储桶设置存储桶服务端加密
    为存储桶开启 SSE-KMS 服务端加密后,在该存储桶上传文件时,如果您没有指定文件的服务端加密方式,文件会默认继承存储桶的服务端加密方式。

使用 REST API

使用 REST API 请求创建 SSE-KMS 加密对象时,您需要提供 x-tos-server-side-encryptionx-tos-server-side-encryption-kms-key-id请求头。
以下 API 支持 SSE-KMS 加密头域:

说明

  • 使用分片上传 API 上传大对象时,您可以在 CreateMultipartUpload 请求中添加 x-tos-server-side-encryptionx-tos-server-side-encryption-kms-key-id 头域来指定对象的 SSE-KMS 加密信息。
  • 复制对象时,不会复制源对象的服务端加密方式,您需要在 CopyObject 请求中明确指定服务端加密方式。

当一个对象采用 SSE-KMS 服务端加密存储时,以下 REST API 的响应头会返回 x-tos-server-side-encryptionx-tos-server-side-encryption-kms-key-id 头域:

注意

  • SSE-KMS 必须使用 HTTPS 协议。
  • 当使用 POST 操作上传对象时,请在表单字段中提供相同的信息,而不是提供该请求头部,详情请参见 PostObject
  • 如果对象使用 SSE-KMS 加密,就不应在 GET 和 HEAD 请求中携带 x-tos-server-side-encryption 加密头域,如果携带了该加密头域,将会收到 HTTP 400 BadRequest 错误。