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