You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止用户通过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的权限覆盖逻辑:

  1. 问题根源
    你当前给namespace等资源设置了policy = "write",这个配置会直接覆盖后面的capabilities列表——write级别的权限默认包含了作业删除(delete-job),所以哪怕你没在capabilities里写这个权限,用户依然能执行清除操作。

  2. 修正后的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"
}
  1. 补充说明
  • 如果确实需要某些资源的write权限(比如host_volume的修改操作),可以单独给该资源调整policy,但不要全局设置write,避免开放不必要的权限。
  • 配置完后,先用nomad acl policy validate命令检查策略语法是否正确,再绑定到用户token,最后通过UI测试清除作业的操作,确认被拦截即可。

内容的提问来源于stack exchange,提问作者Mohammad Humayun Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:12