如果主实例启用 CMEK,副本是否必须复用同一密钥?
解读
在国内金融、政企云项目中,“两地三中心”+“国密合规” 是硬性要求,CMEK(客户管理的加密密钥)常被写入招标文件。面试官抛出此题,核心想验证两点:
- 你是否理解 Cloud SQL “复制拓扑”与“密钥作用域” 的绑定关系;
- 你是否能把“合规”与“灾备”两条线同时讲清,而不是只背文档。
答“必须”或“不必”都过于单薄,需要给出场景、限制与风险。
知识点
- CMEK 作用域:密钥隶属于 Google Cloud KMS 项目级资源,但数据加密发生在 Cloud SQL 实例级;主实例与副本之间是物理字节复制,不是逻辑 SQL 回放。
- 只读副本(Read Replica):无论同区、跨区还是跨域,磁盘页直接拷贝,因此必须复用同一 CMEK;否则副本无法解密主实例写过来的页,复制线程会永久中断。
- 级联副本(Cascade Replica):如果 A→B→C,B 作为 A 的副本必须复用 A 的密钥;C 作为 B 的副本必须复用 B 的密钥,即整条链共享同一密钥。
- 外部副本(External Server Replica):若副本指向非 Cloud SQL 实例(如自建 VM),密钥可独立,因为走的是逻辑复制(pglogical 或 MySQL 异步 SQL),字节格式已解耦。
- 国内特殊限制:
- 跨境场景(如北京主→香港备)需先通过 GAAP 专线+密钥不出境审批,否则即使技术可行,网信办备案也会被驳回;
- 国密算法(SM4)目前 Cloud SQL 尚未原生支持,若强合规,只能改用 GCE 自管数据库+CMEK 国密版 KMS 过渡。
答案
标准答复:
在 Cloud SQL 原生复制体系内,只读副本必须复用主实例的同一 CMEK,否则磁盘页级复制无法解密,实例会处于持续崩溃恢复状态。该限制适用于同区、跨区及跨域副本,也适用于级联副本。
唯一例外是“外部服务器副本”,此时副本跑在 GCE 或本地 IDC,逻辑复制不共享存储,密钥可独立选择。
国内交付补充:若方案含跨境容灾,需提前完成密钥出境安全评估与专线备案,否则即使技术配置成功,仍会被监管叫停。
拓展思考
- 密钥轮换场景:主实例密钥轮换后,副本无需重建,但需保证 KMS 密钥版本仍在启用状态;若旧版本被计划性销毁,副本将瞬间失连,需通过**“按需回切主实例”+“临时禁用副本”** 方式应急。
- 多项目隔离:国内大型集团常把生产与灾备放在不同 Google Cloud 组织以符合审计,此时需使用 KMS Cross-Project Binding 把密钥共享给灾备项目;IAM 角色只需 cloudkms.cryptoKeyEncrypterDecrypter,但项目编号必须加入白名单,否则副本创建 API 会报
KMS_KEY_NOT_ACCESSIBLE。 - Terraform 模板写法:国内客户习惯一条命令拉起整套环境,需在
google_sql_database_instance资源里显式声明disk_encryption_configuration.kms_key_name,并保证该 key 与主实例完全同名同版本;若用count批量创建多地域副本,切忌使用each.key拼接不同密钥,否则计划阶段就会报错。