使用服务器端加密方式保护静态数据,即OSS将用户数据写入数据中心内的磁盘时,会在对象(Object)级别加密数据,并且在访问这些数据时自动解密,用户只需要在请求时验证是否拥有访问权限。
说明 关于服务端加密的详细介绍可参考开发指南文档
服务器端加密编码。
当前OSS支持如下三种服务端加密方式:
- 使用OSS完全托管的服务端加密方式(SSE-OSS)
您可以在上传object或修改object的meta信息时,在请求中携带
X-OSS-server-side-encrpytion
并指定其值为AES256,阿里云oss服务端加密使用AES256加密每个对象。OSS会为每个对象使用不同的密钥进行加密,作为额外的保护,它将使用定期轮转的主密钥对加密密钥本身进行加密。 - 使用OSS默认托管的KMS密钥的服务端加密方式(SSE-KMS)
您可以在上传object或修改object的meta信息时,在请求中携带
X-OSS-server-side-encrpytion
并指定其值为KMS且不指定具体的CMS ID。OSS将使用默认托管的CMK生成不同的密钥来加密不同的对象,并且在下载时自动解密。 - 使用用户指定的KMS密钥的服务端加密方式(SSE-KMS)
您可以在上传object或修改object的meta信息时,在请求中携带
X-OSS-server-side-encrpytion
,指定其值为KMS,并指定X-oss-server-side-encrpytion-key-id
为具体的CMK ID。OSS将使用指定的CMK生成不同的密钥来加密不同的对象,并将加密object的CMK ID记录到对象的元数据中,因此具有解密权限的用户下载对象时会自动解密。您可以使用系统自动生成的密钥材料,也可以导入外部密钥材料。注意- 同一对象同一时间仅可以使用一种服务器端加密方式。
- 使用KMS密钥加密时,原数据中用于加密数据的数据密钥也会被加密,并且作为Object的元数据信息一并存储。
- KMS托管密钥的服务器端加密方式仅加密对象数据,不会加密任何对象的元数据。
- 使用KMS密钥功能时会产生少量的KMS密钥API调用费用,费用详情请参考KMS计费标准。
- 使用子账号对数据使用指定的KMS密钥加密时,子账号需取得KMS相关权限,详情请参考使用RAM实现KMS资源授权。
使用OSS完全托管的服务端加密方式
- 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket。
- 上传1个明文对象至OSS,详情请参考上传文件。
- 对已上传的文件进行加密,Python脚本如下:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret> ') # Endpoint以香港为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hongkong.aliyuncs.com', 'test-hongkong-2025') bucket.update_object_meta('01.txt',{'x-oss-server-side-encryption':'AES256'})
- 验证加密结果。
使用 ossutil工具查看加密前后文件变化。
- 加密前:
D:\5-AK账号\ossutil64>ossutil64.exe stat oss://test-hongkong-2025/01.txt ACL : default Accept-Ranges : bytes Content-Length : 62 Content-Md5 : k2GA4LeqHvVpQvBfnleNOg== Content-Type : text/plain Etag : 936180E0B7AA1EF56942F05F9E578D3A Last-Modified : 2018-10-2420:41:54 +0800 CST Owner : 14166xxxxxx36597 X-Oss-Hash-Crc64ecma : 9888192182077127097 X-Oss-Object-Type : Normal X-Oss-Storage-Class : Standard
- 加密后:
D:\5-AK账号\ossutil64>ossutil64.exe stat oss://test-hongkong-2025/01.txt ACL : default Accept-Ranges : bytes Content-Length : 62 Content-Md5 : k2GA4LeqHvVpQvBfnleNOg== Content-Type : text/plain Etag : 936180E0B7AA1EF56942F05F9E578D3A Last-Modified : 2018-10-2420:46:39 +0800 CST Owner : 14166xxxxxx36597 X-Oss-Hash-Crc64ecma : 9888192182077127097 X-Oss-Object-Type : Normal X-Oss-Server-Side-Encryption: AES256 X-Oss-Storage-Class : Standard
- 加密前:
使用OSS默认托管的KMS密钥的服务端加密方式
- 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket。
- 上传1个明文对象至OSS,详情请参考上传文件。
- 在云产品管理页,开通KMS服务。
- 对已上传的文件进行加密,Python脚本如下:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret> ') # Endpoint以香港为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hongkong.aliyuncs.com', 'test-hongkong-2025') bucket.update_object_meta('01.txt',{'x-oss-server-side-encryption':'KMS'})
使用用户指定的KMS密钥的服务端加密方式
- 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket。
- 上传1个明文对象至OSS,详情请参考上传文件。
- 在云产品管理页,开通KMS服务。
- 登录KMS管理控制台,单击创建密钥,创建一个和Bucket同区域的密钥。
- 描述:自定义。
- 高级选项内,密钥材料来源选择:阿里云KMS。
说明 您也可以导入外部密钥,详情请参考 导入密钥材料。 - 使用指定的CMK ID加密已上传的对象,Python脚本如下:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret> ') # Endpoint以香港为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hongkong.aliyuncs.com', 'test-hongkong-2025') bucket.update_object_meta('01.txt',{'x-oss-server-side-encryption':'KMS','x-oss-server-side-encryption-key-id': '33701a45-6723-4a04-a367-68c060382652'})