我正在尝试设置一个consul支持的vault集群。我的领事集群工作得很好,但是当我设置我的vault领事代理时,我需要给代理令牌一个策略,以便在节点上有写访问权。
基本上,我希望我的vault领事代理应该能够注册名称仅以"vault-"开头的节点。
对于这个,我尝试了下面的策略
agent_prefix "" {
policy = "write"
}
node "vault-*" {
policy = "write"
}
node_prefix "" {
policy = "read"
}
service_prefix "" {
policy = "read"
}
session_prefix "" {
policy = "read"
}
在我的consul配置中,我给node_name=vault-0/1/2
我尝试在我的策略中使用通配符对特定节点名称进行写访问,并对所有节点名称进行读,我得到以下错误
agent:坐标更新被acl阻塞:accessorID=3db5e2e7-3264-50a9-c8f1-a5c955c5bec0
实际上,我希望我的代理应该能够用特定的名称注册它们的节点,仅用于标识它们。对于每个服务,将有具有特定策略的单独代理令牌。
Consul的ACL系统支持定义两种类型的规则;基于前缀的规则和精确匹配规则。每https://www.consul.io/docs/security/acl/acl-rules rule-specification,
当使用基于前缀的规则时,最具体的前缀匹配决定操作。这允许使用灵活的规则,例如允许对所有资源进行只读访问的空前缀,以及允许写访问或拒绝所有访问的特定前缀。精确匹配规则只适用于指定的精确的资源。
为与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+中,您可以通过使用节点标识进一步简化这一点,如果您想要锁定令牌的策略,以便它只能注册特定的名称(例如,vault-01
),则无需创建特定于节点的ACL策略。
$ consul acl token create -node-identity=vault-01:dc1