使用服务器端加密方式保护静态数据,即OSS将用户数据写入数据中心内的磁盘时,会在对象(Object)级别加密数据,并且在访问这些数据时自动解密,用户只需要在请求时验证是否拥有访问权限。

说明 关于服务器端加密的详细介绍可参考开发指南文档服务器端加密编码

当前OSS支持如下三种服务器端加密方式:

  • 使用OSS完全托管的服务器端加密方式(SSE-OSS)

    您可以在上传Object或修改Object的meta信息时,在请求中携带X-OSS-server-side-encryption并指定其值为AES256,阿里云OSS服务器端加密使用AES256加密每个对象。OSS会为每个对象使用不同的密钥进行加密,作为额外的保护,它将使用定期轮转的主密钥对加密密钥本身进行加密。

  • 使用OSS默认托管的KMS密钥的服务器端加密方式(SSE-KMS)

    您可以在上传Object或修改Object的meta信息时,在请求中携带X-OSS-server-side-encryption并指定其值为KMS且不指定具体的CMS ID。OSS将使用默认托管的CMK生成不同的密钥来加密不同的对象,并且在下载时自动解密。

  • 使用用户指定的KMS密钥的服务器端加密方式(SSE-KMS)

    您可以在上传Object或修改Object的meta信息时,在请求中携带X-OSS-server-side-encryption,指定其值为KMS,并指定X-OSS-server-side-encryption-key-id为具体的CMK ID。OSS将使用指定的CMK生成不同的密钥来加密不同的对象,并将加密Object的CMK ID记录到对象的元数据中,因此具有解密权限的用户下载对象时会自动解密。您可以使用系统自动生成的密钥材料,也可以导入外部密钥材料。

    注意
    • 使用指定的KMS密钥加密的方式目前处于公测中,请联系售后技术支持开通试用。
    • 同一对象同一时间仅可以使用一种服务器端加密方式。
    • 使用KMS密钥加密时,原数据中用于加密数据的数据密钥也会被加密,并且作为Object的元数据信息一并存储。
    • KMS托管密钥的服务器端加密方式仅加密对象数据,不会加密任何对象的元数据。
    • 使用KMS密钥功能时会产生少量的KMS密钥API调用费用。
    • 使用子账号对数据使用指定的KMS密钥加密时,子账号需取得KMS相关权限,详情请参考使用 RAM 实现 KMS 资源授权

使用OSS完全托管的服务器端加密方式

  1. 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket
  2. 上传1个明文对象至OSS,详情请参考上传文件
  3. 对已上传的文件进行加密,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'})
  4. 验证加密结果。
    使用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密钥的服务器端加密方式

  1. 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket
  2. 上传1个明文对象至OSS,详情请参考上传文件
  3. 云产品管理页,开通KMS服务。
  4. 对已上传的文件进行加密,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密钥的服务器端加密方式

  1. 登录OSS控制台,创建一个Bucket。配置步骤请参考创建Bucket
  2. 上传1个明文对象至OSS,详情请参考上传文件
  3. 云产品管理页,开通KMS服务。
  4. 登录KMS管理控制台,单击创建密钥,创建一个和Bucket同区域的密钥。
    • 描述:自定义。
    • 高级选项内,密钥材料来源选择:阿里云KMS
    说明 您也可以导入外部密钥,详情请参考导入密钥材料
  5. 使用指定的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'})