Skip to content

开发/测试/生产环境隔离通用原则 ​

难度与前置

难度:架构
前置:经历过「开发误连生产」或「测试任务打满生产队列」。
读完能做什么:建立可迁移的环境隔离框架(身份、网络、数据、计算、发布),用检查清单验收,不绑定单一云控制台。

适用场景 ​

  • 建设或多云迁移数据平台,要定环境模型
  • 开发/测试误写生产表、误读敏感数据
  • 测试作业抢占生产配额导致 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
fi

7. 发布门禁 ​

  1. dev 自测 → test 集成(含 grain / volume 等 DQ)
  2. 评审 + 变更窗口
  3. 生产发布用制品(镜像/版本号),禁止「生产上改 SQL 热补」成习惯
  4. 回滚路径明确(见补数/重跑相关文,不在此展开删数)

8. 落地检查清单(90 天可分期) ​

text
D0–30:分账号与 prod 写权限回收;队列分配额
D31–60:网络隔离 + 脱敏抽样库;密钥脱 Git
D61–90:发布门禁与审计报表;演练「误配 env」应失败

常见坑(至少牢记这些) ​

  1. 库名 xxx_dev 当唯一隔离
    凭证仍通 prod,总有人连错。

  2. 生产只读对开发全面放开
    大查询照样打爆生产;只读也要配额与脱敏。

  3. 测试打生产 Kafka / 队列
    污染消费组与打满磁盘。

  4. 密钥进仓库 + 多环境共用
    泄漏影响面跨环境。

  5. 紧急时刻关掉所有门禁且不恢复
    「临时」变永久。

  6. 环境不一致导致「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,PASS
sql
-- 审计示意:生产写操作须来自服务账号
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 原创数仓/面试文,已改写成可执行清单;仅通用原则,无厂商绑定与未公开公司细节。