Skip to content

security: Qdrant has no API key auth, no resource limits, and a TCP-only healthcheck #162

@yasinBursali

Description

@yasinBursali

Summary

Three gaps in the Qdrant vector DB service configuration:

Issue 1 — No authentication (#17)

Qdrant exposes its HTTP API (port 6333) and gRPC API (port 6334) with no authentication. Any local process can read, write, or delete all user vector embeddings without credentials. Ports are bound to 127.0.0.1, limiting exposure to localhost, but auth should still be present for defence-in-depth.

Qdrant v1.x supports API key authentication via the QDRANT__SERVICE__API_KEY env var.

Issue 2 — No resource limits (#11)

The Qdrant container has no deploy.resources.limits. During RAG indexing, Qdrant can consume unbounded system RAM, potentially OOM-killing the Docker VM and corrupting vector data. Every other resource-intensive service in the stack has memory limits.

Issue 3 — TCP healthcheck instead of HTTP (#19)

The current healthcheck:

test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/6333'"]

This is a raw TCP port probe — it only confirms the port is open, not that Qdrant is healthy and serving. Qdrant provides GET /healthz which returns HTTP 200 only when ready.

Fix

Five files:

  1. extensions/services/qdrant/compose.yaml — add env var, limits, fix healthcheck
  2. .env.example — document QDRANT_API_KEY in Optional Security section
  3. .env.schema.json — register QDRANT_API_KEY (secret: true) for Linux validate-env.sh
  4. installers/phases/06-directories.sh — auto-generate key on Linux install
  5. installers/macos/lib/env-generator.sh — auto-generate key on macOS install

Note: No other service in the stack currently connects to Qdrant's HTTP API programmatically, so adding the API key requires no client-side changes. Open WebUI and n8n have optional user-configured Qdrant integrations — those are out of scope for the installer.

Note: Windows installer is not updated in this PR — Windows Qdrant auth is a follow-up.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions