chore: cerrar issue 0024c — security integration + docs
- Actualiza docs/security.md: nueva sección "Sistema de grupos centralizados" con estructura de los 3 YAML, acciones disponibles, campos deprecados - Actualiza .claude/CLAUDE.md: añade security/ en la estructura del proyecto - Mueve 0024 y 0024c a dev/issues/completed/ - Actualiza dev/issues/README.md: marca 0024, 0024a, 0024b, 0024c como completado Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -57,6 +57,7 @@ agents/runtime.go Agent{}: ensambla core + shell
|
|||||||
agents/<id>/ agent.go (reglas puras) + config.yaml + prompts/system.md
|
agents/<id>/ agent.go (reglas puras) + config.yaml + prompts/system.md
|
||||||
tools/ tool registry + tool implementations (subpackages)
|
tools/ tool registry + tool implementations (subpackages)
|
||||||
internal/config/ schema.go + loader.go
|
internal/config/ schema.go + loader.go
|
||||||
|
security/ grupos de usuarios/agentes + politicas de permisos (YAMLs)
|
||||||
cmd/launcher/ entrypoint principal (rulesRegistry)
|
cmd/launcher/ entrypoint principal (rulesRegistry)
|
||||||
cmd/agentctl/ CLI de gestion
|
cmd/agentctl/ CLI de gestion
|
||||||
crons/ catálogo de automatizaciones nombradas (schedule.yaml + prompts)
|
crons/ catálogo de automatizaciones nombradas (schedule.yaml + prompts)
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ afectados y notas de implementacion.
|
|||||||
| 22b | E2E: Auth fixtures y helpers | [0022b-e2e-auth-helpers.md](completed/0022b-e2e-auth-helpers.md) | completado |
|
| 22b | E2E: Auth fixtures y helpers | [0022b-e2e-auth-helpers.md](completed/0022b-e2e-auth-helpers.md) | completado |
|
||||||
| 22c | E2E: Tests de agentes + docs | [0022c-e2e-agent-tests.md](completed/0022c-e2e-agent-tests.md) | completado |
|
| 22c | E2E: Tests de agentes + docs | [0022c-e2e-agent-tests.md](completed/0022c-e2e-agent-tests.md) | completado |
|
||||||
| 23 | Seccion de tests en dashboard | [0023-dashboard-tests.md](completed/0023-dashboard-tests.md) | completado |
|
| 23 | Seccion de tests en dashboard | [0023-dashboard-tests.md](completed/0023-dashboard-tests.md) | completado |
|
||||||
| 24 | Grupos y permisos centralizados | [0024-centralized-security-groups.md](0024-centralized-security-groups.md) | pendiente |
|
| 24 | Grupos y permisos centralizados | [0024-centralized-security-groups.md](completed/0024-centralized-security-groups.md) | completado |
|
||||||
| 24a | Security types: pkg/security/ | [0024a-security-types.md](completed/0024a-security-types.md) | completado |
|
| 24a | Security types: pkg/security/ | [0024a-security-types.md](completed/0024a-security-types.md) | completado |
|
||||||
| 24b | Security loader: shell/security/ | [0024b-security-loader.md](completed/0024b-security-loader.md) | completado |
|
| 24b | Security loader: shell/security/ | [0024b-security-loader.md](completed/0024b-security-loader.md) | completado |
|
||||||
| 24c | Security integration + cleanup | [0024c-security-integration.md](0024c-security-integration.md) | pendiente |
|
| 24c | Security integration + cleanup | [0024c-security-integration.md](completed/0024c-security-integration.md) | completado |
|
||||||
| 25 | Catálogo cron + scaffolder | [0025-cron-scaffolder.md](completed/0025-cron-scaffolder.md) | completado |
|
| 25 | Catálogo cron + scaffolder | [0025-cron-scaffolder.md](completed/0025-cron-scaffolder.md) | completado |
|
||||||
|
|||||||
@@ -137,6 +137,85 @@ Esto evita que el subproceso `claude -p` tenga acceso de lectura/escritura al co
|
|||||||
|
|
||||||
Implementado en `shell/llm/claudecode.go` → `resolveWorkDir()`.
|
Implementado en `shell/llm/claudecode.go` → `resolveWorkDir()`.
|
||||||
|
|
||||||
|
## 7. Sistema de grupos centralizados (`security/`)
|
||||||
|
|
||||||
|
Control de acceso centralizado: quien puede hablar con que agentes, y que puede hacer.
|
||||||
|
Reemplaza los campos per-agente `security.roles` y `matrix.filters.allowed_users` (ahora deprecados).
|
||||||
|
|
||||||
|
### Estructura de archivos
|
||||||
|
|
||||||
|
```
|
||||||
|
security/
|
||||||
|
user-groups.yaml # grupos de usuarios Matrix
|
||||||
|
agent-groups.yaml # grupos de agentes
|
||||||
|
permissions.yaml # politicas: que grupo de usuarios tiene que acciones en que agentes
|
||||||
|
```
|
||||||
|
|
||||||
|
### user-groups.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
groups:
|
||||||
|
admins:
|
||||||
|
members: ["@admin:matrix-af2f3d.organic-machine.com"]
|
||||||
|
developers:
|
||||||
|
members: ["@dev1:homeserver.com", "@dev2:homeserver.com"]
|
||||||
|
everyone:
|
||||||
|
members: ["*"] # wildcard: todos los usuarios
|
||||||
|
```
|
||||||
|
|
||||||
|
### agent-groups.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
groups:
|
||||||
|
all:
|
||||||
|
agents: ["*"] # wildcard: todos los agentes
|
||||||
|
production:
|
||||||
|
agents: ["assistant-bot", "asistente-2"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### permissions.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
policies:
|
||||||
|
- agent_group: all # aplica a todos los agentes
|
||||||
|
permissions:
|
||||||
|
- user_group: admins
|
||||||
|
actions: ["*"] # admins pueden hacer todo
|
||||||
|
- user_group: everyone
|
||||||
|
actions: ["ask"] # todos pueden chatear
|
||||||
|
- agent_group: production # solo agentes de produccion
|
||||||
|
permissions:
|
||||||
|
- user_group: developers
|
||||||
|
actions: ["ask", "command:deploy", "tool:ssh_command"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Acciones disponibles
|
||||||
|
|
||||||
|
| Accion | Descripcion |
|
||||||
|
|--------|-------------|
|
||||||
|
| `*` | Todo permitido |
|
||||||
|
| `ask` | Puede chatear con el agente (mensajes normales) |
|
||||||
|
| `command:<name>` | Puede ejecutar el comando `!<name>` |
|
||||||
|
| `tool:<name>` | El LLM puede llamar la tool `<name>` para este usuario |
|
||||||
|
|
||||||
|
### Resolucion de ACL
|
||||||
|
|
||||||
|
Al arrancar, el launcher:
|
||||||
|
1. Carga todos los YAMLs con `shellsecurity.Load("security/")`
|
||||||
|
2. Para cada agente, llama `pksecurity.ResolveACL(agentID, policy)`
|
||||||
|
3. Inyecta la `acl.ACL` resultante en `agents.New()`
|
||||||
|
|
||||||
|
**Comportamiento cuando la politica esta vacia**: si `security/` no existe o no hay politicas que apliquen al agente, la ACL esta vacia y el acceso es abierto (sin restricciones). Preferible a denegar todo por defecto en produccion.
|
||||||
|
|
||||||
|
### Campos deprecados
|
||||||
|
|
||||||
|
Los siguientes campos en `config.yaml` del agente estan deprecated y no tienen efecto desde la activacion del sistema centralizado:
|
||||||
|
|
||||||
|
- `security.roles` — reemplazado por `security/permissions.yaml`
|
||||||
|
- `matrix.filters.allowed_users` — reemplazado por `security/user-groups.yaml`
|
||||||
|
|
||||||
|
Los campos siguen en el schema para compatibilidad con configs existentes y se eliminarán en un issue futuro.
|
||||||
|
|
||||||
## Activacion
|
## Activacion
|
||||||
|
|
||||||
Para activar todas las protecciones, añadir al `config.yaml` del agente:
|
Para activar todas las protecciones, añadir al `config.yaml` del agente:
|
||||||
|
|||||||
Reference in New Issue
Block a user