CMK を作成してインポートする
$ aws kms create-key --origin EXTERNAL --description byok_key_test1
{
"KeyMetadata": {
"Origin": "EXTERNAL",
"KeyId": "02c66c29-81b3-404b-beba-35355b4a56cc",
"Description": "byok_key_test1",
"KeyManager": "CUSTOMER",
"Enabled": false,
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "PendingImport",
"CreationDate": 1540823706.373,
"Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/02c66c29-81b3-404b-beba-35355b4a56cc",
"AWSAccountId": "123456789012"
}
}
$ aws kms create-alias --alias-name alias/byok-key-test1 --target-key-id 02c66c29-81b3-404b-beba-35355b4a56cc
- PublicKey と ImportToken をダウンロードする。
$ aws kms get-parameters-for-import \
--key-id 02c66c29-81b3-404b-beba-35355b4a56cc \
--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
$ openssl rand -out PlaintextKeyMaterial.bin 32
- 生成した CMK を、デコードした PublicKey を使って暗号化する。
$ openssl rsautl -encrypt \
-in PlaintextKeyMaterial.bin \
-pkcs \
-inkey PublicKey.bin \
-keyform DER \
-pubin \
-out EncryptedKeyMaterial.bin
$ aws kms import-key-material --key-id 02c66c29-81b3-404b-beba-35355b4a56cc \
--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 kms describe-key --key-id 02c66c29-81b3-404b-beba-35355b4a56cc
{
"KeyMetadata": {
"Origin": "EXTERNAL",
"KeyId": "02c66c29-81b3-404b-beba-35355b4a56cc",
"Description": "byok_key_test1",
"KeyManager": "CUSTOMER",
"ExpirationModel": "KEY_MATERIAL_EXPIRES",
"ValidTo": 1541030400.0,
"Enabled": true,
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "Enabled",
"CreationDate": 1540823706.373,
"Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/02c66c29-81b3-404b-beba-35355b4a56cc",
"AWSAccountId": "123456789012"
}
}
CMK を削除して再インポートする
$ aws kms delete-imported-key-material --key-id 02c66c29-81b3-404b-beba-35355b4a56cc
$ aws kms describe-key --key-id 02c66c29-81b3-404b-beba-35355b4a56cc
{
"KeyMetadata": {
"Origin": "EXTERNAL",
"KeyId": "02c66c29-81b3-404b-beba-35355b4a56cc",
"Description": "byok_key_test1",
"KeyManager": "CUSTOMER",
"Enabled": false, ★
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "PendingImport", ★
"CreationDate": 1540823706.373,
"Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/02c66c29-81b3-404b-beba-35355b4a56cc",
"AWSAccountId": "123456789012"
}
}
- PublicKey と ImportToken をダウンロードする。
aws kms get-parameters-for-import \
--key-id 02c66c29-81b3-404b-beba-35355b4a56cc \
--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
$ openssl rand -out PlaintextKeyMaterial.bin 32
- 生成した CMK を、デコードした PublicKey を使って暗号化する。
$ openssl rsautl -encrypt \
-in PlaintextKeyMaterial.bin \
-pkcs \
-inkey PublicKey.bin \
-keyform DER \
-pubin \
-out EncryptedKeyMaterial.bin
$ aws kms import-key-material --key-id 02c66c29-81b3-404b-beba-35355b4a56cc \
--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
An error occurred (IncorrectKeyMaterialException) when calling the ImportKeyMaterial operation: ★同じキーマテリアルでないため失敗する