Short description (Docker Hub field, max 100 chars): On-premise LDAP/AD bridge for Cloud-IAM — outbound-only WebSocket to brokers, no inbound ports
On-premise bridge that connects an internal Active Directory or LDAP directory to a cloud-hosted Keycloak (Cloud-IAM) without opening any inbound port on the customer firewall.
Broker-1 ◄──WebSocket──┐
│
Broker-2 ◄──WebSocket──┼── Agent ──LDAP──► Active Directory / OpenLDAP
│
Broker-N ◄──WebSocket──┘
The agent opens one outbound WebSocket per configured broker (typically port 443) and executes LDAP operations (bind, search, sync) on behalf of the cloud-side Keycloak SPI. Each broker is a sidecar of a Keycloak node, so an HA Keycloak cluster of N nodes is paired with N broker connections from a single agent.
/actuator/health per-broker status, Prometheus metricsdocker run -d \
--name cloud-iam-agent \
-e AGENT_ID=agent-acme-01 \
-e BROKER_CONNECTIONS_0_URL=wss://acme.cloud-iam.com/connector/broker-1/v1/connect \
-e BROKER_CONNECTIONS_0_AUTH_TOKEN=$AGENT_TOKEN_1 \
-e BROKER_CONNECTIONS_1_URL=wss://acme.cloud-iam.com/connector/broker-2/v1/connect \
-e BROKER_CONNECTIONS_1_AUTH_TOKEN=$AGENT_TOKEN_2 \
-e AGENT_ENCRYPTION_SHARED_KEY=$SHARED_KEY \
-e LDAP_HOST=ad.acme.local \
-e LDAP_PORT=636 \
-e LDAP_USE_LDAPS=true \
-e LDAP_BIND_DN="CN=svc-cloudiam,OU=ServiceAccounts,DC=acme,DC=local" \
-e LDAP_BIND_PASSWORD=$LDAP_PWD \
-e LDAP_BASE_DN="DC=acme,DC=local" \
-e LDAP_USER_FILTER='(&(objectClass=user)(sAMAccountName={0}))' \
supportciam/cloud-iam-agent-ad:latest
| Variable | Description |
|---|---|
BROKER_CONNECTIONS_<n>_URL | WebSocket URL for broker <n> (0-based) |
BROKER_CONNECTIONS_<n>_AUTH_TOKEN | Optional bearer token for broker <n> |
AGENT_ENCRYPTION_SHARED_KEY | AES-256 base64 key (32 bytes) — must match every broker |
| Variable | Default | Description |
|---|---|---|
LDAP_HOST | localhost | LDAP server hostname |
LDAP_PORT | 636 | LDAP server port |
LDAP_USE_LDAPS | true | Enable LDAPS (TLS) |
LDAP_USE_STARTTLS | false | Enable StartTLS instead of LDAPS |
LDAP_BIND_DN | — | Admin bind DN |
LDAP_BIND_PASSWORD | — | Admin bind password |
LDAP_BASE_DN | — | Search base DN |
LDAP_USER_SEARCH_BASE | ou=Users | User search sub-tree |
LDAP_USER_FILTER | (&(objectClass=inetOrgPerson)(uid={0})) | User search filter |
LDAP_POOL_SIZE | 5 | Connection pool size |
LDAP_TRUST_ALL_CERTIFICATES | false | Trust self-signed certs (dev only) |
| Variable | Default | Description |
|---|---|---|
AGENT_ID | agent-01 | Unique agent identifier |
TENANT_ID | default | Tenant identifier |
The agent only needs outbound access:
No inbound ports need to be opened on the customer firewall.
GET /actuator/health — aggregated status with per-broker details (UP if at least one broker is connected)GET /actuator/prometheus — Prometheus metrics:
agent.broker.reconnects{broker=...} — reconnection counter per brokeragent.ldap.auth.duration / agent.ldap.auth.success / agent.ldap.auth.failure© Cloud-IAM — https://www.cloud-iam.com Support: [email protected]
Content type
Image
Digest
sha256:5ddd0ca65…
Size
166.7 MB
Last updated
5 days ago
docker pull supportciam/cloud-iam-agent-ad