Redis ACL-Kategorien und Command-Restriktionen praktisch nutzen
AI generated
SET
TTL
Redis / Security & Betrieb
ACL-Kategorien und Command-Restriktionen in Redis
Vordefinierte Kategorien als Baustein für ein praktisches Least-Privilege-Berechtigungsmodell

Seit Redis 6 reicht ein einzelnes Passwort für den gesamten Server nicht mehr als einziges Sicherheitsmodell aus. Das ACL-System erlaubt es, für jeden Anwendungsdienst einen eigenen Benutzer mit exakt den Befehlen und Schlüsselmustern anzulegen, die dieser Dienst wirklich braucht. Vordefinierte Command-Kategorien wie @read, @write, @admin oder @dangerous machen dieses Least-Privilege-Modell praktisch handhabbar, statt jeden einzelnen der mehreren hundert Redis-Befehle manuell freizugeben oder zu sperren. Dieser Artikel zeigt, wie sich diese Kategorien sinnvoll kombinieren lassen, wie gefährliche Befehle wie FLUSHALL oder KEYS in Produktionsumgebungen kontrolliert werden und wie ein realistisches Multi-Service-Setup für einen Magento-Shop aussieht.

10 Min. Lesezeit ACL-Kategorien Least Privilege

1. Warum ein einzelnes Passwort für moderne Setups nicht mehr reicht

Vor Redis 6 kannte der Server im Wesentlichen ein einziges Authentifizierungsgeheimnis über requirepass, das entweder vollständigen Zugriff gewährte oder gar keinen. Für eine einzelne Anwendung mit einer einzigen Verbindungsquelle war das ausreichend, doch moderne Architekturen bestehen selten aus nur einem Dienst: Ein Magento-Shop nutzt Redis parallel für den Full-Page-Cache, für Sessions, für den Objekt-Cache und häufig auch für Warteschlangen oder Indexer-Locks.

Teilen sich all diese Dienste dasselbe Passwort, kann ein kompromittierter Cache-Client theoretisch auch Sessions anderer Nutzer auslesen oder, im schlimmsten Fall, den gesamten Datenbestand mit FLUSHALL löschen. Das Access Control List System aus Redis 6 löst dieses Problem, indem es erlaubt, für jeden Dienst einen eigenen Benutzer mit exakt zugeschnittenen Rechten anzulegen, statt ein einziges Generalschlüssel-Passwort für alles zu verwenden.

2. ACL-Kategorien im Überblick

Statt jeden der mehreren hundert Redis-Befehle einzeln freizugeben, gruppiert Redis Befehle in vordefinierte Kategorien, die sich mit einem einzigen Ausdruck aktivieren oder sperren lassen. Zu den wichtigsten zählen @read für lesende Operationen, @write für schreibende Operationen, @keyspace für Befehle, die den gesamten Schlüsselraum betreffen, @admin für administrative Operationen wie CONFIG oder CLIENT KILL, und @dangerous für Befehle mit besonders weitreichenden Auswirkungen wie FLUSHALL, SHUTDOWN oder DEBUG.

Die vollständige Liste aller Kategorien und der ihnen zugeordneten Befehle lässt sich jederzeit über den Befehl ACL CAT abfragen, während ACL CAT gefolgt von einem Kategorienamen die konkreten Befehle innerhalb dieser Kategorie auflistet. Diese Transparenz ist wichtig, weil sich Kategorien mit neuen Redis-Versionen gelegentlich um neu hinzugekommene Befehle erweitern, sodass eine bestehende Rechtevergabe regelmäßig gegen die aktuelle Kategorienliste geprüft werden sollte.


# Alle verfügbaren Kategorien und ihre Befehle einsehen
redis-cli ACL CAT
redis-cli ACL CAT dangerous

3. Praktisches Least-Privilege-Setup pro Anwendungsdienst

Der Kerngedanke von Least Privilege besteht darin, jedem Dienst nur die Rechte zu geben, die er für seine konkrete Aufgabe tatsächlich benötigt, keinesfalls mehr. Ein Cache-Lesedienst, der Produktdaten nur ausliest und niemals selbst schreibt, sollte ausschließlich @read-Rechte auf sein eigenes Schlüsselpräfix erhalten, während ein separater Cache-Warmer-Prozess zusätzlich @write für genau dasselbe Präfix benötigt, aber weiterhin keinerlei administrative Rechte.

In der Praxis wird ein solcher Benutzer über den Befehl ACL SETUSER angelegt, der Kategorien, einzelne Befehlsausnahmen und Schlüsselmuster in einer einzigen Regel kombiniert. Ein Session-Dienst etwa braucht Lese- und Schreibrechte auf sein Session-Präfix sowie den Befehl EXPIRE zum Setzen von Ablaufzeiten, aber weder Zugriff auf Cache-Schlüssel anderer Dienste noch auf administrative Befehle.


# Cache-Lesedienst: nur lesen, nur eigenes Präfix
redis-cli ACL SETUSER cache-reader on >starkes-passwort \
  ~cache:* +@read

# Cache-Warmer: lesen und schreiben, aber keine Admin-Rechte
redis-cli ACL SETUSER cache-warmer on >anderes-passwort \
  ~cache:* +@read +@write -@admin -@dangerous

4. Umgang mit gefährlichen Commands in Produktionsumgebungen

Befehle wie FLUSHALL, FLUSHDB oder KEYS gehören zur Kategorie @dangerous und sollten in nahezu jeder produktiven Anwendungsverbindung explizit gesperrt sein. FLUSHALL und FLUSHDB löschen sämtliche Daten der Instanz beziehungsweise einer Datenbank unwiderruflich, während KEYS bei einer großen Datenmenge den kompletten Schlüsselraum blockierend durchsucht und dadurch die Instanz für alle anderen Clients spürbar verlangsamt.

Für administrative Werkzeuge und Wartungsskripte, die diese Befehle tatsächlich benötigen, empfiehlt sich ein separater, eng überwachter Administrator-Benutzer, der sich klar von den Anwendungsdiensten unterscheidet und dessen Zugangsdaten nicht in derselben Konfigurationsdatei liegen wie die der regulären Dienste. Für Ad-hoc-Diagnose sollte statt KEYS grundsätzlich der nicht-blockierende Befehl SCAN verwendet werden, der den Schlüsselraum in kleinen Portionen durchläuft, ohne die Instanz für andere Clients zu blockieren.

5. ACL-Datei versus Runtime-Konfiguration und ihre Persistenz

Über ACL SETUSER angelegte Benutzer existieren zunächst nur im Arbeitsspeicher der laufenden Instanz und gehen bei einem Neustart ohne weiteres Zutun verloren. Für einen dauerhaften Bestand gibt es zwei Wege: entweder eine separate aclfile, die beim Serverstart geladen wird und alle Benutzerdefinitionen in Textform enthält, oder den Befehl ACL SAVE, der die aktuell im Speicher aktiven Regeln in genau diese Datei zurückschreibt.

Für produktive Umgebungen empfiehlt sich die aclfile als Quelle der Wahrheit, idealerweise unter Versionskontrolle verwaltet, sodass jede Rechteänderung nachvollziehbar dokumentiert ist. Runtime-Änderungen über ACL SETUSER eignen sich dann vor allem für Notfallanpassungen, etwa das sofortige Sperren eines kompromittierten Benutzers, gefolgt von einem anschließenden ACL SAVE, um die Änderung dauerhaft in die Datei zu übernehmen.

6. Key-Pattern-Restriktionen kombiniert mit Command-Kategorien

Command-Kategorien allein steuern nur, welche Befehle ein Benutzer ausführen darf, nicht jedoch auf welche Schlüssel. Erst die Kombination mit Key-Pattern-Regeln, eingeleitet durch das Tilde-Zeichen, schränkt den Zugriff zusätzlich auf einen bestimmten Namensraum ein. Ein Benutzer mit +@read und dem Muster ~session:* darf lesen, aber ausschließlich innerhalb von Schlüsseln, die mit session: beginnen, selbst wenn theoretisch auch andere Schlüssel in derselben Datenbank existieren.

Diese Kombination aus Befehls- und Schlüsselraum-Restriktion ist gerade in Multi-Service-Setups entscheidend, weil sie verhindert, dass ein kompromittierter Cache-Dienst auf Session-Daten zugreifen kann, selbst wenn beide Dienste dieselbe Redis-Instanz und dieselbe logische Datenbank teilen. Ohne eine solche Schlüsselraum-Trennung wäre die reine Befehlseinschränkung nur ein halber Schutz.


# Zugriff strikt auf ein Schlüsselpräfix begrenzen
redis-cli ACL SETUSER session-service on >passwort \
  ~session:* +@read +@write +expire -@dangerous

7. ACL-Regeln testen und auditieren

Vor dem produktiven Einsatz eines neuen Benutzers lohnt sich ein gezielter Test der tatsächlichen Rechte über ACL WHOAMI zur Identifikation der aktiven Verbindung sowie ACL GETUSER für einen bestimmten Benutzernamen, der die vollständige, effektive Rechtekonfiguration inklusive aller Kategorien und Schlüsselmuster ausgibt. Gerade bei komplexeren Regeln mit mehreren addierten und subtrahierten Kategorien lohnt sich dieser Blick, weil die Reihenfolge der Regeln das Endergebnis beeinflusst.

Für ein regelmäßiges Audit aller vorhandenen Benutzer eignet sich ACL LIST, das jede aktive Regel im Klartext ausgibt und sich gut in ein automatisiertes Skript integrieren lässt, das Abweichungen von einer erwarteten Soll-Konfiguration meldet. Ein solches Audit deckt zuverlässig auf, wenn versehentlich ein zu breites Recht vergeben wurde, etwa ein +@all statt der eigentlich beabsichtigten engen Kategorie.

8. Migration von requirepass zu ACL ohne Downtime

Eine bestehende Installation, die noch mit dem klassischen requirepass arbeitet, lässt sich schrittweise auf ACL umstellen, ohne den Betrieb zu unterbrechen. Der Standardbenutzer default bleibt dabei zunächst mit seinem bisherigen Passwort aktiv, während parallel neue, eingeschränkte Benutzer für jeden Anwendungsdienst angelegt werden. Erst wenn alle Dienste erfolgreich auf ihren eigenen Benutzer umgestellt sind, wird der default-Benutzer entweder deaktiviert oder auf ein reines Notfallkonto mit stark eingeschränkten Rechten reduziert.

Dieser schrittweise Ansatz erlaubt es, jede Dienst-Umstellung einzeln zu testen und bei Problemen sofort auf das alte Passwort zurückzufallen, statt die gesamte Infrastruktur in einem einzigen riskanten Schnitt umzustellen. Für Magento-Umgebungen bedeutet das konkret, Cache-, Session- und Indexer-Verbindung nacheinander auf jeweils einen eigenen ACL-Benutzer umzustellen und jede Umstellung durch einen produktiven Testlauf zu bestätigen, bevor der nächste Dienst folgt.

9. Praxisbeispiel: Multi-Service-Setup in einem Magento-Shop

Ein realistisches Magento-Setup nutzt Redis typischerweise für mehrere klar getrennte Zwecke gleichzeitig: den Full-Page-Cache, den Objekt-Cache, Sessions und häufig zusätzlich eine Warteschlange für asynchrone Indexer-Läufe. Jeder dieser Zwecke erhält im ACL-Modell einen eigenen Benutzer mit genau den Kategorien und Schlüsselpräfixen, die für die jeweilige Aufgabe nötig sind, und nichts darüber hinaus.

Ein solcher Aufbau begrenzt den Schaden eines kompromittierten Anwendungsservers spürbar: Selbst wenn Angreifer über eine Schwachstelle in der Anwendung Zugriff auf die Cache-Zugangsdaten erlangen, bleiben Session-Daten anderer Nutzer und die Indexer-Warteschlange durch die separaten Benutzer und Schlüsselpräfixe unerreichbar. Diese Isolation lässt sich nachträglich in eine bestehende Installation einziehen, ohne die Anwendung selbst grundlegend umzubauen, solange die Verbindungskonfiguration pro Dienst ohnehin schon getrennt ist.

Kategorie Typische Befehle Risikostufe Empfehlung
@read GET, MGET, HGETALL, EXISTS niedrig für reine Lesedienste vollständig freigeben
@write SET, HSET, DEL, EXPIRE mittel auf das eigene Schlüsselpräfix beschränken
@keyspace SCAN, RANDOMKEY, TYPE mittel für Diagnose-Zwecke gezielt freigeben, KEYS meiden
@admin CONFIG, CLIENT KILL, ACL hoch ausschließlich für dedizierte Administrator-Benutzer
@dangerous FLUSHALL, FLUSHDB, SHUTDOWN, DEBUG sehr hoch für alle Anwendungsdienste generell sperren

Mironsoft

Cache-Layer-Setup und Magento-Redis-Integration

Magento-Cache, der nicht richtig greift oder falsch konfiguriert ist?

Wir richten Redis als Cache- und Session-Backend für Magento sauber ein, tunen Speicherverbrauch und Eviction-Strategien und sorgen dafür, dass Full Page Cache und Session-Storage zuverlässig zusammenspielen.

Redis-Setup

Cache-, Session- und FPC-Backend produktionsreif für Magento konfigurieren.

Memory-Tuning

Speicherverbrauch und Eviction-Policies auf die tatsächliche Shop-Last abstimmen.

High-Availability-Setup

Redis Sentinel oder Cluster für ausfallsichere Magento-Umgebungen einrichten.

10. Zusammenfassung

ACL-Kategorien in Redis: Das Wichtigste auf einen Blick

ACL statt Generalpasswort

Seit Redis 6 erhält jeder Dienst einen eigenen Benutzer mit exakt zugeschnittenen Rechten statt eines geteilten Passworts.

Kategorien statt Einzelbefehle

Vordefinierte Gruppen wie @read, @write und @dangerous machen Least Privilege ohne manuelle Befehlsliste handhabbar.

Key-Pattern als zweite Dimension

Erst die Kombination aus Command-Kategorie und Schlüsselpräfix trennt Dienste wirklich sauber voneinander.

Schrittweise Migration möglich

Der Umstieg von requirepass auf ACL lässt sich Dienst für Dienst durchführen, ohne den Betrieb zu unterbrechen.

11. FAQ: ACL-Kategorien in Redis: Das Wichtigste auf einen Blick

1Was ist der grundlegende Unterschied zwischen requirepass und dem ACL-System?
requirepass kennt nur ein einziges Passwort mit vollständigem Zugriff für alle, während das ACL-System aus Redis 6 mehrere Benutzer mit individuell zugeschnittenen Rechten pro Befehl und Schlüsselmuster erlaubt.
2Was bedeutet die Kategorie @dangerous konkret?
Sie fasst Befehle mit besonders weitreichenden Auswirkungen zusammen, etwa FLUSHALL, FLUSHDB, SHUTDOWN und DEBUG, die in produktiven Anwendungsverbindungen fast immer explizit gesperrt werden sollten.
3Warum reicht das Sperren einzelner Kategorien allein nicht aus?
Command-Kategorien steuern nur, welche Befehle erlaubt sind, nicht welche Schlüssel. Erst Key-Pattern-Regeln mit dem Tilde-Zeichen begrenzen den Zugriff zusätzlich auf einen bestimmten Namensraum.
4Wie finde ich heraus, welche Befehle zu einer bestimmten Kategorie gehören?
Über ACL CAT gefolgt vom Kategorienamen listet Redis alle darin enthaltenen Befehle vollständig auf, was sich auch bei neuen Redis-Versionen jederzeit erneut prüfen lässt.
5Warum sollte KEYS in Produktionsumgebungen vermieden werden?
KEYS durchsucht den gesamten Schlüsselraum blockierend und verlangsamt die Instanz bei großen Datenmengen spürbar für alle anderen Clients. Für Diagnosezwecke ist der nicht-blockierende Befehl SCAN vorzuziehen.
6Wie werden ACL-Benutzer dauerhaft über einen Neustart hinweg gespeichert?
Entweder über eine separate aclfile, die beim Start geladen wird, oder über den Befehl ACL SAVE, der die aktuell aktiven Regeln in diese Datei zurückschreibt.
7Wie prüfe ich, welche Rechte ein bestimmter ACL-Benutzer tatsächlich hat?
Mit ACL GETUSER gefolgt vom Benutzernamen zeigt Redis die vollständige, effektive Rechtekonfiguration inklusive aller addierten und subtrahierten Kategorien und Schlüsselmuster an.
8Lässt sich die Umstellung von requirepass auf ACL ohne Ausfallzeit durchführen?
Ja, indem der bisherige default-Benutzer zunächst aktiv bleibt, während parallel neue eingeschränkte Benutzer angelegt und Dienste nacheinander umgestellt werden.
9Warum lohnt sich ein separater Benutzer pro Anwendungsdienst statt eines geteilten ACL-Benutzers?
Weil sich so der Schaden eines kompromittierten Dienstes auf dessen eigenes Schlüsselpräfix und dessen eigene Befehlskategorien begrenzen lässt, statt alle Dienste gleichermaßen zu gefährden.
10Wie sollte der Zugang für administrative Wartungsskripte geregelt sein?
Über einen dedizierten, eng überwachten Administrator-Benutzer mit Zugriff auf @admin und @dangerous, dessen Zugangsdaten getrennt von den regulären Anwendungsdiensten verwaltet werden.