The problem is in all ACLs, not just the allowed ones.
Full log:
[2024-09-10T06:17:17,960][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Access delete doc: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,965][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Admin users: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,969][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Partial access: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,973][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Partial access add func: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,977][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Partial forbid user: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,980][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Elevated Users: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
[2024-09-10T06:17:17,984][ERROR][tech.beshu.ror.accesscontrol.blocks.Block] [server1] Basic Kibana: ldap_authentication rule matching got an error Rejected because the CircuitBreaker is in the HalfOpen state
monix.execution.exceptions.ExecutionRejectedException: Rejected because the CircuitBreaker is in the HalfOpen state
at monix.execution.exceptions.ExecutionRejectedException$.apply(ExecutionRejectedException.scala:40) ~[?:?]
at monix.catnap.CircuitBreaker.$anonfun$unsafeProtect$3(CircuitBreaker.scala:431) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at timeout @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testLdapBinding(UnboundidLdapConnectionPoolProvider.scala:227) ~[?:?]
at map @ tech.beshu.ror.utils.TaskOps$.andThen$extension(TaskOps.scala:30) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$getFromCacheOrRunAction$2(Cachable.scala:68) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.getFromCacheOrRunAction(Cachable.scala:67) ~[?:?]
at asyncBoundary @ tech.beshu.ror.accesscontrol.blocks.definitions.ldap.implementations.UnboundidLdapConnectionPoolProvider$.testBindingForAllHosts(UnboundidLdapConnectionPoolProvider.scala:171) ~[?:?]
at runSyncUnsafe @ tech.beshu.ror.buildinfo.BuildInfoReader$.$anonfun$create$1(BuildInfoReader.scala:35) ~[?:?]
at withPermit @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:60) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.$anonfun$call$1(Cachable.scala:59) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at map @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.semaphoreOf(Cachable.scala:86) ~[?:?]
at flatMap @ tech.beshu.ror.accesscontrol.utils.CacheableActionWithKeyMapping.call(Cachable.scala:58) ~[?:?]
Here is the ROR config:
access_control_rules:
- name: "kibana user"
auth_key: kibana:pass
kibana_access: unrestricted
- name: "Access delete doc"
users: ["user.delete"]
ldap_authentication:
name: "ldap"
actions: ["indices:data/write/delete"]
- name: "Admin users"
type: allow
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups: ["Admin"]
kibana_access: unrestricted
- name: "Partial access"
indices: ["*kibana*", "*:*-logs-aaa*", "*:*-logs-aab*", "*:*-logs-bbb*", "*:*logs-ccc*", ..., "*:*-logs-zzz*"]
kibana_access: rw
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups: ["partial"]
kibana_hide_apps: ["timelion", "readonlyrest_kbn", "Timelion", "Canvas", "Maps", "Logs", "Uptime", "Enterprise Search", "Machine Learning", "Metrics", "User Experience", "Dev Tools", "Integrations", "Fleet", "Osquery", "Stack Management", "Observability", "ROR Manage Kibana"]
- name: "Partial access add func"
indices: ["*kibana*", "*:*-logs-aaa*", "*:*-logs-aab*", "*:*-logs-bbb*", "*:*logs-ccc*", ..., "*:*-logs-zzz*"]
kibana_access: rw
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups_and: ["partial", "Elevated Users"]
kibana_hide_apps: ["readonlyrest_kbn", "Timelion", "Canvas", "Maps", "Home", "Logs", "Uptime", "Enterprise Search", "Machine Learning", "Metrics", "User Experience", "Management"]
- name: "Partial forbid user"
type: forbid
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups: ["partial"]
- name: "Elevated Users"
type: allow
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups: ["Elevated Users"]
kibana_access: rw
kibana_hide_apps: ["readonlyrest_kbn", "Timelion", "Canvas", "Maps", "Home", "Logs", "Uptime", "Enterprise Search", "Machine Learning", "Metrics", "User Experience", "Management"]
- name: "Basic Kibana"
type: allow
ldap_authentication:
name: "ldap"
ldap_authorization:
name: "ldap"
groups: ["ACL-APP-Kibana-Users"]
kibana_access: rw
kibana_hide_apps: ["timelion", "readonlyrest_kbn", "Timelion", "Canvas", "Maps", "Logs", "Uptime", "Enterprise Search", "Machine Learning", "Metrics", "User Experience", "Dev Tools", "Integrations", "Fleet", "Osquery", "Stack Management", "Observability", "ROR Manage Kibana"]
- name: "LOCALHOST-only access"
hosts: ["127.0.0.1"]
headers_and: ["~x-forwarded-for:*", "~X-Passed-Nginx:*"]
I found that the problem is reproduced even with a system account.
login: use.systems
has only one group: ACL-APP-Kibana-Users
There are no nested groups.
But there are successful logins under this user.
Chronology:
Successful authorization of another user (excludes problems with ldap or interference of other users)
error of user use.systems
error of another system user rcv.systems (it has 2 groups and no nested groups)
After that, there are no errors again.
There is no () in the group name.