外观
TiDB 存储加密
TiDB 存储加密是保护数据安全的重要机制,通过对存储在磁盘上的数据进行加密,可以防止未授权访问和数据泄露。TiDB 支持 TiKV 数据加密、PD 数据加密、备份数据加密等多种存储加密方式。
TiKV 存储加密
1. 加密机制
TiKV 使用 AES-256-GCM 加密算法对数据进行加密,支持两种加密模式:
- 静态加密:对存储在磁盘上的数据进行加密,包括 SST 文件、WAL 日志等
- 动态加密:对写入数据实时加密,对读取数据实时解密
2. 加密配置
在 TiKV 配置文件中添加以下配置启用存储加密:
toml
# tikv.toml
[security]
# 启用数据加密
enable-encryption = true
# 加密算法,支持 aes-128-gcm, aes-192-gcm, aes-256-gcm
encryption-algorithm = "aes-256-gcm"
# 密钥文件路径
encryption-key-path = "/path/to/encryption.key"3. 密钥管理
- 密钥文件格式:密钥文件是一个 JSON 格式的文件,包含主密钥和数据密钥
- 密钥轮换:支持密钥轮换,定期更换加密密钥,提高安全性
- 密钥备份:定期备份密钥文件,防止密钥丢失导致数据无法访问
4. 密钥轮换
bash
# 使用 tikv-ctl 进行密钥轮换
tikv-ctl encrypt rotate-key --pd-endpoints="http://127.0.0.1:2379" --key-path="/path/to/new-encryption.key"PD 存储加密
1. 加密机制
PD 使用 AES-256-GCM 加密算法对存储的数据进行加密,包括:
- 集群元数据
- Region 信息
- 调度信息
2. 加密配置
在 PD 配置文件中添加以下配置启用存储加密:
toml
# pd.toml
[security]
# 启用数据加密
enable-encryption = true
# 加密算法,支持 aes-128-gcm, aes-192-gcm, aes-256-gcm
encryption-algorithm = "aes-256-gcm"
# 密钥文件路径
encryption-key-path = "/path/to/encryption.key"3. 密钥管理
- 密钥文件格式:与 TiKV 密钥文件格式相同
- 密钥轮换:支持密钥轮换
- 密钥备份:定期备份密钥文件
备份数据加密
1. BR 备份加密
使用 BR 工具备份数据时,可以启用加密:
bash
# 全量备份并加密
tiup br backup full --pd "http://127.0.0.1:2379" --storage "local:///path/to/backup" --encrypt --encrypt-key-file "/path/to/encrypt.key"
# 恢复加密备份
tiup br restore full --pd "http://127.0.0.1:2379" --storage "local:///path/to/backup" --encrypt --encrypt-key-file "/path/to/encrypt.key"2. 加密参数
- --encrypt:启用备份加密
- --encrypt-key-file:加密密钥文件路径
- --encrypt-algorithm:加密算法,支持 AES-128-GCM、AES-192-GCM、AES-256-GCM
传输加密
1. TLS 配置
TiDB 支持使用 TLS 加密组件间的通信,包括:
- TiDB 与 PD 之间的通信
- TiDB 与 TiKV 之间的通信
- PD 节点之间的通信
- TiKV 节点之间的通信
2. 配置示例
TiDB TLS 配置
toml
# tidb.toml
[security]
# 启用 TLS
enable-tls = true
# 证书文件路径
ssl-cert = "/path/to/tidb.crt"
# 私钥文件路径
ssl-key = "/path/to/tidb.key"
# CA 证书文件路径
ssl-ca = "/path/to/ca.crt"PD TLS 配置
toml
# pd.toml
[security]
# 启用 TLS
enable-ssl = true
# 证书文件路径
ssl-cert-path = "/path/to/pd.crt"
# 私钥文件路径
ssl-key-path = "/path/to/pd.key"
# CA 证书文件路径
ssl-ca-path = "/path/to/ca.crt"TiKV TLS 配置
toml
# tikv.toml
[security]
# 启用 TLS
enable-ssl = true
# 证书文件路径
ssl-cert-path = "/path/to/tikv.crt"
# 私钥文件路径
ssl-key-path = "/path/to/tikv.key"
# CA 证书文件路径
ssl-ca-path = "/path/to/ca.crt"存储加密最佳实践
1. 密钥管理
- 安全存储密钥:将密钥文件存储在安全的位置,限制访问权限
- 定期轮换密钥:定期更换加密密钥,建议每 3-6 个月轮换一次
- 备份密钥:定期备份密钥文件,存储在安全的位置
- 使用硬件安全模块(HSM):考虑使用 HSM 存储和管理密钥,提高安全性
2. 加密配置
- 使用强加密算法:建议使用 AES-256-GCM 加密算法
- 启用所有加密选项:启用 TiKV、PD、备份数据等所有加密选项
- 配置合理的加密参数:根据性能需求和安全要求配置加密参数
3. 性能优化
- 使用 SSD 磁盘:加密会对性能产生一定影响,使用 SSD 磁盘可以减轻性能影响
- 调整加密线程池大小:根据 CPU 核心数调整加密线程池大小
- 监控加密性能:定期监控加密对性能的影响,根据实际情况调整配置
4. 合规要求
- GDPR 合规:存储加密可以帮助满足 GDPR 对数据保护的要求
- PCI DSS 合规:存储加密是 PCI DSS 合规的要求之一
- 等级保护合规:存储加密是等级保护合规的要求之一
存储加密监控和管理
1. 监控加密状态
bash
# 查看 TiKV 加密状态
tikv-ctl status --host="127.0.0.1:20160" | grep -i encrypt
# 查看 PD 加密状态
pd-ctl -u "http://127.0.0.1:2379" config show | grep -i encrypt2. 加密性能监控
- 监控 TiKV 加密性能:使用 Prometheus 监控
tikv_security_encrypt_seconds和tikv_security_decrypt_seconds指标 - 监控 PD 加密性能:使用 Prometheus 监控
pd_security_encrypt_seconds和pd_security_decrypt_seconds指标
3. 加密日志
- TiKV 加密日志:查看 TiKV 日志中的加密相关信息
- PD 加密日志:查看 PD 日志中的加密相关信息
常见问题(FAQ)
Q1: 存储加密会影响性能吗?
A1: 存储加密会对性能产生一定影响,主要表现为 CPU 使用率增加和延迟略有上升。使用 SSD 磁盘和合理的配置可以减轻性能影响。
Q2: 如何备份加密密钥?
A2: 定期将密钥文件复制到安全的位置,如离线存储设备或加密的云存储。建议使用加密方式存储备份的密钥文件。
Q3: 密钥丢失了怎么办?
A3: 如果密钥丢失,将无法解密数据,导致数据永久丢失。因此,务必定期备份密钥文件,并将备份存储在安全的位置。
Q4: 可以在现有集群上启用存储加密吗?
A4: 可以在现有集群上启用存储加密,但需要重启 TiKV 和 PD 节点。启用加密后,新写入的数据会被加密,旧数据需要通过 compaction 过程逐渐加密。
Q5: 如何进行密钥轮换?
A5: 使用 TiKV-CTL 或 PD-CTL 工具进行密钥轮换,轮换过程是在线的,不会影响集群可用性。
Q6: 存储加密支持哪些加密算法?
A6: 支持 AES-128-GCM、AES-192-GCM 和 AES-256-GCM 三种加密算法,建议使用 AES-256-GCM 算法。
