41 Projektzugriffsrechte

Projektzugriffsrechte in OpenShift implementieren Namespace-basierte Autorisierungsgrenzen für Multi-Tenant-Ressourcenisolation und teamorientierte Zugriffskontrolle. Diese projektspezifischen Sicherheits-Frameworks ermöglichen granulare Berechtigungskontrolle innerhalb organisatorischer Strukturen und unterstützen kollaborative Entwicklungsworkflows mit definierten Sicherheitsgrenzen.

41.1 Grundlagen der Projekt-Sicherheit

OpenShift-Projekte erweitern Kubernetes-Namespaces um zusätzliche Sicherheitsrichtlinien, Ressourcenquoten und Zugriffskontrollmechanismen für erweiterte Multi-Tenancy. Diese Projekt-Abstraktion implementiert geschäftslogik-orientierte Sicherheitsgrenzen und erleichtert die Verwaltung komplexer Anwendungslandschaften.

Projekt-Mitgliedschaftsmodelle definieren Benutzer-zu-Projekt-Beziehungen mit rollenbasierter Berechtigungszuweisung für teamorientierte Zugriffskontrolle. Diese Mitgliedschaftskonzepte unterstützen die Abbildung von Organisationsstrukturen auf Plattform-Sicherheitsmodelle.

[Diagramm: Projekt-Zugriffsrechte-Architektur mit Rollen, Berechtigungen und Netzwerk-Policies]

41.1.1 Projekt-Sicherheitsmodell

OpenShift-Projekte bieten mehrere Sicherheitsebenen:

Namespace-Isolation: Jedes Projekt ist ein separater Namespace mit eigenen Ressourcen und Netzwerksegmentierung.

RBAC-Integration: Projektspezifische Rollen und Berechtigungen steuern, wer was innerhalb des Projekts tun kann.

Ressourcenquoten: Begrenzen CPU, Memory und Storage-Verbrauch pro Projekt.

Netzwerk-Policies: Kontrollieren die Kommunikation zwischen Projekten und externen Services.

Security Context Constraints: Definieren Sicherheitsrichtlinien für Container-Ausführung.

41.2 Projektrollen und Berechtigungen

OpenShift definiert standardmäßig drei Hauptrollen auf Projektebene, die unterschiedliche Verantwortungsbereiche und Berechtigungsstufen abdecken.

41.2.1 Standard-Projektrollen

Rolle Berechtigungen Zielgruppe Anwendungsfälle
admin Vollständige Projekt-Administration Projekt-Manager, Team-Leads Benutzer verwalten, Quotas einsehen, alle Ressourcen steuern
edit Ressourcen erstellen/ändern Entwickler, DevOps-Engineers Apps deployen, Services konfigurieren, Builds starten
view Nur-Lese-Zugriff Stakeholder, Support-Teams Monitoring, Debugging, Status-Überprüfung

41.2.2 Projekt-Admin-Rolle

Die Projekt-Admin-Rolle gewährt vollständige administrative Kontrolle innerhalb der Projektgrenzen, einschließlich Benutzerverwaltung und Ressourcenkonfiguration. Diese administrative Rolle ermöglicht umfassende Projekt-Governance ohne Cluster-Level-Zugriff.

Admin-Berechtigungen umfassen:

# Benutzer zu Projekt hinzufügen
oc policy add-role-to-user edit developer@company.com -n my-project

# Projekt-Quotas anzeigen (aber nicht ändern)
oc describe quota -n my-project

# Alle Ressourcen im Projekt verwalten
oc get all -n my-project

41.2.3 Projekt-Editor-Rolle

Die Projekt-Editor-Rolle ermöglicht Ressourcenerstellung, -änderung und -löschung innerhalb von Projekten ohne administrative Privilegien. Diese Entwicklerrolle unterstützt Anwendungsentwicklungs-Workflows ohne Sicherheitsrisiko.

Editor-Berechtigungen: - Pods, Services, Routes erstellen und verwalten - ConfigMaps und Secrets bearbeiten - Builds und Deployments starten - Logs anzeigen und Container debuggen - Keine Benutzer-Verwaltung oder RBAC-Änderungen

41.2.4 Projekt-Viewer-Rolle

Die Projekt-Viewer-Rolle bietet Nur-Lese-Zugriff auf Projekt-Ressourcen für Monitoring, Audit und Troubleshooting-Zwecke. Diese Beobachterrolle unterstützt Compliance-Monitoring ohne Änderungsmöglichkeiten.

41.2.5 Custom Project Roles

Custom-Projektrollen ermöglichen organisationsspezifische Rollendefinitionen mit maßgeschneiderten Berechtigungssets für einzigartige Projektanforderungen:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: production
  name: database-manager
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "create", "update"]
  resourceNames: ["db-credentials"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["get", "list", "update", "patch"]

41.3 Benutzer- und Gruppenzuweisungen

OpenShift unterstützt verschiedene Muster für die Zuweisung von Projektberechtigungen an Benutzer und Gruppen.

41.3.1 Direkte Benutzerzuweisung

Direkte Benutzerzuweisung ermöglicht individuelle Benutzerberechtigungsgewährung für spezifische Projektzugriffsanforderungen. Diese direkte Zuweisung bietet granulare Kontrolle für außergewöhnliche Zugriffsfälle.

# Einzelnen Benutzer als Admin hinzufügen
oc policy add-role-to-user admin alice@company.com -n my-project

# Mehrere Rollen gleichzeitig zuweisen
oc policy add-role-to-user edit developer1@company.com -n my-project
oc policy add-role-to-user view developer1@company.com -n shared-monitoring

41.3.2 Gruppenbasierte Zuweisungen

Gruppenbasierte Zuweisungen implementieren kollektive Berechtigungsverwaltung durch LDAP-Gruppen oder OpenShift-Gruppen für skalierbare Benutzerverwaltung. Diese Gruppenzuweisungen reduzieren den administrativen Aufwand für große Teams.

# Gruppe zu Projekt hinzufügen
oc policy add-role-to-group edit developers -n my-project

# LDAP-Gruppe verwenden
oc policy add-role-to-group admin "CN=Project Admins,OU=Groups,DC=company,DC=com" -n my-project

41.3.3 Service-Account-Projektzugriff

Service-Account-Projektzugriff gewährt automatisierten Systemen und CI/CD-Pipelines notwendige Projektberechtigungen für DevOps-Workflow-Integration:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cicd-binding
  namespace: production
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: cicd-tools
roleRef:
  kind: Role
  name: deployment-manager
  apiGroup: rbac.authorization.k8s.io

41.3.4 Temporäre Zugriffe

Temporäre Zugriffe implementieren zeitlich begrenzte Projektberechtigungen für Auftragnehmer-Zugriff oder Notfallreaktionsszenarien. Diese temporären Berechtigungen unterstützen flexibles Zugriffs-Management.

41.4 Ressourcenbasierte Zugriffskontrolle

OpenShift ermöglicht granulare Kontrolle über den Zugriff auf spezifische Ressourcentypen und -instanzen innerhalb von Projekten.

41.4.1 Ressourcentyp-Berechtigungen

Ressourcentyp-Berechtigungen definieren granulare Zugriffskontrolle für verschiedene Kubernetes-Ressourcentypen innerhalb von Projekten:

# Beispiel: Nur Secrets-Verwaltung erlauben
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-project
  name: secrets-manager
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["get", "list"]

41.4.2 Ressourceninstanz-Berechtigungen

Ressourceninstanz-Berechtigungen implementieren individuelle Ressourcenzugriffskontrolle für spezifische Anwendungskomponenten oder sensible Ressourcen:

# Zugriff nur auf spezifische Secrets
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "update"]
  resourceNames: ["app-database-credentials", "app-api-keys"]

41.4.3 Label-basierte Zugriffskontrolle

Label-basierte Zugriffskontrolle nutzt Ressourcen-Labels für dynamische Berechtigungszuweisung basierend auf Ressourcenmerkmalen:

# Labels für Zugriffskontrolle setzen
oc label secret database-credentials access-level=restricted -n my-project

# Role für label-basierte Berechtigung
oc create role restricted-secrets --verb=get,list \
  --resource=secrets --resource-name='*' -n my-project

41.5 Cross-Projekt-Zugriff und Zusammenarbeit

Moderne Anwendungsarchitekturen erfordern oft kontrollierte Kommunikation und Ressourcenfreigabe zwischen verschiedenen Projekten.

41.5.1 Cross-Projekt-Service-Zugriff

Cross-Projekt-Service-Zugriff ermöglicht kontrollierte Service-Kommunikation zwischen Projekten für Mikroservice-Architektur-Unterstützung:

# Network Policy für Cross-Projekt-Zugriff
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-frontend
  namespace: backend-services
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: frontend-project

41.5.2 Geteilte Ressourcen

Geteilte Ressourcen implementieren Ressourcenfreigabe-Mechanismen zwischen Projekten für gemeinsame Infrastrukturnutzung:

# Service Account für shared Services erstellen
oc create sa monitoring-collector -n shared-services

# Cross-Projekt-Berechtigung für Monitoring
oc policy add-role-to-user view system:serviceaccount:shared-services:monitoring-collector -n production
oc policy add-role-to-user view system:serviceaccount:shared-services:monitoring-collector -n development

41.5.3 Kollaborative Projektmodelle

Kollaborative Projektmodelle definieren Multi-Projekt-Workflows für komplexe Anwendungsbereitstellungen über mehrere Projekte:

Pipeline-Projekt-Struktur: - Development-Projekt: Entwicklung und erste Tests - Testing-Projekt: Integrationstest und QA - Staging-Projekt: Pre-Production-Validation - Production-Projekt: Live-Anwendung

41.6 Netzwerk-Policy-Integration

OpenShift-Projekte unterstützen granulare Netzwerksicherheitsrichtlinien für erweiterte Isolation und kontrollierte Kommunikation.

41.6.1 Projekt-Netzwerk-Isolation

Projekt-Netzwerk-Isolation implementiert Netzwerksegmentierung zwischen Projekten für erweiterte Sicherheitsgrenzen:

# Standard-Isolation: Alle eingehenden Verbindungen blockieren
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress

41.6.2 Ingress-Traffic-Kontrolle

Ingress-Traffic-Kontrolle definiert erlaubte externe Traffic-Muster für Projekt-Ressourcen:

# Nur HTTP/HTTPS-Traffic von Load Balancer erlauben
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-traffic
  namespace: web-frontend
spec:
  podSelector:
    matchLabels:
      app: web-app
  policyTypes:
  - Ingress
  ingress:
  - from: []
    ports:
    - protocol: TCP
      port: 8080
    - protocol: TCP
      port: 8443

41.6.3 Egress-Traffic-Beschränkungen

Egress-Traffic-Beschränkungen begrenzen ausgehende Netzwerkkommunikation von Projekt-Ressourcen für Daten-Exfiltrations-Prävention:

# Nur DNS und spezifische Services erlauben
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-egress
  namespace: secure-app
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to: []
    ports:
    - protocol: UDP
      port: 53  # DNS
  - to:
    - namespaceSelector:
        matchLabels:
          name: database-services

41.7 Ressourcenquoten und Limitverwaltung

Projektzugriffsrechte umfassen auch die Kontrolle über Ressourcenverbrauch und -limits innerhalb von Projekten.

41.7.1 Compute-Ressourcenquoten

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: development
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 8Gi
    limits.cpu: "8"
    limits.memory: 16Gi
    persistentvolumeclaims: "5"

41.7.2 Storage-Quotas

Storage-Quotas beschränken Persistent-Storage-Verbrauch für Kostenkontrolle und Ressourcenmanagement:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: storage-quota
  namespace: production
spec:
  hard:
    requests.storage: 100Gi
    gold.storageclass.storage.k8s.io/requests.storage: 50Gi
    standard.storageclass.storage.k8s.io/requests.storage: 50Gi

41.7.3 Objekt-Anzahl-Quotas

Objekt-Anzahl-Quotas begrenzen Kubernetes-Objekterstellung für API-Server-Schutz:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-quota
  namespace: development
spec:
  hard:
    count/pods: "10"
    count/services: "5"
    count/routes.route.openshift.io: "3"
    count/secrets: "20"

41.8 Sicherheitsrichtlinien-Durchsetzung

Projektzugriffsrechte integrieren verschiedene Sicherheitsrichtlinien für umfassenden Schutz auf Projektebene.

41.8.1 Security Context Constraints auf Projektebene

Security Context Constraints auf Projektebene definieren Container-Sicherheitsrichtlinien für projektspezifische Sicherheitsanforderungen:

# Custom SCC für Projekt erstellen
oc create -f - <<EOF
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: restricted-project-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowPrivilegedContainer: false
runAsUser:
  type: MustRunAsNonRoot
seLinuxContext:
  type: MustRunAs
EOF

# SCC an Service Account binden
oc adm policy add-scc-to-user restricted-project-scc \
  system:serviceaccount:my-project:default

41.8.2 Image-Sicherheitsrichtlinien

Image-Sicherheitsrichtlinien definieren erlaubte Container-Images und Registry-Zugriff für Projektbereitstellungen:

apiVersion: config.openshift.io/v1
kind: Image
metadata:
  name: cluster
spec:
  allowedRegistriesForImport:
  - domainName: registry.company.com
  - domainName: quay.io
    insecure: false

41.9 Monitoring und Audit-Integration

Projektzugriffsrechte umfassen umfassende Monitoring- und Audit-Funktionen für Sicherheitsüberwachung und Compliance.

41.9.1 Projekt-Aktivitäts-Monitoring

# Projekt-spezifische Events anzeigen
oc get events --sort-by='.lastTimestamp' -n my-project

# Benutzeraktivitäten in Audit-Logs
oc adm node-logs --role=master --path=audit/audit.log | \
grep "my-project" | grep "user.*alice"

41.9.2 Zugriffsmuster-Analyse

Zugriffsmuster-Analyse identifiziert ungewöhnliche Zugriffsmuster für Sicherheits-Anomalie-Erkennung:

Wichtige Metriken für Monitoring: - Fehlgeschlagene Autorisierungsversuche pro Benutzer - Ungewöhnliche API-Zugriffsmuster - Ressourcenerstellung außerhalb der Geschäftszeiten - Cross-Projekt-Zugriffe von unerwarteten Sources

41.9.3 Compliance-Berichte

Automatisierte Compliance-Berichte für Projektzugriff:

# Alle Benutzer mit Admin-Rechten auflisten
oc get rolebinding -o wide -n my-project | grep admin

# Service Account Berechtigungen überprüfen
oc describe rolebinding,clusterrolebinding --all-namespaces | \
grep -A 5 -B 5 "system:serviceaccount:my-project"

41.10 Troubleshooting von Projektzugriffsrechten

41.10.1 Häufige Zugriffsprobleme

Problem Symptom Ursache Lösung
“Forbidden” beim Projekt-Zugriff HTTP 403 Error Keine Projekt-Berechtigung RoleBinding für Benutzer erstellen
Ressourcen nicht sichtbar Leere Liste bei oc get View-Berechtigung fehlt View-Rolle zuweisen
Cross-Projekt-Zugriff verweigert Service nicht erreichbar Network Policy blockiert Network Policy anpassen
Service Account kann nicht deployen Pod-Creation fehlschlägt SCC-Berechtigung fehlt Service Account zu SCC hinzufügen

41.10.2 Zugriffs-Debugging

# Effektive Berechtigungen eines Benutzers prüfen
oc auth can-i --list --as=alice@company.com -n my-project

# Spezifische Berechtigung testen
oc auth can-i create pods --as=alice@company.com -n my-project

# RoleBindings für Projekt anzeigen
oc describe rolebinding -n my-project

# Network Policies prüfen
oc get networkpolicy -n my-project -o yaml

41.10.3 Automatisierte Zugriffs-Bereinigung

Automatisierte Zugriffs-Bereinigung implementiert periodische Zugriffs-Reviews und Entfernung ungenutzter Berechtigungen:

#!/bin/bash
# Skript für regelmäßige Berechtigung-Reviews

# Finde Benutzer ohne Login in letzten 90 Tagen
for project in $(oc get projects -o name | cut -d/ -f2); do
    echo "Reviewing project: $project"
    oc get rolebinding -n $project -o custom-columns=NAME:.metadata.name,USERS:.subjects[*].name --no-headers | \
    while read binding users; do
        echo "  Binding: $binding, Users: $users"
        # Hier würde Logik für Last-Login-Check folgen
    done
done

41.11 Best Practices für Projektzugriffsrechte

Prinzip der minimalen Berechtigungen: Gewähren Sie nur die minimal notwendigen Berechtigungen für die jeweilige Aufgabe. Beginnen Sie mit der View-Rolle und erweitern Sie bei Bedarf.

Gruppenbasierte Verwaltung: Verwenden Sie LDAP- oder OpenShift-Gruppen für Rollenzuweisungen anstelle direkter Benutzerzuweisungen. Dies vereinfacht die Verwaltung und erhöht die Konsistenz.

Regelmäßige Access-Reviews: Führen Sie vierteljährliche Reviews aller Projektzugriffsrechte durch, um ungenutzte oder übermäßige Berechtigungen zu identifizieren.

Network Policy Standards: Implementieren Sie standardmäßig restriktive Network Policies und öffnen Sie nur explizit benötigte Kommunikationswege.

Service Account Hygiene: Erstellen Sie spezifische Service Accounts für verschiedene Anwendungen und Automatisierungen anstelle der Verwendung des default Service Account.

Dokumentation und Monitoring: Dokumentieren Sie alle Custom Roles und überwachen Sie deren Nutzung für kontinuierliche Optimierung der Sicherheitsrichtlinien.