Files
obsidian-sympozium/05-Bezpieczeństwo/Efemeryczny RBAC per-run.md
2026-03-25 00:05:57 +01:00

78 lines
2.5 KiB
Markdown

# Efemeryczny RBAC per-run
#sympozium #security #rbac
## Koncepcja
Odpowiednik **temporary IAM session credentials** w Kubernetes (patrz [[RBAC]] dla wyjaśnienia systemu). Credentials istnieją TYLKO przez czas trwania AgentRun.
## Lifecycle
```
AgentRun CREATED
Controller tworzy:
├── Role (namespace-scoped)
│ ├── ownerRef → AgentRun
│ └── rules: [z SkillPack.sidecar.rbac]
├── RoleBinding
│ ├── ownerRef → AgentRun
│ └── subject → ServiceAccount "sympozium-agent"
├── ClusterRole (cluster-scoped)
│ ├── labels: sympozium.ai/agentrun: <name>
│ └── rules: [z SkillPack.sidecar.clusterRBAC]
└── ClusterRoleBinding
├── labels: sympozium.ai/agentrun: <name>
└── subject → ServiceAccount "sympozium-agent"
[CREDENTIALS ACTIVE - sidecar can use them]
AgentRun COMPLETED
Controller czyści:
├── Namespace RBAC → auto via ownerReference (K8s GC)
└── Cluster RBAC → manual via label selector (controller)
[CREDENTIALS DELETED - no standing access]
```
## Dlaczego nie standing role?
### Problem standing god-role:
```
ServiceAccount z cluster-admin → ZAWSZE ma pełne uprawnienia
→ Compromised pod = pełny dostęp do klastra
→ Brak auditu "kto kiedy co robił"
```
### Ephemeral RBAC:
```
Run #1: Role [get pods] → exists for 30s → deleted
Run #2: Role [get deployments] → exists for 45s → deleted
→ Credentials istnieją minimum possible time
→ Każdy run ma TYLKO te uprawnienia które potrzebuje
→ Pełny audit trail (RBAC resources w etcd)
```
## Controller privilege
Controller sam potrzebuje `cluster-admin` bo:
- Tworzy dowolne Role/ClusterRole (definiowane w SkillPacks)
- K8s RBAC escalation prevention wymaga tego
- To jedyny komponent z takimi uprawnieniami
## Namespace vs Cluster scope
| Typ | Mechanizm cleanup | Scope |
|-----|-------------------|-------|
| Role + RoleBinding | ownerReference → AgentRun | Namespace |
| ClusterRole + ClusterRoleBinding | Label selector → controller cleanup | Cluster |
[[Namespace]]-scoped RBAC jest automatycznie garbage-collected przez K8s gdy AgentRun jest usunięty ([[ownerReference|ownerRef]] chain).
Cluster RBAC nie może mieć cross-namespace ownerRef (ograniczenie K8s - patrz [[ownerReference]]), więc [[Controller i Reconciler|controller]] czyści ręcznie po labelach.
---
Powiązane: [[Skill Sidecars i auto-RBAC]] | [[Model bezpieczeństwa Defence-in-Depth]] | [[SkillPack]]