EBS ボリュームの CMK(Customer Master Key) を KMS で生成したものから BYOK(Bring Your Own Key) したものに変更してみた。EBS のスナップショットを取得して、スナップショットをコピーする際に CMK を変更し、EBS ボリュームを作成して EC2 にアタッチすることで CMK を変更できた。
手順
KMSにキーを作成する
- CMK を作成する。
$ aws kms create-key { "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "2ae86c99-8b8f-4bba-9998-005b2dd768ac", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1540638331.395, "Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/2ae86c99-8b8f-4bba-9998-005b2dd768ac", "AWSAccountId": "123456789012" } }
- エイリアス名をつける。
$ aws kms create-alias --alias-name alias/ebs-kms-key --target-key-id 2ae86c99-8b8f-4bba-9998-005b2dd768ac
EC2インスタンスを作成する
- EC2インスタンスを作成する
- EBSボリュームを ebs-kms-key(2ae86c99-8b8f-4bba-9998-005b2dd768ac) で暗号化する。
- EBSのボリュームを初期化してマウントする
$ sudo mkfs -t ext4 /dev/sdb $ sudo mkdir /ebs-enc $ sudo chmod o+w /ebs-enc $ sudo vi /etc/fstab /dev/sdb /ebs-enc ext4 defaults 1 1 # 追記 $ sudo mount -a $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 68K 3.9G 1% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/xvda1 7.8G 1.1G 6.7G 14% / /dev/xvdb 59G 52M 56G 1% /ebs-enc
EBSボリュームにデータを置く
$ aws s3 ls --recursive --human-readable --summarize s3://amazon-reviews-pds/tsv (中略) Total Objects: 55 Total Size: 32.2 GiB $ aws s3 cp --recursive s3://amazon-reviews-pds/tsv /ebs-enc/ $ ls -lh /ebs-enc|head -5 total 33G -rw-rw-r-- 1 ec2-user ec2-user 231M Nov 24 2017 amazon_reviews_multilingual_DE_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 68M Nov 24 2017 amazon_reviews_multilingual_FR_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 91M Nov 24 2017 amazon_reviews_multilingual_JP_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 334M Nov 24 2017 amazon_reviews_multilingual_UK_v1_00.tsv.gz
KMSにCMKをBYOKする
- KMS に CMK を空で作成する。
$ aws kms create-key --origin EXTERNAL --description byok_key { "KeyMetadata": { "Origin": "EXTERNAL", "KeyId": "35e6c88a-0cd9-4614-9e7a-ec5782d7c1da", "Description": "byok_key", "KeyManager": "CUSTOMER", "Enabled": false, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "CreationDate": 1540639989.29, "Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/35e6c88a-0cd9-4614-9e7a-ec5782d7c1da", "AWSAccountId": "123456789012" } }
- 作成した CMK にエイリアス名をつける。
$ aws kms create-alias --alias-name alias/ebs-byok-key --target-key-id 35e6c88a-0cd9-4614-9e7a-ec5782d7c1da
- PublicKey と ImportToken をダウンロードする。
$ aws kms get-parameters-for-import \ --key-id 35e6c88a-0cd9-4614-9e7a-ec5782d7c1da \ --wrapping-algorithm RSAES_PKCS1_V1_5 \ --wrapping-key-spec RSA_2048
- 上記のPublicKey を PublicKey.b64、ImportToken を ImportToken.b64 というファイル名で保存する。
- PublicKey と ImportToken をそれぞれbase64デコードして、新しいファイルで保存する。
$ openssl enc -d -a -A -in PublicKey.b64 -out PublicKey.bin $ openssl enc -d -a -A -in ImportToken.b64 -out ImportToken.bin
- KMS にインポートする CMK を作成する
$ openssl rand -out PlaintextKeyMaterial.bin 32
- 生成した CMK を、デコードした PublicKey を使って暗号化する。
$ openssl rsautl -encrypt \ -in PlaintextKeyMaterial.bin \ -pkcs \ -inkey PublicKey.bin \ -keyform DER \ -pubin \ -out EncryptedKeyMaterial.bin
- 暗号化した CMK を KMS にインポートする。
$ aws kms import-key-material --key-id 35e6c88a-0cd9-4614-9e7a-ec5782d7c1da \ --encrypted-key-material fileb://EncryptedKeyMaterial.bin \ --import-token fileb://ImportToken.bin \ --expiration-model KEY_MATERIAL_EXPIRES \ --valid-to 2018-11-01T00:00:00-00:00
- AWSマネジメントコンソールのIAMの暗号化キーで確認する。
EBSをBYOKしたCMKで暗号化し直す
- アンマウントする。
$ sudo umount /ebs-enc
- スナップショットを取得する。
- スナップショット取得完了を確認する。
- スナップショットを選択して、[アクション]-[コピー]を選択して[マスターキー]をBYOKしたCMKに変更して[コピー]をクリックする。
- スナップショットのコピーが完了したら、
- BYOKで暗号化したスナップショットを選択して、[アクション]-[ボリュームの作成]を選択して、スナップショットからEBSボリュームを作成する
- 作成したEBSボリュームをEC2インスタンスにアタッチする。
- 作成したEBSボリュームがBYOKしたCMKで暗号化されていることを確認する。
- EBSボリュームをマウントして確認する。
$ sudo mkdir /ebs-byok $ sudo chmod o+w /ebs-byok $ sudo vi /etc/fstab /dev/sdf /ebs-byok ext4 defaults 1 1 #追記 $ sudo mount -a $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 72K 3.9G 1% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/xvda1 7.8G 1.1G 6.7G 14% / /dev/xvdb 59G 33G 24G 58% /ebs-enc /dev/xvdf 59G 33G 24G 58% /ebs-byok $ cd /ebs-byok $ ls -lh|head -5 total 33G -rw-rw-r-- 1 ec2-user ec2-user 231M Nov 24 2017 amazon_reviews_multilingual_DE_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 68M Nov 24 2017 amazon_reviews_multilingual_FR_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 91M Nov 24 2017 amazon_reviews_multilingual_JP_v1_00.tsv.gz -rw-rw-r-- 1 ec2-user ec2-user 334M Nov 24 2017 amazon_reviews_multilingual_UK_v1_00.tsv.gz
$ sudo dd if=/dev/xvdf of=/dev/null bs=1M