我们可以在节点或服务的领事政策中使用通配符吗
Posted
技术标签:
【中文标题】我们可以在节点或服务的领事政策中使用通配符吗【英文标题】:can we use wildcard in consul policy for node or service 【发布时间】:2021-08-23 14:40:45 【问题描述】:我正在尝试设置一个由领事支持的保险库集群。 我的领事集群工作正常,但是当我设置我的保险库领事代理时,我需要提供一个带有策略的代理令牌,以便在节点上拥有写访问权限。
基本上,我希望我的 vault consul 代理能够注册名称仅以“vault-”开头的节点。
为此,我尝试了以下政策
agent_prefix ""
policy = "write"
node "vault-*"
policy = "write"
node_prefix ""
policy = "read"
service_prefix ""
policy = "read"
session_prefix ""
policy = "read"
在我的领事配置中,我给出了 node_name=vault-0/1/2
我尝试在我的策略中使用通配符来对特定节点名称进行写入访问并为所有人读取,但出现以下错误
代理:被 ACL 阻止的坐标更新:accessorID=3db5e2e7-3264-50a9-c8f1-a5c955c5bec0
实际上,我希望我的代理应该能够使用特定名称注册他们的节点,只是为了识别它们。对于每项服务,都会有单独的代理令牌和特定的策略。
【问题讨论】:
【参考方案1】:Consul 的 ACL 系统支持定义两种类型的规则;基于前缀的规则和精确匹配规则。每https://www.consul.io/docs/security/acl/acl-rules#rule-specification,
当使用基于前缀的规则时,最具体的前缀匹配决定了操作。这允许灵活的规则,例如允许对所有资源进行只读访问的空前缀,以及一些允许写访问或拒绝所有访问的特定前缀。精确匹配规则仅适用于指定的 exact 资源。
为与 Vault 服务器位于同一位置的 Consul 代理创建令牌时,您可以使用以下策略。
## consul-agent-policy.hcl
# Allow the agent write access to agent APIs on nodes starting with the name 'vault-'.
agent_prefix "vault-"
policy = "write"
# Allow registering a node into the catalog if the name starts with 'vault-'
node_prefix "vault-"
policy = "write"
# Allow the node to resolve any service in the datacenter
service_prefix ""
policy = "read"
Consul 代理不需要node:read
或session:read
权限,因此我已从示例策略中删除了这些权限。
在 Consul 1.8.1+ 中,您可以通过使用 node identities 进一步简化此操作,如果您想锁定令牌的策略使其只能注册特定名称(例如, vault-01
)。
$ consul acl token create -node-identity=vault-01:dc1
【讨论】:
以上是关于我们可以在节点或服务的领事政策中使用通配符吗的主要内容,如果未能解决你的问题,请参考以下文章