备份加密是利用备份工具(Xtrabackup)的加密能力对RDS MySQL实例备份进行加密,开发人员无需更改任何应用程序。如果需要使用加密的备份,需要先下载备份,然后在解压缩时进行解密。

前提条件

  • 实例类型为如下之一:
    • RDS MySQL 8.0高可用版(本地SSD盘)
    • RDS MySQL 5.7高可用版(本地SSD盘)
    • RDS MySQL 5.6高可用版(本地SSD盘)
  • 开通密钥管理服务

背景信息

加密使用的密钥由密钥管理服务(KMS)产生和管理,RDS不提供加密所需的密钥和证书。您不仅可以使用阿里云自动生成的密钥,也可以使用自定义密钥。

如果您需要使用自定义密钥进行备份加密,首先需要创建一个服务关联角色,RDS服务通过该角色获取KMS密钥列表、密钥属性以及别名后,才能在控制台给您展示加密密钥列表,并且在备份加密之后展示加密的相关信息。

开通加密服务的操作中,RDS服务会标记您选择的密钥,然后备份系统通过服务关联角色使用密钥进行备份加密。

注意事项

警告 备份加密功能开通后不可关闭。
  • 备份加密开通后无法修改密钥。
  • 备份加密开通后新增的备份才会加密,存量备份不会加密。
  • 备份加密开通后,您如果要恢复数据到本地,需要先解密数据
    说明 在控制台使用备份直接 恢复数据,不需要您手动解密,后端会自动解密后执行恢复操作。
  • 使用已有自定义密钥时,需要注意:
    • 禁用密钥、设置密钥删除计划或者删除密钥材料都会造成密钥不可用,从而使基于该密钥加密备份的实例运维操作失败,可能会影响实例的可用性。基于该加密备份的恢复操作也会失败。
    • 需要使用主账号或者具有如下权限的子账号:
      {
          "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管理控制台
  2. 在左侧单击实例列表,然后在上方选择实例所在地域。
    选择地域
  3. 找到目标实例,单击实例ID。
  4. 在左侧导航栏中单击备份恢复
  5. 备份加密页签下单击备份加密状态后的滑块。
    备份加密状态
  6. 选择加密设置,然后单击确认。加密设置说明如下:
    • 使用阿里云自动生成的密钥

      阿里云自动生成密钥供您使用。

    • 使用已有自定义密钥

      在密钥管理服务(KMS)中可以创建自定义密钥。详情请参见创建密钥

      说明 首次使用自定义密钥需要授权,您可以根据页面提示进行操作。
    加密设置

开通成功后,您的备份就会被加密,在阿里云上使用备份时不需要您手动解密,后端会自动解密后执行相关操作(例如恢复数据),但是如果下载加密的备份到本地,您需要手动解密才能使用备份。解密数据请参见解密数据

解密数据

  1. 获取base64编码的二进制串Plaintext。

    根据备份的加密信息Ciphertext和主密钥获取对应的Plaintext。您可以调用API Decrypt获取Plaintext。

    plaintext
  2. 获取解密密码。

    获取的Plaintext经过base64解码之后,把各个二进制转换为对应的十六进制即为本次解密的密码。以下为Python代码示例:

    import base64
    import binascii
    plaintext = 'your plaintext'
    password = binascii.b2a_hex(base64.decodestring(plaintext))
  3. 获取加密算法。
    备份加密默认使用的算法为AES256,算法的具体信息可以在备份的详情页面查看。
  4. 下载备份并解密数据。
    在获取解密密码和算法之后,您可以下载备份,然后在使用备份工具解压缩时增加 --decrypt--encrypt-key选项指定对应的参数,从而完成解密操作。示例如下:
    xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=2e412fd3b0016edd863aa0b********* --target-dir=/home/mysql/data