全部產品
Search
文件中心

ApsaraDB RDS:備份加密

更新時間:Jun 19, 2024

備份加密是利用備份工具(Xtrabackup)的加密能力對RDS MySQL執行個體備份進行加密,開發人員無需更改任何應用程式。如果需要使用加密的備份,需要先下載備份,然後在解壓縮時進行解密。

前提條件

  • RDS MySQL執行個體需滿足如下要求:

    • 大版本:8.0、5.7、5.6

    • 系列:高可用系列

    • 儲存類型:本地SSD盤

  • 開通Key Management Service

背景資訊

加密使用的密鑰由Key Management Service(KMS)產生和管理,RDS不提供加密所需的密鑰和認證。您不僅可以使用阿里雲自動產生的密鑰,也可以使用自訂密鑰。

如果您需要使用自訂密鑰進行備份加密,首先需要建立一個服務關聯角色,RDS服務通過該角色擷取KMS密鑰列表、密鑰屬性以及別名後,才能在控制台給您展示加密金鑰列表,並且在備份加密之後展示加密的相關資訊。

開通Data Encryption Service的操作中,RDS服務會標記您選擇的密鑰,然後備份系統通過服務關聯角色使用密鑰進行備份加密。

注意事項

重要

備份加密功能開通後不可關閉。

  • 備份加密開通後無法修改密鑰。

  • 備份加密開通後新增的備份才會加密,存量備份不會加密。

  • 備份加密開通後,您如果要恢複資料到本地,請在下載後解密資料

    說明

    在控制台使用備份直接恢複資料,不需要您手動解密,後端會自動解密後執行恢複操作。

  • 使用已有自訂密鑰時,需要注意:

    • 禁用密鑰、設定密鑰刪除計劃或者刪除密鑰材料都會造成密鑰不可用,從而使基於該祕密金鑰加密備份的執行個體營運操作失敗,可能會影響執行個體的可用性。基於該加密備份的恢複操作也會失敗。

    • 需要使用阿里雲主帳號或者具有如下許可權的RAM帳號(子帳號):

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ram:CreateServiceLinkedRole"
                  ],
                  "Resource": "*",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "ram:ServiceName": "backupencryption.rds.aliyuncs.com"
                      }
                  }
              },
              {
                  "Action": [
                      "kms:ListResourceTags",
                      "kms:TagResource"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:kms:*:*:*"
                  ]
              }
          ]
      }
      說明

      您可以在存取控制控制台配置許可權並授權帳號,詳情請參見RAM授權訪問RDS執行個體

開通備份加密

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
  2. 在左側導覽列中單擊備份恢複

  3. 備份恢複頁面中選擇備份策略頁簽。

  4. 單擊備份加密設定地區後的編輯,開啟備份加密狀態

  5. 備份加密設定對話方塊中,選擇備份主要金鑰,然後單擊確定

    • 使用阿里雲自動產生的密鑰

      阿里雲自動產生密鑰供您使用。

    • 使用已有自訂密鑰

      選擇Key Management Service(KMS)中已建立的密鑰。如還未建立,請參見建立密鑰

      說明

      首次使用自訂密鑰需要授權,您可以根據頁面提示進行操作。

開通成功後,您的備份就會被加密,在阿里雲上使用備份時不需要您手動解密,後端會自動解密後執行相關操作(例如恢複資料),但是如果下載加密的備份到本地,您需要手動解密才能使用備份。解密資料,請參見解密資料

解密資料

本文以Ubuntu 16.04系統為例,示範解密資料的全過程。

前提條件

操作步驟

  1. 擷取RDS加密備份資料的密文和密碼編譯演算法。

    1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

    2. 在左側導覽列中單擊備份恢複

    3. 備份恢複頁面中選擇基礎備份列表 > 資料備份

    4. 單擊目標備份組操作列下的1 > 查看加密資訊,即可擷取加密備份資料的密文密碼編譯演算法

  2. 調用Decrypt介面,在CiphertextBlob參數中傳入步驟1中擷取的密文,擷取base64編碼的二進位串Plaintext。

    plaintext

  3. 通過base64對Plaintext進行解碼,並將各個二進位轉換為對應的十六進位擷取解密密碼。本文通過Python(版本為Python 3)代碼實現這一操作。

    1. 在命令列中執行vi decrypt.py開啟vi編輯器。

    2. 按下鍵盤上的i鍵開啟編輯模式,輸入如下內容後按下ESC鍵,輸入:wq儲存並退出。

      import base64
      import binascii
      plaintext = 'S14dTbl6i4Qo**********'  # 單引號('')中輸入上一步驟中擷取的Plaintext。
      password = binascii.b2a_hex(base64.b64decode(plaintext))   # 擷取解密密碼並將密碼賦值給password。
      print(str(password, 'utf-8'))   # 以字串的形式將密碼列印在螢幕上。
      
    3. 在命令列中執行python decrypt.py命令後,螢幕上會列印出解密密碼。樣本如下:

      4b5e1d4db97a********************
  4. 下載加密備份資料並解密該資料。

    1. 下載備份資料到本地

    2. 在命令列中執行如下命令建立一個目錄(例如/home/mysql/data)用來存放備份資料。

      mkdir /home/mysql/data
    3. 解壓壓縮包。根據壓縮包的尾碼選擇解壓命令。

      備份檔案類型

      解壓命令

      tar 壓縮包 (.tar.gz 尾碼)

      tar -izxvf test1.tar.gz -C /home/mysql/data

      xbstream 壓縮包 (.xb.gz 尾碼)

      gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/data

      xbstream 檔案包(_qp.xb 尾碼)

      ## 先解包
      cat test1_qp.xb | xbstream -x -v -C /home/mysql/data
      
      ## 然後解壓
      ### 對於MySQL 5.6/5.7
      innobackupex --decompress --remove-original /home/mysql/data
      ### 對於MySQL 8.0
      xtrabackup --decompress --remove-original --target-dir=/home/mysql/data

      xbstream qpress壓縮包(_xb.qp尾碼)

      qpress -do  test1_xb.qp  | xbstream -x -v -C /home/mysql/data

      解壓後會發現,基本上所有資料的尾碼都為.xbcrypt,表示資料被加密。資料被加密

    4. 在命令列中執行如下命令解密資料。

      xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=4b5e1d4db97a******************** --target-dir=/home/mysql/data
      說明

      上述命令中的主要參數說明如下:

      • decrypt步驟1中擷取的密碼編譯演算法,本樣本中為AES256

      • encrypt-key步驟3中擷取的解密密碼。

      • target-dir:備份檔案所在的目錄。

      執行後,資料的.xbcrypt尾碼消失,資料解密成功。資料解密成功