AWS KMS加密和解密
目录
1. Key Management Service
1.1 KMS概述
用于创建和管理加密密钥,在 AWS KMS 中创建的客户主密钥均受硬件安全模块 (HSM) 保护。
1.2 KMS特点
1) 完全托管,具有可扩展性、持久性和高可用性;
2) 提供了单一控制点,集中式管理密钥,可以随时创建新密钥,以及对密钥的生命周期和权限进行集中控制;
3) KMS与AWS服务集成,可简化密钥使用以加密AWS工作负载中的数据;
4) 成本低廉,使用KMS服务不需要事先承诺用量,也没有预付费用。
2. 配置KMS
2.1 创建KMS
建议在创建KMS前先创建一个IAM Account,假设有个bas-developer账户。
1) 配置密钥,假设这里命名为cmk-test。
2) 定义密钥管理员。
3) 定义密钥使用权限。
4) 创建密钥。
值得注意的是,CMK无法从KMS服务中导出,这样是为了确保CMK的安全,也避免了遗失密钥而造成的安全隐患。AWS KMS 服务创建的密钥永远不会在创建密钥的 AWS 区域以外传输,并且只能在创建密钥的区域内使用。
2.2 添加KMS权限
1) 创建好CMK之后,cli输入:
aws kms list-keys --profile developer --region us-west-1
2) 设置bas_developer账户KMS权限。
3) 添加CMK policy之后。
3. KMS加密
3.1 KMS cli
1) key-id:后面需要指定我们创建的cmk的密钥ID,使用此CMK进行加密。
2) plaintext:后面指定需要加密的明文内容。
3.2 加密测试
1) 加密文本。
aws kms encrypt --key-id 9b72d5fc-ae5c-408f-8a37-8999616c1491 --plaintext testContent
2) 加密文本,只输出CiphertextBlob。
aws kms encrypt --key-id 9b72d5fc-ae5c-408f-8a37-8999616c1491 --plaintext testContent --query CiphertextBlob
3) 加密文本,输出CiphertextBlob结果不包括加密密文两边的引号。
aws kms encrypt --key-id 9b72d5fc-ae5c-408f-8a37-8999616c1491 --plaintext testContent --query CiphertextBlob --output text
4) 加密文本,输出到文件。
aws kms encrypt --key-id 9b72d5fc-ae5c-408f-8a37-8999616c1491 --plaintext testContent --query CiphertextBlob --output text --query CiphertextBlob > C:Users13123Desktop estEncryptContent.json
certutil -decode C:Users13123Desktop estEncryptContent.json C:Users13123Desktop estEncryptContent
4. KMS信封加密
将加密数据的数据密钥封入信封中存储、传递、和使用,不再使用主密钥直接加解密数据。也就是说,信封加密使用客户主密钥生成数据密钥,然后用离线的数据密钥在本地加密大量数据,而不再使用主密钥直接加解密数据。
4.1 KMS信封加密的定义及主要优势
- AWS KMS支持发送最大4KB的数据进行直接加密,如果需要加密的数据比较大的话就需要信封加密;
- 信封加密可提供巨大的性能优势。当使用 AWS KMS 直接加密数据时,整个数据必须通过网络进行传输。信封加密降低了网络负载,因为通过网络发送的只有请求,同时传输的数据密钥也更小;
- 将需要加密的数据通过网络传输至KMS,虽然是通过安全信道通信,也有可能会在传输过程中存在诸多风险,如窃听、钓鱼,且一些组织的安全政策也不允许用户将数据传输至AWS进行加密。
4.2 信封加密测试
加密命令执行后,返回明文数据密钥以及密文数据密钥,然后就可以使用明文数据密钥对的服务器上的文件进行加密,加密后将密文数据密钥和密文文件一同存储到持久化存储设备或服务中。
解密文件时,使用KMS的decrypt接口,将密文数据密钥解密为明文数据密钥,在使用明文数据密钥为本地文件解密。
4.2.1 加密过程
1) 先使用CMK生成数据密钥,一旦请求KMS生成数据密钥时,用户能够得到一个明文数据密钥和一个密文数据密钥。
2) 然后使用明文数据密钥加密您服务器上的文件,生成密文文件。
3) 将密文文件和密文数据密钥一同存储到持久化存储设备或服务中。
4) 完成加密后,就可以将明文文件,以及明文数据密钥删除。只保留密文密钥和密文文件,这样即使密文密钥和密文文件被窃取,也无法解密获得用户的明文文件。
aws kms generate-data-key --key-id 9b72d5fc-ae5c-408f-8a37-8999616c1491 --key-spec AES_256
4.2.2 解密过程
1) 首先从持久化存储设备或服务中读取密文数据密钥和密文文件。
2) 调用KMS服务的Decrypt接口,解密数据密钥,取得明文数据密钥。
3) 使用明文数据密钥解密文件。
附:
1. AWS KMS cli可以参考:aws kms cli。
2. API开发参考文档:Encrypting and decrypting data keys。
相关文章
- 谁是下一个BAT?
- 创业圈的五大潜规则 看懂这些再去创业!
- 阿里巴巴CTO王坚:计算经济时代已经到来!
- iOS 应用架构谈 本地持久化方案
- 一张图和一段话看懂马云眼里的阿里未来
- iOS相册Moment功能的优化方案
- APIStore——来自百度的技术革新思索
- 震惊外国人的十组苹果大数据
- 19岁程序员在谷歌学到的5条经验教训
- 阮一峰:蒙特卡罗方法入门
- 红包(optionals - 可选类型)
- 干货满满,让数据变有趣!如何设计实用易读的图表
- iOS被坑集锦
- 关于数据库, 关于 MVC, 也关于 React的两篇文章读后感
- 当优化扩展到多核时……
- 这15个关键数据是所有游戏开发者都要了解的
- 听故事学Swift系列 - 小明与红包(optionals - 可选类型)
- 你真的了解实时计算吗?
- 今天不写代码,聊聊热门的知识图谱
- 编译实战 | 手摸手教你在Windows环境下运行Redis6.x