服务端加密是指 TOS 在收到您上传的数据时,在文件级别加密这些数据,再将加密的数据持久化存储;您下载文件时,TOS 自动将加密数据解密后返回给您。
服务端加密适用于需要加密存储数据或者合规性要求的应用场景。通过服务端加密可以有效保证数据的安全,且访问加密对象会自动解密,在体验上与未加密对象完全一致。
TOS 提供了多种服务器端加密方式,您可以根据实际使用场景选用。
加密方式 | 功能描述 | 使用场景 | 费用说明 | 支持地域 |
---|---|---|---|---|
使用 TOS 托管密钥的服务器端加密 (SSE-TOS) | 加密密钥由 TOS 托管,TOS 使用唯一密钥对每个文件进行 AES-256 加密,并定期轮换主密钥。 | 仅需要基础的加密能力,没有自管理密钥的需求。 | 免费 | 华北2(北京) |
使用用户提供密钥的服务器端加密(SSE-C) | 加密密钥由您自己管理,您在上传文件时,TOS 使用您提供的加密密钥对数据进行 AES-256 加密。 | 需要使用自管理的密钥来加密数据。 | 免费 | 全部 |
使用火山引擎 KMS 的服务端加密(SSE-KMS) | 加密密钥由 KMS 托管,TOS 使用 KMS 托管的用户主密钥生成唯一的数据密钥加密数据。 | 需要将密钥进行全托管,并使用自管理、可指定的密钥来加密数据。 | 收费,详情请参见 KMS 计费说明。 | 华北2(北京) |
SSE-TOS 加密方式,即由对象存储管理您的密钥信息。SSE-TOS 采用了多因素强加密,确保使用唯一的密钥加密每个文件,同时采用 256 位高级加密标准(即 AES-256)来加密数据,并且会通过定期轮换的主密钥来对密钥本身进行加密。您可以使用以下方式对文件进行 SSE-TOS 加密。
使用 API 上传服务端加密文件时,您需要在请求 Header 中提供 x-tos-server-side-encryption
参数。支持该参数的 API 如下:
说明
CompleteMultiPartUpload
请求中添加 x-tos-server-side-encryption
头域来指定对象的服务端加密方式。当一个对象采用 SSE-TOS 加密存储时,以下 REST API 的响应头会返回 x-tos-server-side-encryption
头域:
注意
x-tos-server-side-encryption
加密头域,如果携带了该加密头域,会收到 HTTP 400 BadRequest 错误。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 摘要。 |
当请求以下接口时,对于 PUT 和 POST 请求可以通过提供 x-tos-server-side-encryption-customer-*
头部来应用服务端加密,对于 GET 和 HEAD 请求使用 SSE-C 加密的对象时,需要提供 x-tos-server-side-encryption-customer-*
头部来解密指定对象。以下操作支持此头部:
当您复制一个对象时,您同时拥有一个源对象和一个目标对象:
名称 | 描述 |
---|---|
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 摘要。 |
注意
x-tos-server-side-encryption-*
头部。详情请参见 PostObject。SSE-KMS 采用火山引擎 KMS 服务托管的主密钥生成数据密钥。通过信封加密技术,TOS 使用数据密钥的明文对用户数据进行加密,加密之后仅存储数据密钥的密文,数据密钥明文则会丢弃,保证数据的安全。
KMS 是火山引擎上一站式的密钥管理和数据加密服务平台,提供简单易用的加密接口,帮助您轻松管理密钥、保护云上核心数据的安全。KMS 对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足监督和合规性要求。您可以通过 KMS 控制台 自主创建密钥,也可以将外部密钥导入到 KMS。关于 KMS 的详细介绍,请参见 KMS 快速入门。
kms:GenerateDataKey
权限;若要下载 SSE-KMS 加密对象,您需要具备该密钥的 kms:Decrypt
权限。使用 REST API 请求创建 SSE-KMS 加密对象时,您需要提供 x-tos-server-side-encryption
和x-tos-server-side-encryption-kms-key-id
请求头。
以下 API 支持 SSE-KMS 加密头域:
说明
CreateMultipartUpload
请求中添加 x-tos-server-side-encryption
和 x-tos-server-side-encryption-kms-key-id
头域来指定对象的 SSE-KMS 加密信息。CopyObject
请求中明确指定服务端加密方式。当一个对象采用 SSE-KMS 服务端加密存储时,以下 REST API 的响应头会返回 x-tos-server-side-encryption
和x-tos-server-side-encryption-kms-key-id
头域:
注意
x-tos-server-side-encryption
加密头域,如果携带了该加密头域,将会收到 HTTP 400 BadRequest
错误。