このトピックでは、ApsaraDB RDS for MySQL インスタンスのバックアップ暗号化機能を有効にする方法について説明します。 バックアップファイルは、Percona XtraBackup ユーティリティを使用して暗号化されます。 このユーティリティを使用すると、アプリケーションを変更する必要がなくなります。 暗号化されたバックアップファイルを使用する場合は、バックアップファイルをダウンロードする必要があります。 その後、展開時にバックアップファイルを復号できます。
前提条件
RDS インスタンスが以下の要件を満たしていること。
RDS インスタンスで MySQL 8.0、MySQL 5.7、または MySQL5.6 が実行されている。
RDS インスタンスで RDS 高可用性版が実行されている。
RDS インスタンスでプレミアムローカル SSD が使用されている。
Key Management Service (KMS) がアクティブになっていること。 詳細については、「専用 KMS インスタンスを購入する」をご参照ください。
背景情報
バックアップの暗号化に使用されるキーは KMS によって作成および管理されます。 ApsaraDB RDS は、バックアップの暗号化に必要なキーまたは証明書を提供しません。 自動生成キーまたはカスタムキーを使用できます。
カスタムキーを使用する場合は、最初にサービスリンクロールを作成する必要があります。 ApsaraDB RDS はサービスリンクロールを使用して、KMS からキーとキーの属性およびエイリアスを取得します。 その後、ApsaraDB RDS は ApsaraDB RDS コンソールにキーを表示できます。 バックアップファイルがカスタムキーを使用して暗号化された後、ApsaraDB RDS は関連する暗号化情報を表示することもできます。 詳細については、「サービスリンクロール」をご参照ください。
バックアップ暗号化機能を有効にすると、ApsaraDB RDS は選択したキーをマークします。 その後、ApsaraDB RDS はサービスリンクロールに基づいてキーを使用してバックアップファイルを暗号化します。
使用上の注意
バックアップ暗号化機能は、有効にした後は無効にできません。
バックアップ暗号化機能を有効にした後、キーを変更することはできません。
バックアップ暗号化機能を有効にした後、新しいバックアップファイルのみが暗号化されます。 既存のバックアップファイルは暗号化されません。
バックアップ暗号化機能を有効にした後、RDS インスタンスのデータをオンプレミス データベースにリストアする場合は、バックアップファイルをダウンロードした後に RDS インスタンスのバックアップファイルを復号する必要があります。 詳細については、「バックアップファイルを復号する」をご参照ください。
説明ApsaraDB RDS コンソールを使用してバックアップファイルから RDS インスタンスのデータを直接リストアする場合、バックアップファイルを復号する必要はありません。 バックエンドはリストアを実行する前に、バックアップファイルを自動的に復号します。 詳細については、「完全データをリストアする」をご参照ください。
バックアップの暗号化に既存のカスタムキーを使用する場合は、以下の点に注意してください。
キーを無効にする、キーを削除する計画を設定する、またはキーマテリアルを削除すると、キーは使用できなくなります。 この場合、O&M 操作に使用できないキーで暗号化されたバックアップファイルが必要な場合、O&M 操作は失敗します。 これにより、インスタンスの可用性が低下する可能性があります。 使用できないキーで暗号化されたバックアップファイルからデータをリストアする場合、データのリストアも失敗します。
次の権限を持つ Alibaba Cloud アカウントまたは 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 コンソールを使用して権限を設定し、RAM ユーザーに権限を付与できます。 詳細については、「RAM ユーザーに ApsaraDB RDS インスタンスの管理を承認する」をご参照ください。
バックアップ暗号化機能を有効にする
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、[バックアップとリストア] をクリックします。
[バックアップとリストア] ページで、[バックアップ戦略] タブをクリックします。
[バックアップ暗号化設定] セクションの [編集] をクリックして、[バックアップ暗号化ステータス] をオンにします。
[バックアップセット暗号化情報] ダイアログボックスで、[バックアップマスターキー] パラメーターの値を選択し、[OK] をクリックします。
[自動生成キーを使用する]
このオプションを選択すると、Alibaba Cloud はバックアップファイルを暗号化するために使用できるキーを生成します。
[既存のカスタムキーを使用する]
このオプションを選択すると、KMS を使用して作成されたキーが使用されます。 キーが存在しない場合は、KMS を使用してキーを作成できます。 詳細については、「CMK を作成する」をご参照ください。
説明KMS を使用してカスタムキーを初めて作成する場合は、表示される指示に従って承認を取得する必要があります。
バックアップ暗号化機能を有効にすると、RDS インスタンスのバックアップファイルが暗号化されます。 これらのバックアップファイルを Alibaba Cloud で使用する場合は、これらのバックアップファイルを手動で復号する必要はありません。 バックエンドは、データのリストアなどの操作を実行する前に、これらのバックアップファイルを自動的に復号します。 これらのバックアップファイルをコンピューターにダウンロードする場合は、これらのバックアップファイルを手動で復号する必要があります。 これらのバックアップファイルの復号方法の詳細については、「バックアップファイルを復号する」をご参照ください。
バックアップファイルを復号する
このセクションでは、Ubuntu 16.04 を例に使用して、バックアップファイルを復号する方法を示します。
前提条件
Percona XtraBackup がインストールされていること。 Percona XtraBackup をインストールしていない場合は、Percona XtraBackup 2.4 のインストール または Percona XtraBackup 8.0 のインストールの概要 に記載されている手順に従って Percona XtraBackup をインストールします。
qpress 展開ツールがインストールされていること。 ツールをインストールしていない場合は、次のコマンドを実行します。
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar" tar xvf qpress-11-linux-x64.tar chmod 775 qpress cp qpress /usr/bin
Python 3 がインストールされていること。
手順
バックアップファイルの暗号化に使用される暗号文とアルゴリズムを取得します。
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
表示されるページの左側のナビゲーションウィンドウで、[バックアップとリストア] をクリックします。
表示されるページで、[ベースバックアップ] タブ、[データバックアップ] タブの順にクリックします。
バックアップセットの [操作] 列にある
アイコンをクリックし、[暗号化情報の表示] をクリックして [暗号文] と [暗号化アルゴリズム] を取得します。
復号 操作を呼び出し、CiphertextBlob パラメーターを ステップ 1 で取得した [暗号文] に設定して、Plaintext パラメーターの値を取得します。 この値は Base64 でエンコードされたバイナリ文字列です。
Plaintext パラメーターの値を Base64 を使用してデコードし、バイナリ文字列の各バイナリ値を 16 進値に変換します。 その後、パスワードを取得できます。 このセクションでは、Python 3 コードを使用してこの操作を実装します。
CLI で
vi decrypt.py
コマンドを実行して、vi エディターを開きます。キーボードの
i
キーを押して編集モードを有効にし、次のコンテンツを入力し、ESC
キーを押してから:wq
と入力して変更を保存し、編集モードを無効にします。import base64 import binascii plaintext = 'S14dTbl6i4Qo**********' # 前のステップで取得した Plaintext パラメーターの値を単一引用符 ('') で囲んで入力します。 password = binascii.b2a_hex(base64.b64decode(plaintext)) # 復号のパスワードを取得し、password パラメーターに取得した値を設定します。 print(str(password, 'utf-8')) # パスワードを文字列として画面に出力します。
CLI で
python decrypt.py
コマンドを実行すると、復号のパスワードが画面に出力されます。 例:4b5e1d4db97a********************
暗号化されたバックアップデータをダウンロードして、データを復号します。
バックアップデータをコンピューターにダウンロードします。 詳細については、「物理バックアップファイルから自己管理 MySQL データベースに ApsaraDB RDS for MySQL インスタンスのデータをリストアする」をご参照ください。
CLI で次のコマンドを実行して、
/home/mysql/data
などのディレクトリを作成し、バックアップデータを保存します。mkdir /home/mysql/data
物理バックアップパッケージを展開します。 物理バックアップパッケージの展開に使用されるコマンドは、パッケージ名の拡張子によって異なります。
バックアップファイルの種類
展開に使用されるコマンド
.tar.gz
tar -izxvf test1.tar.gz -C /home/mysql/data
.xb.gz
gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/data
_qp.xb
## 物理バックアップファイルを展開します。 cat test1_qp.xb | xbstream -x -v -C /home/mysql/data ## 物理バックアップファイルを展開します。 ### RDS インスタンスで MySQL 5.6 または MySQL 5.7 が実行されている場合は、次のコマンドを実行します。 innobackupex --decompress --remove-original /home/mysql/data ### RDS インスタンスで MySQL 8.0 が実行されている場合は、次のコマンドを実行します。 xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
_xb.qp
qpress -do test1_xb.qp | xbstream -x -v -C /home/mysql/data
展開後、すべてのデータには
.xbcrypt
というサフィックスが付きます。 このサフィックスは、データが暗号化されていることを示します。次のコマンドを実行してデータを復号します。
xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=4b5e1d4db97a******************** --target-dir=/home/mysql/data
前のコマンドを実行すると、バックアップファイルの
.xbcrypt
サフィックスが消え、バックアップファイルが復号されます。