外观
开发/测试/生产环境隔离通用原则
难度与前置
难度:架构
前置:经历过「开发误连生产」或「测试任务打满生产队列」。
读完能做什么:建立可迁移的环境隔离框架(身份、网络、数据、计算、发布),用检查清单验收,不绑定单一云控制台。
适用场景
- 建设或多云迁移数据平台,要定环境模型
- 开发/测试误写生产表、误读敏感数据
- 测试作业抢占生产配额导致 SLA 失败
- 审计要求:生产变更可追溯、职责分离
不适用:
- 某一家云的点击级「怎么开 VPC」教程
- 未公开的公司账号体系与命名细节
- 纯本地单机学习环境(可简化,但仍建议分目录/分库)
真实场景(一条)
开发同学用个人账号连到生产 JDBC,试跑 DELETE 条件写错,影响真实用户标签。复盘:无网络隔离、无生产只读代理、无变更门禁。治理:prod 与非 prod 分账号与网络;开发默认连脱敏抽样库;生产 DDL/DML 走工单 + 调度身份;测试队列配额独立。同类事故清零,发版仍保持日频。
怎么做(步骤清单)
1. 环境定义(最少三套)
| 环境 | 目的 | 数据 | 变更 |
|---|---|---|---|
| dev | 个人/小队开发 | 抽样/伪造 | 自助 |
| test/staging | 集成与预发 | 近生产脱敏或子集 | 受控 |
| prod | 真实业务 | 真实 | 门禁 + 审计 |
禁止:「一套集群靠库名前缀区分」当唯一隔离(可作补充,不可作唯一)。
2. 身份与权限隔离
text
原则:
- 人:dev/test 身份默认无 prod 写权限
- 机:生产作业用独立服务账号,人不可共用密码登录乱写
- 权限:最小特权;临时提权有时效与工单text
检查:
- 开发个人账号对 prod 表:无 DROP/INSERT(必要只读另开只读角色)
- 生产调度 ACL 与人类账号分离3. 网络与连通性
- prod 元数据库 / JDBC / SSH 不在开发默认路由
- 通过受控代理或跳板;操作留审计
- 测试集群打不满生产消息队列(配额/独立集群)
bash
# 示意:从开发机应失败或需额外认证
# nc -vz prod-hive-metastore 9083
echo "expect: timed out or auth required from dev laptop"4. 数据隔离与脱敏
| 策略 | 说明 |
|---|---|
| 抽样 | 按用户/地域哈希抽样到 dev |
| 脱敏 | 手机号/证件等字段脱敏 |
| 同步窗口 | 定期刷新 test,而非直连 prod 大查询 |
| 禁止 | 开发机拉全量生产明细长期落地 |
与质量、安全交叉:敏感字段分类分级进元数据;仓侧细则见 访问与脱敏。
5. 计算与调度隔离
text
队列/项目:
- prod_queue / test_queue 分配额
- 同一调度系统也可用「租户+环境」强隔离
- 测试任务默认超时与并发上限更严参见成本治理中的配额思想:成本治理。
6. 配置与密钥
text
- 环境配置分文件:application-dev.yml / prod.yml
- 密钥进密钥管理,不进 Git
- 启动参数显式 env=,禁止默认连 prod
- 颜色/提示:生产操作终端强提示bash
# 作业启动自检示意
if [ "$ENV" = "prod" ] && [ "$USER_IS_HUMAN" = "1" ]; then
echo "refuse: human ad-hoc on prod"
exit 1
fi7. 发布门禁
- dev 自测 → test 集成(含 grain / volume 等 DQ)
- 评审 + 变更窗口
- 生产发布用制品(镜像/版本号),禁止「生产上改 SQL 热补」成习惯
- 回滚路径明确(见补数/重跑相关文,不在此展开删数)
8. 落地检查清单(90 天可分期)
text
D0–30:分账号与 prod 写权限回收;队列分配额
D31–60:网络隔离 + 脱敏抽样库;密钥脱 Git
D61–90:发布门禁与审计报表;演练「误配 env」应失败常见坑(至少牢记这些)
库名
xxx_dev当唯一隔离
凭证仍通 prod,总有人连错。生产只读对开发全面放开
大查询照样打爆生产;只读也要配额与脱敏。测试打生产 Kafka / 队列
污染消费组与打满磁盘。密钥进仓库 + 多环境共用
泄漏影响面跨环境。紧急时刻关掉所有门禁且不恢复
「临时」变永久。环境不一致导致「test 过了 prod 挂」
staging 应尽量齐配版本与权限模型,而非完全两套现实。
如何验收(可量化)
- [ ] 开发个人账号对 prod 无写权限(抽测)
- [ ] 从默认开发网络无法直连 prod 元数据/敏感库(或需额外认证)
- [ ] test 与 prod 计算配额分离,测试打满不影响 prod SLA
- [ ] 生产发布有制品版本与审计;密钥不在 Git
- [ ] 演练:错误
ENV=prod的人工作业被拒绝 - [ ] 半年内无「开发误写生产」P0(或显著下降)
bash
echo "check,result"
# human_acl_prod_write,DENY
# dev_network_to_prod_metastore,BLOCKED
# test_queue_quota_separate,PASS
# secrets_in_git_scan,PASSsql
-- 审计示意:生产写操作须来自服务账号
SELECT user_name, COUNT(*) AS write_ops
FROM audit_sql_events
WHERE env = 'prod' AND event_day = '${biz_date}'
AND statement_type IN ('INSERT','UPDATE','DELETE','DROP')
GROUP BY user_name
ORDER BY write_ops DESC;相关面试题
占位:与题库小程序对齐后补链接(建议关联:环境隔离、最小权限、发布门禁、脱敏抽样)。
改写说明:结构与判断标准参考 Wood 原创数仓/面试文,已改写成可执行清单;仅通用原则,无厂商绑定与未公开公司细节。