Model bezpieczeństwa#
vCLU traktuje bezpieczeństwo MCP poważnie - AI ma dostęp tylko do tego, na co jawnie pozwolisz.
Warstwy ochrony#
graph TD
L1["1. Boty + Bearer Token<br/><i>kto może się połączyć</i>"]
L2["2. Profile (Access Control)<br/><i>co widzi i czym steruje</i>"]
L3["3. Lua readonly (expose)<br/><i>ograniczenia z kodu</i>"]
L4["4. Activity Log (audyt)<br/><i>co zrobił</i>"]
L1 --> L2 --> L3 --> L41. Uwierzytelnianie - Boty MCP#
Każdy klient AI to osobny bot z własnym kluczem API i zestawem profili dostępu.
Tworzenie bota#
W panelu vCLU > MCP > Bots > Add Bot:
- Podaj nazwę (np. “Claude Code”, “Home AI”)
- Przypisz profile dostępu (np.
full-access,sensors-only) - Klucz API wyświetla się jednorazowo - skopiuj go od razu
Jak działa klucz#
- 32 losowe bajty, prefiks
vclu_mcp_+ ciąg hex - W konfiguracji przechowywany jest tylko hash SHA-256 - sam klucz nie jest nigdzie zapisany
- Walidacja przez porównanie constant-time (ochrona przed timing attacks)
- Każdy bot ma własny klucz - możesz mieć wielu klientów AI z różnym dostępem
Rotacja klucza#
Regenerowanie klucza bota natychmiast unieważnia poprzedni. Nie trzeba restartować vCLU.
Bez klucza = brak dostępu#
Żądanie bez tokena: → 401 Unauthorized
Żądanie z złym tokenem: → 401 Unauthorized
MCP wyłączony: → 503 Service Unavailable2. Access Control - profile#
Każdy bot ma przypisane profile dostępu. Profil to nazwany zestaw reguł z poziomem domyślnym i nadpisaniami per-obiekt.
Trzy poziomy dostępu#
| Poziom | Widzi? | Steruje? | Opis |
|---|---|---|---|
| full | tak | tak | Pełny dostęp (domyślnie) |
| readonly | tak | nie | AI widzi stan, ale nie może sterować |
| hidden | nie | nie | Urządzenie niewidoczne dla AI |
Przykład konfiguracji#
# access_control.yaml
profiles:
full-access: # wbudowany
default: full
sensors-only:
default: hidden
objects:
CLU.TEMP: readonly
CLU.HUM: readonly
lights:
default: hidden
objects:
CLU.LED1: full
CLU.LED2: fullPrzypisywanie profili do botów#
// .vclu.json
{
"mcp": {
"bots": [
{
"name": "Claude Code",
"profiles": ["full-access"]
},
{
"name": "Home AI",
"profiles": ["sensors-only", "lights"]
}
]
}
}Bot “Claude Code” widzi wszystko. Bot “Home AI” widzi tylko czujniki (readonly) i światła (full). Reszta urządzeń jest ukryta.
Wiele profili = most permissive wins#
Gdy bot ma kilka profili, najwyższy poziom wygrywa (full > readonly > hidden):
| Obiekt | sensors-only | lights | Wynik dla “Home AI” |
|---|---|---|---|
CLU.TEMP | readonly | hidden | readonly |
CLU.LED1 | hidden | full | full |
CLU.LOCK | hidden | hidden | hidden |
Profile są wspólne z innymi integracjami#
Ten sam profil może być przypisany do MQTT, HomeKit i botów MCP. Zarządzasz profilami w panelu vCLU > Access Control > Profiles.
3. Lua readonly#
Jeśli urządzenie jest wyeksponowane z flagą readonly w kodzie Lua:
expose(obj, "switch", {name = "Czujnik", readonly = true})To MCP nigdy nie może go sterować - nawet jeśli Access Control ustawiony na full. Obie warstwy się sumują (bardziej restrykcyjna wygrywa).
| Lua expose | Access Control | Wynik MCP |
|---|---|---|
| readonly: false | full | steruje |
| readonly: false | readonly | tylko odczyt |
| readonly: true | full | tylko odczyt |
| readonly: true | readonly | tylko odczyt |
| - | hidden | ukryty |
4. Activity Log - audyt#
Każde wywołanie narzędzia MCP jest rejestrowane:
| Pole | Opis |
|---|---|
| Czas | Kiedy wykonano |
| Narzędzie | Które narzędzie (np. vclu_device_set) |
| Ścieżka | Na jakim urządzeniu |
| Status | OK / ERR |
| Latencja | Czas wykonania (ms) |
| IP | Adres klienta |
Logi widoczne w panelu MCP > Activity Log. Ostatnie 50 wywołań z auto-odświeżaniem co 10 sekund.
Dobre praktyki#
Zasada minimalnych uprawnień - twórz osobne profile z ograniczonym dostępem zamiast dawać botom
full-access. Zamki, alarmy i czujniki bezpieczeństwa powinny byćhidden, chyba że masz konkretny powód.
Przykładowa konfiguracja bezpieczeństwa#
profiles:
ai-lights:
default: hidden
objects:
CLU_SALON.DOU0001: full
CLU_KUCHNIA.DOU0001: full
ai-covers:
default: hidden
objects:
CLU_SALON.ROL0001: full
ai-sensors:
default: hidden
objects:
CLU_SALON.TEMP01: readonly
CLU_WEJSCIE.MOTION01: readonly// Bot "Home AI" - widzi światła, rolety i czujniki. Zamki ukryte.
{
"name": "Home AI",
"profiles": ["ai-lights", "ai-covers", "ai-sensors"]
}Następny krok#
Dashboard MCP - monitoring i zarządzanie serwerem MCP