{KMS}エンベロープ暗号化

 

https://qiita.com/RuyPKG/items/21d397516c2df2f0c45a

https://cloud-aws-gcp.hateblo.jp/entry/2019/11/27/102334

https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/concepts.html#enveloping


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

-- 1.2 jqインストール
sudo yum -y install jq

 

-- 2. KMSカスタマキーの作成

aws kms create-key \
--description key01


aws kms create-alias \
--alias-name alias/key01 \
--target-key-id 11111111-2222-3333-4444-555555555555

aws kms list-aliases

 

-- 3. 平文の作成


echo "hello world" > plain_text
cat plain_text

 


-- 4. DataKeyとEncrypted DataKeyの作成


output=$(aws kms generate-data-key \
--key-id alias/key01 \
--key-spec AES_256)

echo $output
echo $output | jq -r .Plaintext
echo $output | jq -r .Plaintext > plain_datakey

 

※ CiphertextBlobはbase64エンコードされている

echo $output | jq -r .CiphertextBlob
echo $output | jq -r .CiphertextBlob | base64 --decode
echo $output | jq -r .CiphertextBlob | base64 --decode > encrypted_datakey

 

-- 5. 暗号文の作成


openssl enc -e -aes-256-cbc -in plain_text -out encrypted_text -pass file:plain_datakey


cat encrypted_text


-- 6. 平文とDatakeyを削除

ls -l

rm -i plain_{text,datakey}

ls -l

 

-- 7. Encrypted DataKeyの復号

output=$(aws kms decrypt \
--key-id alias/key01 \
--ciphertext-blob fileb://encrypted_datakey)

echo $output
echo $output | jq -r .Plaintext 
echo $output | jq -r .Plaintext > decrypted_datakey

 

-- 8. 復号したDataKeyで暗号文を復号

openssl enc -d -aes-256-cbc -in encrypted_text -pass file:decrypted_datakey -out decrypted_text

cat decrypted_text

 

-- 9. クリーンアップ

-- KMSカスタマキーの削除

aws kms list-aliases | grep -A4 key01

aws kms list-keys


aws kms schedule-key-deletion \
--key-id 11111111-2222-3333-4444-555555555555 \
--pending-window-in-days 7