I am likely making a glaring error in my configuration, but so far am failing to spot it. I am attempting to develop an ACL strategy for an existing Consul deployment, but am currently working with a small test configuration.
- I am using Consul 1.6.3 on Centos 7 hosts
- I have 5 agents running in the server role
- a handful of others just running as basic agents
- I have a couple of simple keys in the KV store
- ACLs have been enabled and at a basic node level look to be working fine
- I have created a couple of policies and tokens for the UI, which also appear to be working fine
I am now attempting to grant an agent on one node, access to the KV store (accessing a key containing a simple string value):
[user@computer ~]# consul kv get docker/test
Error querying Consul agent: Unexpected response code: 403
In the logs:
Feb 12 10:45:57 computer consul: 2020/02/12 10:45:57 [ERR] consul: "KVS.Get" RPC failed to server 192.168.10.22:8300: rpc error making call: rpc error making call: Permission denied
Feb 12 10:45:57 computer consul: 2020/02/12 10:45:57 [ERR] http: Request GET /v1/kv/docker/test, error: rpc error making call: rpc error making call: Permission denied from=127.0.0.1:32902
from the same logs:
Feb 12 09:54:19 computer consul: 2020/02/12 09:54:19 [INFO] serf: EventMemberUpdate: computer
Feb 12 09:54:20 computer consul: 2020/02/12 09:54:20 [INFO] agent: Synced node info
which I am taking to confirm that basic node ACLs are working OK otherwise the sync would fail?.
The agent is configured to use a token that has the following policy attached:
{
"node": {
"computer": {
"policy": "write"
}
},
"key": {
"docker/test": {
"policy": "read"
}
}
}
Attempting the same consul kv get ...
command from the host with the Global Management token set in CONSUL_HTTP_TOKEN works fine.
I have tried playing around with âkeyâ and âkey_prefixâ, have added the token to the acl.tokens.agent section of the config and restarted consul, tried using HCL versus JSON, tried splitting the key policy out into its own policy file and added to the token. So far, no change.
(I have changed the actual host name in the example above, but the actual value is correct, based on the agents name in the cluster)
What obvious mistake am I missing?