使用伺服器端加密方式保護待用資料,即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'})