# 保护敏感数据

识别敏感数据的下一步就是“保护敏感数据”，保护一般需要覆盖数据的采集、传输、存储和使用这几个生命周期。

* **采集：**&#x4F7F;用[隐私保护影响评估](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/an-quan-he-gui/quan-qiu-ge-guo-falsu-cha/shen-me-shi-gdpr/yin-si-bao-hu-an-quan-ping-gu-mu-ban/ge-ren-shu-ju-bao-hu-ying-xiang-ping-gu-dpiagdpr)，对要采集的数据进行评估，是否一定要采集，采集以后采取什么保护措施，是否存在安全风险，是否接受安全风险等。
* **传输：**&#x4F7F;用加密协议，加密传输的数据；
* **存储：**&#x4F7F;用AWS KMS加密静态存储的数据；可以参考[如何加密数据](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/3.-shu-ju-bao-hu/bao-hu-min-gan-shu-ju/ru-he-jia-mi-shu-ju)对传输和存储数据进行加密防护。
* **使用：**&#x8BBF;问请求数据的时候要进行权限控制，[防止未授权访问](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/3.-shu-ju-bao-hu/bao-hu-min-gan-shu-ju/fang-zhi-wei-shou-quan-fang-wen)，以及如果是通过代码访问数据，要确保[代码中不出现明文口令](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/3.-shu-ju-bao-hu/bao-hu-min-gan-shu-ju/ru-he-shi-xian-dai-ma-zhong-bu-chu-xian-ming-wen-kou-ling)。

## 密钥管理

加密是一件复杂的事情，复杂之处在于密钥的管理。一旦做了数据加密，你就有了一个访问相应数据的密钥，那大家把这个密钥放到哪里了呢？放到了数据旁边！想象一下，你锁了一扇门，然后把钥匙挂到门旁的一个挂钩上，并且挂钩上面还写着“钥匙”等提示信息。要想达到真正的安全（而不是仅仅为了勾上一个“已完成加密”的待办事项），你必须有正确的密钥管理。

最简单的密钥管理方式是生成一个密钥，用这个密钥对数据进行加密，然后将密钥放入KMS，之后将加密后的数据写到磁盘上，同时提供一个提示信息说明这些数据是用哪个密钥加密的。但这种方式主要存在两个问题：

1\. 性能较差的KMS需要承担较大负载。大家能找出很多理由来为每个文件使用一个密钥，因此在用户数量比较庞大时，KMS将不得不存储数十亿乃至数万亿的密钥，而且要满足能即时检索的要求。

2\. 如果想彻底清除数据，你就需要绝对信任KMS能不可逆地清除相应的密钥，而且不能留有任何备份。另一种方式是用新的写入覆盖所有加密的数据，但这种操作需要耗费一定时间。

通常情况下应该有两级密钥：一个密钥加密密钥（key encryption key）和一个数据加密密钥（data encryption key）。从名字就可以看出，密钥加密密钥用于加密（或“包裹”）数据加密密钥，而被加密的密钥与数据存储在一起。密钥加密密钥通常保存在KMS，出于安全原因，它永远不会拿出来。

### 1-硬件加密HSM

在传统的、对安全要求很高的本地部署环境中，通常是购买硬件安全模块（Hardware Security Module，HSM）来保存密钥，一般是以扩展卡或网络访问模块的形式。HSM对未授权访问有很多重要的逻辑和物理保护机制。对于大部分系统而言，任何有物理访问权限的人都可以很容易地进入系统，但HSM的传感器一旦检测到有人试图取走数据、用X光扫描数据、乱动数据的电源或其他看起来有威胁的行为，它就可以立即删除数据。

由于HSM费用较贵，因此对于大部分本地部署来说，可行性不高。然而在云环境中，对于中等预算的项目，类似HSM和密钥管理系统这样的高级技术也都是可以考虑使用的。一些云提供商支持用户为自己的云环境租用专用HSM。虽然最高安全等级的环境可能确实需要这样的功能，但在云环境中专用HSM仍然是比较昂贵的。

### 2-密钥管理服务KMS

密钥管理服务（Key Management Service，KMS），这是一种多租户服务，背后是使用HSM保证密钥的安全。你必须对HSM和KMS（而不仅仅是HSM）持有信任，即使它们本身也增加了一点额外的风险。然而，与自己做密钥管理（通常实现上都有问题）相比，KMS还是在零成本或极低成本的前提下保证了非常好的安全性。如果项目中有中等偏上程度的安全预算，那么你就可以享受拥有合适的密钥管理而带来的便利了。
