自动化账号为什么必须独立
把自动化任务挂在某个人的账号下运行,短期最省事,长期会带来三个问题:人走了任务就断;任务的操作在审计里变成这个人的操作,无法归因;权限只能跟着人走,收不紧也放不宽。专用账号的价值在于它把「谁在操作」从人的身份里解耦出来,让权限可以按任务精确定义、让日志可以按系统归因、让凭据可以按周期独立轮换。
基本信息
| 适用对象 | 执行剧本、巡检、备份、发布等任务的自动化账号 |
|---|---|
| 典型类型 | 操作系统登录账号、作业平台账号、接口调用凭据 |
| 设计目标 | 可归因、可轮换、可停用、权限按任务最小化 |
| 登录限制 | 限定来源地址、限定密钥、禁止交互式登录 |
| 生命周期 | 随任务创建、随任务下线、与人员变动解耦 |
设计要点
- 一个任务域一个账号:按业务域或平台划分,避免一个超级账号承担所有任务
- 只给需要的权限:需要提权的按命令清单授权,不需要的不放开
- 禁止交互登录:账号只能被程序使用,减少被人工冒用的可能
- 限定登录来源:来自固定的执行节点或网段,异常位置直接被拒
- 凭据独立轮换:与人员账号分开管理,按周期更换且不影响人的登录
- 留出停用开关:一键停用后所有依赖任务立即失败并被监控发现,而不是悄悄停摆
落地检查
落地检查
ssh-keygen -lf /home/svcauto/.ssh/id_ed25519.pub # 核对密钥指纹与用途标记
cat /home/svcauto/.ssh/config # 客户端侧是否限定了目标与密钥
sudo -l -U svcauto # 提权范围是否只覆盖必要命令
sudo -l -U svcauto | grep -c NOPASSWD # 免密条目数量,越多越需要复核
awk '/svcauto/{print}' /etc/ssh/sshd_config # 服务端是否对该账号做了限制
getent passwd svcauto | cut -d: -f7 # 登录解释器是否为不可登录账号设计对照
| 维度 | 个人账号挂任务 | 专用账号 |
|---|---|---|
| 归因 | 记在人名下,无法区分人与程序 | 记在任务名下,来源清晰 |
| 人员变动 | 离职即任务中断 | 与人员无关,可持续运行 |
| 权限范围 | 跟人走,通常过大 | 按任务定义,可精确收敛 |
| 凭据轮换 | 与人共用,轮换互相牵制 | 独立轮换,影响面可控 |
| 停用方式 | 只能停任务无法停身份 | 可整体停用并立即显现 |
专用账号需要配套监控:账号被停用或被改权限后,任务会立即失败。把「任务连续多轮未成功」设为告警,可以避免自动化静默失效数周而无人察觉。
同一套执行环境承担多个业务域时,建议按域拆分账号而不是按脚本拆分。按脚本拆分会让账号数量迅速膨胀,反而难以维护与轮换。