aws-doc/课程/第三阶段-安全与身份/第21天-加密与密钥管理.md

152 lines
4.9 KiB
Markdown
Raw Permalink Normal View History

2026-05-08 10:24:39 +08:00
# 第21天加密与密钥管理——保护你的数据
## 今天你将学到什么
今天学习如何保护数据安全KMS密钥管理负责加密数据Secrets Manager 负责管理密码和密钥。学完你会明白为什么"加密一切"是 AWS 的基本原则。
---
## 为什么需要加密
**场景一**:你的数据库存储了用户的手机号和地址。如果有人偷走了数据库的硬盘(物理盗窃或黑客入侵),他们能直接读取所有用户信息。
**加密后**:即使硬盘被偷,看到的也是一堆乱码。没有密钥就无法解读。
**场景二**:你的应用配置文件里写着数据库密码 `password123`。如果代码仓库泄露了,黑客就能直接连上你的数据库。
**用 Secrets Manager 后**:配置文件里只有一个引用 ID真正的密码存在 AWS 的保险箱里,只有有权限的程序才能取出来。
---
## 加密的两种场景
| 场景 | 含义 | 类比 |
|------|------|------|
| 静态加密 | 数据存在磁盘上时是加密的 | 保险箱里的文件是锁着的 |
| 传输加密 | 数据在网络上传输时是加密的 | 快递包裹是密封的 |
AWS 的大多数服务**默认启用**这两种加密。你几乎不需要额外操作。
---
## KMSKey Management Service
KMS 是 AWS 的"密钥保险箱"——帮你创建、存储和管理加密密钥。
### 工作原理(简化版)
你不需要自己写加密算法。只需要告诉 AWS"帮我加密这段数据"AWS 用 KMS 里的密钥帮你加密。解密时也一样。
**类比**KMS 就像银行的保险箱服务。你把贵重物品(数据)交给银行,银行帮你锁好(加密)。需要取的时候,验证你的身份后帮你打开(解密)。
### 哪些 AWS 服务用 KMS 加密
几乎所有存储数据的服务都支持 KMS
- S3存储的文件自动加密
- EBS硬盘上的数据自动加密
- RDS数据库文件自动加密
- DynamoDB表数据自动加密
- SQS消息内容加密
- Lambda环境变量加密
**你要做的**:创建资源时勾选"启用加密"(很多服务现在默认就是启用的)。
### 密钥类型
| 类型 | 谁管理 | 费用 | 适合 |
|------|--------|------|------|
| AWS 托管密钥 | AWS 自动管理 | 免费 | 大多数场景 |
| 客户托管密钥 | 你自己管理 | $1/月/密钥 | 需要精细控制的场景 |
学习阶段用 AWS 托管密钥就够了。
---
## Secrets Manager——密码的保险箱
### 问题:密码放哪里?
你的应用需要连接数据库,需要一个密码。这个密码放哪里?
**错误做法**
- 写在代码里 → 代码泄露密码就泄露
- 写在配置文件里 → 配置文件可能被误提交到 Git
- 写在环境变量里 → 环境变量可能出现在日志中
**正确做法**:放在 Secrets Manager 里。
### 工作流程
```
1. 你把数据库密码存入 Secrets Manager
2. 应用启动时,调用 Secrets Manager API 获取密码
3. 用获取到的密码连接数据库
4. 密码永远不会出现在代码或配置文件中
```
### Secrets Manager 的杀手锏:自动轮换
**传统方式**:数据库密码设置后就不变了。如果泄露了,你可能很久才发现。
**Secrets Manager 自动轮换**
- 每 30 天(你设置的周期)自动更换数据库密码
- 自动在数据库中更新新密码
- 应用下次获取时自动拿到新密码
- 全程无需人工干预,无需重启应用
**就像银行定期帮你换保险箱密码,而且自动通知所有需要知道的人。**
---
## 实际应用场景
### 场景Web 应用连接数据库
**不安全的做法**
```
数据库地址mydb.xxx.rds.amazonaws.com
用户名admin
密码MyP@ssw0rd123 ← 写死在代码里
```
**安全的做法**
```
数据库地址mydb.xxx.rds.amazonaws.com
用户名:从 Secrets Manager 获取
密码:从 Secrets Manager 获取
```
应用运行时动态获取凭证,代码里看不到任何密码。
---
## 加密最佳实践
1. **默认加密一切**:创建任何存储资源时都启用加密,成本几乎为零
2. **不要硬编码密码**所有密码、API 密钥都放 Secrets Manager
3. **启用自动轮换**:密码定期更换,减少泄露风险
4. **最小权限**:只有需要解密的服务才给 KMS 权限
5. **审计**:通过 CloudTrail 监控谁在什么时候使用了密钥
---
## 今天的小测验
1. "静态加密"和"传输加密"分别保护什么场景?
2. 为什么不应该把数据库密码写在代码里?
3. Secrets Manager 的"自动轮换"解决了什么问题?
4. KMS 的作用是什么?用一句话概括。
---
## 延伸阅读
- [KMS 开发者指南](https://docs.aws.amazon.com/kms/latest/developerguide/)
- [Secrets Manager 用户指南](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)
---
## 明天预告
明天学习 AWS 的网络安全服务WAFWeb 应用防火墙)和 ShieldDDoS 防护)——保护你的网站不被黑客攻击。