{KMS}AWS KMS キーにキーマテリアルをインポートする

https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/importing-keys.html
https://aws.amazon.com/jp/premiumsupport/knowledge-center/invalidciphertext-kms/

インポートされたキーマテリアルは、AWS KMS キーストアのマルチリージョン対称 KMS キーを含む対称 KMS キーでのみサポートされます。
非対称 KMS キーまたはカスタムキーストアの KMS キーではサポートされません。


-- 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. キーマテリアルなしで AWS KMS key を作成する


aws kms create-key --origin EXTERNAL

-- 3. パブリックキーおよびインポートトークンのダウンロード

aws kms get-parameters-for-import \
--key-id 11111111-2222-3333-4444-555555555555 \
--wrapping-algorithm RSAES_OAEP_SHA_256 \
--wrapping-key-spec RSA_2048 > out

cat out

パブリックキーの準備

cat out | jq -r .PublicKey > PublicKey.b64
openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin


インポートトークンの準備

cat out | jq -r .ImportToken > ImportToken.b64
openssl enc -d -base64 -A -in ImportToken.b64 -out ImportToken.bin

ls -ltr


-- 4. キーマテリアルを暗号化する

openssl rand -out PlaintextKeyMaterial.bin 32

 

openssl version

openssl pkeyutl \
-in PlaintextKeyMaterial.bin \
-out EncryptedKeyMaterial.bin \
-inkey PublicKey.bin \
-keyform DER \
-pubin \
-encrypt \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256


デフォルトでは、OpenSSL は SHA-1 ハッシュ関数を使用します。
RSAES_OAEP_SHA_256 アルゴリズム (SHA-256 ハッシュ関数) を使用するときのインポートエラーを回避するには、
openssl pkeyutl コマンドを使用して OpenSSL でキーマテリアルを暗号化し、
パラメータ -pkeyopt rsa_padding_mode:oaep と -pkeyopt rsa_oaep_md:sha256 を指定します。


-- 5. キーマテリアルのインポート

aws kms import-key-material \
--key-id 11111111-2222-3333-4444-555555555555 \
--encrypted-key-material fileb://EncryptedKeyMaterial.bin \
--import-token fileb://ImportToken.bin \
--expiration-model KEY_MATERIAL_EXPIRES \
--valid-to 2022-09-30T23:59:59Z


aws kms describe-key \
--key-id 11111111-2222-3333-4444-555555555555

 

-- 6. 動作確認

echo test20220321 > a.txt

cat a.txt


aws kms encrypt \
--key-id 11111111-2222-3333-4444-555555555555 \
--encryption-algorithm SYMMETRIC_DEFAULT \
--plaintext fileb://a.txt \
--output text \
--query CiphertextBlob | base64 --decode > a.enc


aws kms decrypt \
--key-id 11111111-2222-3333-4444-555555555555 \
--encryption-algorithm SYMMETRIC_DEFAULT \
--ciphertext-blob fileb://a.enc \
--output text \
--query Plaintext | base64 --decode

 

-- 7. クリーンアップ

-- キーマテリアルの削除

aws kms delete-imported-key-material \
--key-id 11111111-2222-3333-4444-555555555555

→ KMSキーのステータスがインポート保留中に戻る


-- KMSキーの削除

aws kms describe-key \
--key-id 11111111-2222-3333-4444-555555555555

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