0

我正在尝试设置一个领事支持的保险库集群。我的领事集群工作正常,但是当我设置保险库领事代理时,我需要提供具有策略的代理令牌以在节点上具有写访问权限。

基本上,我希望我的保险库领事代理应该能够注册名称仅以“保险库-”开头的节点。

为此,我尝试了以下政策

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

实际上,我希望我的代理应该能够使用特定名称注册他们的节点,只是为了识别它们。对于每项服务,都会有具有特定策略的单独代理令牌。

4

1 回答 1

0

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"
}

您不应该需要领事代理node:readsession:read特权,因此我已从示例策略中删除了这些。

在 Consul 1.8.1+ 中,您可以通过使用节点身份来进一步简化这一点,如果您想锁定令牌的策略以便它只能注册特定名称(例如,),则无需创建特定于节点的 ACL 策略vault-01

$ consul acl token create -node-identity=vault-01:dc1
于 2021-08-26T21:59:52.323 回答