如何禁止用户通过Nomad UI清除作业?ACL策略配置无效求解
问题描述
我搭建了Nomad集群,团队20名成员共用UI查看生产作业状态,但存在用户通过UI删除关键作业的风险且无法管控。我希望禁止用户通过Nomad UI清除作业,已查阅HashiCorp官方ACL策略文档,并尝试了如下策略但未生效:
namespace "*" { policy = "write" capabilities = [ "list-jobs", "parse-job", "read-job", "submit-job", "dispatch-job", "read-logs", "read-fs", "alloc-exec", "alloc-lifecycle", "csi-write-volume", "csi-mount-volume", "list-scaling-policies", "read-scaling-policy", "read-job-scaling", "scale-job" ] } host_volume "*" { policy = "write" } agent { policy = "write" } node { policy = "write" } quota { policy = "write" } operator { policy = "write" }
我没找到专门用于禁止清除作业的权限,现在的需求是允许用户使用UI里的所有操作,唯独禁止停止作业后的清除功能,该怎么实现?
解决方案
要实现允许UI大部分操作但禁止清除作业的需求,核心是搞懂Nomad ACL的权限覆盖逻辑:
问题根源
你当前给namespace等资源设置了policy = "write",这个配置会直接覆盖后面的capabilities列表——write级别的权限默认包含了作业删除(delete-job),所以哪怕你没在capabilities里写这个权限,用户依然能执行清除操作。修正后的ACL策略
正确的做法是把基础policy设为"read",然后显式列出所有需要开放的capabilities。清除作业对应的权限是"delete-job",只要不把它加入列表,用户就无法执行该操作。修正后的策略如下:
namespace "*" { policy = "read" capabilities = [ "list-jobs", "parse-job", "read-job", "submit-job", "dispatch-job", "read-logs", "read-fs", "alloc-exec", "alloc-lifecycle", "csi-write-volume", "csi-mount-volume", "list-scaling-policies", "read-scaling-policy", "read-job-scaling", "scale-job" ] } host_volume "*" { policy = "read" } agent { policy = "read" } node { policy = "read" } quota { policy = "read" } operator { policy = "read" }
- 补充说明
- 如果确实需要某些资源的write权限(比如host_volume的修改操作),可以单独给该资源调整policy,但不要全局设置write,避免开放不必要的权限。
- 配置完后,先用
nomad acl policy validate命令检查策略语法是否正确,再绑定到用户token,最后通过UI测试清除作业的操作,确认被拦截即可。
内容的提问来源于stack exchange,提问作者Mohammad Humayun Khan
相关产品推荐
相关产品推荐

