You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Consul键值浏览器UI设置为只读模式?

实现Consul KV UI只读,强制使用git2consul修改配置的方案

这个需求非常合理——通过ACL权限控制把UI锁成只读,就能确保所有配置变更都走git2consul,保留完整的变更历史和备份。下面是一步步的具体实现方法:

1. 先启用Consul的ACL系统

Consul默认是没有权限控制的,所以第一步必须开启ACL,这是后续所有权限限制的基础。

  • 修改你的Consul配置文件(比如consul.hcl),添加ACL相关配置:
    acl = {
      enabled = true
      default_policy = "deny"  # 默认拒绝所有操作,确保权限最小化
      enable_token_persistence = true
    }
    
  • 重启Consul服务,然后初始化超级管理员的bootstrap token(这个token拥有最高权限,一定要妥善保存,别随便给人):
    consul acl bootstrap
    
    执行后会输出一个SecretID,把它记下来,后面所有的ACL操作都要用到这个token。

2. 创建只读权限的ACL策略

我们需要一个专门的策略,只允许读取KV数据,同时还要给UI足够的权限加载基础内容(比如服务列表、节点状态这些,不然UI会打不开)。

  • 创建一个名为kv-read-only.hcl的策略文件,内容如下:
    # 允许读取所有KV键值(如果只想限制特定前缀,可以把""改成你的配置前缀,比如"config/")
    key_prefix "" {
      policy = "read"
    }
    
    # UI需要的基础权限:读取服务、节点、会话信息
    service_prefix "" {
      policy = "read"
    }
    
    node_prefix "" {
      policy = "read"
    }
    
    session_prefix "" {
      policy = "read"
    }
    
    # 允许读取ACL相关的基础信息(确保UI能正常显示权限状态)
    acl = "read"
    
  • 用刚才的bootstrap token创建这个策略:
    consul acl policy create -name kv-read-only -rules @kv-read-only.hcl
    

3. 生成绑定只读策略的Token

现在需要创建一个专门的token,把刚才的只读策略绑定上去,这个token就是给UI用的:

consul acl token create -description "Consul UI只读专用Token" -policy-name kv-read-only

执行后得到的SecretID就是我们需要的只读token,记下来。

4. 配置UI默认使用只读Token

有两种方式让UI强制使用这个只读权限,推荐第一种,更彻底:

方式一:修改Consul配置文件(强制所有UI访问都是只读)

consul.hcl里添加UI配置,指定默认使用只读token:

ui_config = {
  enabled = true
  default_token = "这里填你刚才生成的只读token的SecretID"
}

重启Consul服务后,任何人打开UI都会自动用这个只读token登录,无法修改KV数据。

方式二:让用户手动输入只读Token(适合临时场景)

如果不想修改配置,也可以让用户打开UI后,在登录界面输入这个只读token,这样他们就只有只读权限。不过这种方式没法强制,还是第一种更稳妥。

5. 验证效果

打开Consul UI,尝试修改某个KV键值,应该会弹出“权限不足”的提示。而git2consul那边,只要配置了拥有写权限的token(这个token只给git2consul服务用,别给开发者),依然可以正常同步git仓库的配置到Consul,完美实现你的需求。

内容的提问来源于stack exchange,提问作者onkami

火山引擎 最新活动