Envelop Encryption SDK

第二节提到,KMS加密有两种场景:

  • 对密码进行加密。这种情况下密码大小一般小于4K
  • 对大文本进行加密,例如上G的数据。此时需要使用data key来加密。

本节我们将对第二种场景进行详细介绍。


AWS cli可以生成data keyencrypted data key

image-20250308200427592

Plaintext (明文数据密钥):这是未加密的数据密钥(data key),以 Base64 编码展示。这个密钥可直接用于加密操作

CiphertextBlob (加密的数据密钥): 这是被 KMS 主密钥(CMK)加密后的数据密钥(encrypted data key),也是以 Base64 编码形式展示。这个加密版本可以安全存储,只有具备相应权限的用户才能使用 KMS 服务将其解密。

但aws提供了专门的Encryption SDK,直接使用这个更方便:

https://docs.aws.amazon.com/zh_cn/encryption-sdk/latest/developer-guide/crypto-cli-install.html

安装CLI

pip3 install aws-encryption-sdk-cli

使用

加密时需要指定要加密的文件:

aws-encryption-cli --encrypt --input myPlaintextData \
                   --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \
                   --output myEncryptedMessage \
                   --metadata-output ~/metadata \
                   --encryption-context purpose=test 

例如,准备一个test.png文件,对它进行加密:

aws-encryption-cli --encrypt --input test.png \
                   --wrapping-keys key=a323129b-c984-42ec-a2da-936874fafa4a \
                   --output test.png.encrypted \
                   --metadata-output metadata 

生成加密后的文件和metadata文件:

image-20250308200856416

生成metadata如下:

image-20250308200928177

在这个文件里面,我们看到了CiphertextBlob。 CiphertextBlob (加密的数据密钥): 这是被 KMS 主密钥(CMK)加密后的数据密钥(encrypted data key),也是以 Base64 编码形式展示。这个加密版本可以安全存储,只有具备相应权限的用户才能使用 KMS 服务将其解密。

解密:

aws-encryption-cli --decrypt --input myEncryptedMessage \
                   --wrapping-keys key=arn:aws:kms:us-west-2:145197526627:key/a323129b-c984-42ec-a2da-936874fafa4a \
                   --output myPlaintextData \
                   --metadata-output ~/metadata \
                   --encryption-context purpose=test                  

注释解密的时候,key必须传入arn格式:

aws-encryption-cli --decrypt --input test.png.encrypted \
                   --wrapping-keys key=arn:aws:kms:us-west-2:145197526627:key/a323129b-c984-42ec-a2da-936874fafa4a \
                   --output test-decrypted.png \
                   --metadata-output metadata 

解密后的文件和原来的一模一样:

image-20250308201531672

参考: https://docs.aws.amazon.com/zh_cn/encryption-sdk/latest/developer-guide/crypto-cli-how-to.html