使用服务器端加密方式保护静态数据,即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完全托管的服务端加密方式

  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'})