バックアップの暗о化では、Percona XtraBackup を使用して ApsaraDB RDS for MySQL インスタンスのバックアップを暗号化します。アプリケーションの変更は不要です。暗号化されたバックアップを使用するには、バックアップをダウンロードした後、展開して復号する必要があります。
前提条件
-
ApsaraDB RDS for MySQL インスタンスが次の要件を満たしている必要があります。
-
メジャーバージョン:8.0、5.7、または 5.6
-
エディション:High-availability Edition
-
ストレージタイプ:プレミアムローカル SSD
-
-
専用 KMS インスタンスを購入してください。
背景情報
Key Management Service (KMS) は暗号化キーを生成および管理します。ApsaraDB RDS は暗号化に必要なキーまたは証明書を提供しません。Alibaba Cloud によって自動生成されるキー、またはお客様自身のカスタムキーを使用できます。
バックアップの暗号化にカスタムキーを使用するには、最初に サービスリンクロール を作成する必要があります。ApsaraDB RDS はこのロールを使用して、KMS キーのリスト、プロパティ、およびエイリアスを取得します。これにより、バックアップの暗号化を有効化した後、コンソールに使用可能な暗号化キーのリストと関連する暗号化情報が表示されます。
バックアップの暗号化を有効化すると、ApsaraDB RDS は選択したキーにタグを付けます。その後、バックアップシステムはサービスリンクロールとキーを使用してバックアップを暗号化します。
考慮事項
バックアップの暗号化を有効化した後は、無効化できません。
-
バックアップの暗号化を有効化した後は、キーを変更できません。
-
バックアップの暗号化は、この機能を有効化した後に作成された新しいバックアップにのみ適用されます。
-
暗号化されたバックアップをローカル環境に復元するには、バックアップをダウンロードしてから データを復号する必要があります。
説明コンソールでバックアップを使用して データを復元する場合は、手動で復号する必要はありません。バックエンドがデータを自動的に復号し、その後復元します。
-
既存のカスタムキーを使用する場合:
-
キーを無効化する、削除をスケジュールする、またはキーマテリアルを削除すると、キーは使用できなくなります。その結果、これらのバックアップに依存する運用保守オペレーションおよび復元が失敗し、インスタンスの可用性に影響する可能性があります。
-
次の権限を持つ 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:*:*:*" ] } ] }説明Resource Access Management (RAM) コンソールで権限を設定し、アカウントを承認できます。詳細については、「RAM ユーザーに ApsaraDB RDS インスタンスへのアクセスを承認」をご参照ください。
-
バックアップの暗号化の有効化
- RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
-
左側メニューで、バックアップリカバリ をクリックします。
-
バックアップリカバリ ページで、バックアップポリシー タブをクリックします。
-
バックアップの暗号化設定 セクションで、編集 をクリックし、[バックアップの暗号化] をオンにします。
-
バックアップの暗号化設定 ダイアログボックスで、バックアップマスターキー を選択し、OK をクリックします。
-
自動作成されたキーの使用
Alibaba Cloud がキーを自動的に生成します。
-
既存カスタムキーを使用する
Key Management Service (KMS) から既存のキーを選択します。キーを作成していない場合は、「キーの作成」をご参照ください。
説明カスタムキーを初めて使用する場合は、承認が必要です。画面の指示に従ってください。
-
Alibaba Cloud 内で暗号化されたバックアップを使用する場合、バックアップを手動で復号する必要はありません。データの復元などの関連オペレーションでは、システムがデータを自動的に復号します。ただし、暗号化されたバックアップをローカル環境にダウンロードする場合は、使用する前にバックアップを手動で復号する必要があります。データを復号するには、「データの復号」をご参照ください。
データの復号
このセクションでは、Ubuntu 16.04 システムを例に復号プロセスを説明します。
前提条件
-
Percona XtraBackup がインストールされていること。インストールされていない場合は、「Percona XtraBackup 2.4 (MySQL 5.7、5.6、または 5.5 インスタンス向け)」または「Percona XtraBackup 8.0 (MySQL 8.0 インスタンス向け)」をご参照ください。
-
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 が必要です。
操作手順
-
バックアップセットの暗号文と暗号化アルゴリズムを取得します。
-
ApsaraDB RDS コンソールにログインし、上部メニューでリージョンを選択してから、対象インスタンスの ID をクリックします。
-
左側メニューで、バックアップリカバリ をクリックします。
-
バックアップリカバリ ページで、 タブに移動します。
-
対象バックアップセットの 操作 列で、 をクリックし、暗号文 と 暗号化アルゴリズム を取得します。
-
-
Decrypt API を呼び出します。手順 1 で取得した 暗号文 を CiphertextBlob パラメーターに渡し、Base64 エンコードされたバイナリ文字列 Plaintext を取得します。
{ "KeyId": "xxx", "KeyVersionId": "xxx", "Plaintext": "S14dTb16i4Qo", "RequestId": "7474865d-f1fc-49c8-bf4d-7323de86ce59" } -
Plaintext文字列を Base64 デコードし、得られたバイト列を 16 進数に変換して復号キーを取得します。この例では、Python 3 スクリプトを使用します。-
コマンドラインインターフェイスで
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')) # password を文字列として出力します。 -
python decrypt.pyコマンドを実行します。コマンドにより復号キーが出力されます。次にサンプルキーを示します。4b5e1d4db97a********************
-
-
暗号化されたバックアップデータをダウンロードし、データを復号します。
-
次のコマンドを実行して、バックアップデータを格納するディレクトリを作成します (例:
/home/mysql/data)。mkdir /home/mysql/data -
パッケージを展開します。ファイルの拡張子に応じて展開コマンドを選択します。
ファイルタイプ
展開コマンド
tar パッケージ (.tar.gz)
tar -izxvf test1.tar.gz -C /home/mysql/dataxbstream パッケージ (.xb.gz)
gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/dataxbstream ファイルパッケージ (_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/dataxbstream qpress パッケージ (_xb.qp)
qpress -do test1_xb.qp | xbstream -x -v -C /home/mysql/data展開後、ほとんどのデータファイルの拡張子は
.xbcryptになります。これは暗号化されていることを示します。backup-my.cnf.xbcrypt testdb dbfortest xtrabackup_binlog_info.xbcrypt ibdata1.xbcrypt xtrabackup_checkpoints mysql xtrabackup_info.xbcrypt performance_schema xtrabackup_logfile.xbcrypt rds_table_info_json_105244.log xtrabackup_slave_filename_info.xbcrypt _recycle_bin_ xtrabackup_slave_info.xbcrypt -
次のコマンドを実行してデータを復号します。
xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=4b5e1d4db97a******************** --target-dir=/home/mysql/dataコマンドの実行後、ファイル名から
.xbcrypt拡張子が消えます。これにより、データが復号されたことを確認できます。backup-my.cnf testdb dbfortest xtrabackup_binlog_info ibdata1 xtrabackup_checkpoints mysql xtrabackup_info performance_schema xtrabackup_logfile rds_table_info_json_105244.log xtrabackup_slave_filename_info recycle_bin xtrabackup_slave_info
] > [暗号化情報の表示]