Skip to content

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 encrypt

2. 加密性能监控

  • 监控 TiKV 加密性能:使用 Prometheus 监控 tikv_security_encrypt_secondstikv_security_decrypt_seconds 指标
  • 监控 PD 加密性能:使用 Prometheus 监控 pd_security_encrypt_secondspd_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 算法。