【问题标题】:Consul 0.8 ACL migration - how to migrateConsul 0.8 ACL迁移——如何迁移
【发布时间】:2017-01-31 21:44:27
【问题描述】:

TLTR 如何将0.8之前的ACL权限迁移到0.7.3?

当前设置 我目前正在运行启用 ACL 的 Consul 0.7.3 堆栈。

在 Consul 0.8 中,ACL 最终还将包括服务和节点,因此节点/服务(Consul)不再显示给匿名用户。这正是我所需要的。今天我尝试使用https://www.consul.io/docs/agent/options.html#acl_enforce_version_8启用新的ACL“pre 0.8”

这样做之后,我的节点无法再针对主节点进行身份验证(如果身份验证是根本问题的话)。

我在启用 gossip 的情况下运行 consul-network,我已经配置了 acl_master_token:

"{acl_master_token":"<token>}"

以及代理的令牌:

"{acl_token":"<token>}"

所有代理使用/配置的。

我有这些 ACL 默认值:

{
 "acl_datacenter": "stable",
 "acl_default_policy": "deny",
 "acl_down_policy": "deny"
}

我的 Consul 配置如下所示:

{
  "datacenter": "stable",
  "data_dir": "/consul/data",
  "ui": true,
  "dns_config": {
    "allow_stale": false
  },
  "log_level": "INFO",
  "node_name": "dwconsul",
  "client_addr" : "0.0.0.0",
  "server": true,
  "bootstrap": true,
  "acl_enforce_version_8": true
}

会发生什么 当我启动时,我根本看不到我的节点/服务使用我的令牌,节点/代理都无法在主服务器上注册,

问题 获得以下内容究竟需要什么:

  • 所有代理都可以看到所有节点和所有服务以及所有 KV
  • 匿名者什么都看不到,KV、服务或节点都看不到(这就是 0.8 所能做到的)

我查看了https://www.consul.io/docs/internals/acl.html“Consul 0.8 中的 ACL 更改”,但我无法理解它。我现在应该使用 https://www.consul.io/docs/agent/options.html#acl_agent_master_token 而不是 acl_token 吗?

感谢您的帮助。我想我不会是这条迁移路径和这种特殊兴趣的唯一人,很多人对此感兴趣。你帮助他们所有人:)

【问题讨论】:

    标签: acl consul


    【解决方案1】:

    看起来新的node 策略正在阻止节点正确注册。这应该可以解决问题:

    1. 在您的 Consul 服务器上为它们配置一个 acl_agent_token,该 acl_agent_token 具有可以写入任何节点的策略,例如:node "" { policy = "write" }

    2. 在您的 Consul 代理上,将它们配置为与服务器类似的配置以保持开放,或者您可以为它们提供具有更具体策略的令牌,仅允许它们写入某些允许的前缀。

    请注意,这被设置为acl_agent_token,用于内部注册操作。 acl_agent_master_token 用作紧急令牌,以在 Consul 服务器出现问题时使用 /v1/agent API,但它仅适用于 /v1/agent API。

    对于“所有代理都可以看到所有节点、所有服务和所有 KV”,您可以将节点读取权限添加到您通过 acl_token 提供给代理的任何令牌,因此您可以添加如下策略:

    node "" { policy = "read" }
    service "" { policy = "read" }
    key "" { policy = "read" }
    

    请注意,这允许任何有权访问代理客户端界面的人读取所有这些内容,因此您要小心绑定到的内容(通常只有环回)。或者根本不设置acl_token,让调用者在每个请求中传递一个令牌。

    【讨论】:

    • 非常感谢!代理人没有暴露,只使用外交官/consu观察者等本地工具,所以这是一个完美的匹配。我可以将这些规则以 json 格式放入 /consul/conf.d 文件夹吗?
    • 很遗憾,现在不行 - 你总是必须通过 /v1/acl API 来制作令牌。
    • 有没有办法跳过这个策略的创建,例如通过在客户端上使用acl_agent_token
    • 您必须至少使用该策略制作一个令牌,然后您才能在所有代理上设置相同的令牌。
    • 这样就解决了所有的问题,感谢您的努力!
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多