Multi-container service providing secrets management, identity/RBAC, and SOC2 audit logging for the Neuro-Network.
| Container | Image | Purpose |
|---|---|---|
hcvault |
hashicorp/vault:1.15 |
Encrypted secret storage, AppRole auth |
vault-db |
postgres:16-alpine |
IAM + audit log persistence |
vault-iam |
Custom (NeuroKit) | EntraID sync, identity resolution, RBAC |
vault-audit |
Custom (NeuroKit) | Audit event consumer and query API (coming soon) |
# Create the shared network (once, across all Neuro-Network services)
docker network create neuro-network
# Configure
cp .env.example .env
# Edit .env with real passwords
# Start
docker compose up -d
# Verify
curl http://localhost:8080/health# Initialize (save the unseal keys and root token!)
docker exec -it neuro-hcvault vault operator init
# Unseal (repeat 3x with different unseal keys)
docker exec -it neuro-hcvault vault operator unseal
# Authenticate
docker exec -it neuro-hcvault vault login <root-token>
# Enable KV v2 secrets engine
docker exec -it neuro-hcvault vault secrets enable -path=neuro-secrets kv-v2
# Enable AppRole auth
docker exec -it neuro-hcvault vault auth enable approle
# Store secrets (example: Anthropic API key)
docker exec -it neuro-hcvault vault kv put neuro-secrets/anthropic \
api_key="sk-ant-..." \
default_model="claude-sonnet-4-5-20250929"
# Store Wazuh credentials
docker exec -it neuro-hcvault vault kv put neuro-secrets/wazuh \
api_url="https://wazuh.internal:55000" \
api_user="wazuh-api" \
api_password="..."
# Apply policies and create AppRoles
docker exec -it neuro-hcvault vault policy write connector-wazuh /vault/policies/connector-wazuh.hcl
docker exec -it neuro-hcvault vault write auth/approle/role/connector-wazuh \
token_policies="connector-wazuh" token_ttl=1h token_max_ttl=4hAll endpoints (except /health) require a Bearer token.
Services authenticate via POST /api/v1/auth/service.
| Method | Path | Purpose |
|---|---|---|
| GET | /health |
Health check |
| POST | /api/v1/auth/service |
Service authentication → JWT |
| GET | /api/v1/identity/resolve?provider=slack&external_id=U123 |
Resolve external ID to identity |
| GET | /api/v1/identity/{user_id} |
Get user profile |
| GET | /api/v1/identity/{user_id}/roles |
Get user roles |
| POST | /api/v1/rbac/check |
Check permission |
| POST | /api/v1/admin/identity-mappings |
Create identity mapping |
| POST | /api/v1/admin/roles/assign |
Assign role to user |
| POST | /api/v1/admin/group-role-mappings |
Map EntraID group → role |
| POST | /api/v1/admin/service-accounts |
Create service account |
- NeuroKit:
git+https://github.com/billyFelton/NeuroKit.git@v0.2.0