{"id":21435,"date":"2026-09-15T18:21:14","date_gmt":"2026-09-15T16:21:14","guid":{"rendered":"https:\/\/webhosting.de\/redis-acls-multi-user-umgebungen-sicherheit\/"},"modified":"2026-09-15T18:21:14","modified_gmt":"2026-09-15T16:21:14","slug":"redis-acl-srodowiska-wielouzytkownikowe-bezpieczenstwo","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/redis-acls-multi-user-umgebungen-sicherheit\/","title":{"rendered":"Bezpieczne stosowanie list kontroli dost\u0119pu (ACL) w Redis w \u015brodowiskach wielou\u017cytkownikowych"},"content":{"rendered":"<p>Ustawi\u0142em <strong>redis acl<\/strong> w \u015brodowiskach wielou\u017cytkownikowych w spos\u00f3b ukierunkowany, aby \u015bci\u015ble oddzieli\u0107 polecenia, prefiksy kluczy i kana\u0142y Pub\/Sub. W ten spos\u00f3b dbam o <strong>Bezpiecze\u0144stwo<\/strong> po stronie serwera, zminimalizuj liczb\u0119 nieudanych pr\u00f3b dost\u0119pu i zadbaj o przejrzysto\u015b\u0107 zarz\u0105dzania rolami.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Separacja<\/strong> liczba polece\u0144, kluczy i kana\u0142\u00f3w na u\u017cytkownika<\/li>\n  <li><strong>Po stronie serwera<\/strong> W aplikacji przewa\u017ca kontrola nad logik\u0105<\/li>\n  <li><strong>Przestrzenie nazw<\/strong> wed\u0142ug prefiksu klucza dla klient\u00f3w<\/li>\n  <li><strong>Plik ACL<\/strong> w celu u\u0142atwienia konserwacji i zarz\u0105dzania wersjami<\/li>\n  <li><strong>Audyty<\/strong> za pomoc\u0105 ACL LIST i ACL USERS<\/li>\n<\/ul>\n\n<h2>Podstawy ACL w konfiguracjach wielou\u017cytkownikowych<\/h2>\n\n<p>Dla ka\u017cdej aplikacji, ka\u017cdego zespo\u0142u lub ka\u017cdego klienta tworz\u0119 osobny profil u\u017cytkownika i \u015bci\u015ble definiuj\u0119 jego uprawnienia za pomoc\u0105 <strong>ACL<\/strong>-zasady. W ten spos\u00f3b zapobiegam sytuacji, w kt\u00f3rej jedno globalne has\u0142o otwiera wszystkie drzwi i dochodzi do przypadkowego nadpisania danych. Uprawnienia rozdzielam wed\u0142ug polece\u0144, wzorc\u00f3w kluczy i kana\u0142\u00f3w, tak aby ka\u017cde konto mia\u0142o dost\u0119p tylko do tego, co niezb\u0119dne, i nic ponadto. Ta izolacja po stronie serwera odci\u0105\u017ca aplikacj\u0119 i zwi\u0119ksza <strong>Przejrzysto\u015b\u0107<\/strong> w modelu bezpiecze\u0144stwa. Dzi\u0119ki temu, zw\u0142aszcza w instancjach wsp\u00f3\u0142dzielonych, mam pe\u0142ny przegl\u0105d tego, kto mo\u017ce wykona\u0107 dan\u0105 operacj\u0119 w danej przestrzeni nazw.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis-acl-umgebung-4821.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Modele uprawnie\u0144: wyra\u017ane rozdzielenie polece\u0144, kluczy i kana\u0142\u00f3w<\/h2>\n\n<p>Przyznaj\u0119 uprawnienia do wydawania polece\u0144 w spos\u00f3b szczeg\u00f3\u0142owy, na przyk\u0142ad w takich kategoriach jak <strong>@read<\/strong> oraz @write, a tak\u017ce usuwam grupy stwarzaj\u0105ce ryzyko, takie jak @dangerous, kt\u00f3re zawieraj\u0105 polecenia konfiguracyjne lub administracyjne. W przypadku przestrzeni kluczy korzystam z unikalnych prefiks\u00f3w, takich jak app1:*, app2:* lub tenant_a:*, dzi\u0119ki czemu uprawnienia do odczytu i zapisu s\u0105 ograniczone do konkretnej przestrzeni nazw. W ten spos\u00f3b zadanie mo\u017ce na przyk\u0142ad korzysta\u0107 z polece\u0144 SET i GET, ale dzia\u0142a\u0107 wy\u0142\u0105cznie w ramach w\u0142asnego prefiksu. Ponadto ograniczam kana\u0142y Pub\/Sub, aby zdarzenia przebiega\u0142y wy\u0142\u0105cznie w przeznaczonych do tego strumieniach. Efektem jest przejrzysta <strong>Separacja<\/strong> mi\u0119dzy rolami, pokojami danych i kana\u0142ami komunikacji.<\/p>\n\n<h2>Bezpieczne ograniczenie modelu Pub\/Sub<\/h2>\n\n<p>W modelu Pub\/Sub zezwalam wy\u0142\u0105cznie na kana\u0142y, kt\u00f3rych aplikacja naprawd\u0119 potrzebuje, a wszystkie pozosta\u0142e konsekwentnie blokuj\u0119 <strong>ACL<\/strong>-regu\u0142y. W ten spos\u00f3b zapobiegam sytuacji, w kt\u00f3rej us\u0142uga odbiera obce zdarzenia lub publikuje komunikaty do nieoczekiwanych subskrybent\u00f3w. Szczeg\u00f3lnie w architekturach opartych na zdarzeniach takie sterowanie zmniejsza ryzyko wycieku danych lub zak\u0142\u00f3ce\u0144 w dzia\u0142aniu innych us\u0142ug. Dokumentuj\u0119 kana\u0142y udost\u0119pnione dla poszczeg\u00f3lnych u\u017cytkownik\u00f3w, aby proces wdra\u017cania nowych pracownik\u00f3w i audyty przebiega\u0142y przejrzy\u015bcie. W ten spos\u00f3b, nawet przy rosn\u0105cej skali \u015brodowiska systemowego, zachowuj\u0119 <strong>Kontrola<\/strong> o przep\u0142ywach danych.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis_acl_sicherheit_4821.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Zarz\u0105dzanie u\u017cytkownikami i regu\u0142ami w praktyce<\/h2>\n\n<p>Nowych u\u017cytkownik\u00f3w tworz\u0119 za pomoc\u0105 polecenia ACL SETUSER, nadaj\u0119 im silne has\u0142o i aktywuj\u0119 dok\u0142adnie te polecenia, kt\u00f3rych potrzebuje dana us\u0142uga, na przyk\u0142ad <strong>+@read<\/strong> oraz +@write przy jednoczesnym blokowaniu polece\u0144 obarczonych wi\u0119kszym ryzykiem. Dozwolone obszary kluczy definiuj\u0119 za pomoc\u0105 odpowiednich wzorc\u00f3w, a kana\u0142y reguluj\u0119 w podobny spos\u00f3b. Aby zachowa\u0107 przejrzysto\u015b\u0107, korzystam z ACL USERS, a za pomoc\u0105 ACL LIST uzyskuj\u0119 szybki wgl\u0105d w aktywne regu\u0142y. Zmiany \u0142aduj\u0119 lub zapisuj\u0119 za pomoc\u0105 polece\u0144 ACL LOAD i ACL SAVE, aby konfiguracja i plik pozostawa\u0142y zsynchronizowane. W ten spos\u00f3b utrzymuj\u0119 <strong>Administracja<\/strong> zwi\u0119z\u0142e, zrozumia\u0142e i mo\u017cliwe do powt\u00f3rzenia.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Polecenie ACL\/Auth<\/th>\n      <th>Cel<\/th>\n      <th>Przyk\u0142ad<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>ACL SETUSER<\/td>\n      <td>Dodaj\/edytuj u\u017cytkownika<\/td>\n      <td>ACL SETUSER app1 on &gt;bezpieczneHas\u0142o +@read +@write -@dangerous ~app1:*<\/td>\n    <\/tr>\n    <tr>\n      <td>LISTA ACL<\/td>\n      <td>Poka\u017c zasady<\/td>\n      <td>LISTA ACL<\/td>\n    <\/tr>\n    <tr>\n      <td>U\u017cytkownicy ACL<\/td>\n      <td>Wy\u015bwietl list\u0119 u\u017cytkownik\u00f3w<\/td>\n      <td>U\u017cytkownicy ACL<\/td>\n    <\/tr>\n    <tr>\n      <td>ACL LOAD\/SAVE<\/td>\n      <td>Wczytaj\/zapisz plik ACL<\/td>\n      <td>ACL SAVE; ACL LOAD<\/td>\n    <\/tr>\n    <tr>\n      <td>AUTH<\/td>\n      <td>Logowanie na serwerze<\/td>\n      <td>AUTH app1 bezpieczne has\u0142o<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Konfiguracja: plik ACL czy redis.conf?<\/h2>\n\n<p>Przechowuj\u0119 proste konfiguracje bezpo\u015brednio w <strong>redis.conf<\/strong>, jednak w przypadku wielu u\u017cytkownik\u00f3w i r\u00f3l stosuj\u0119 oddzielny plik ACL. Plik ten wersjonuj\u0119 w bezpiecznym repozytorium, starannie dokumentuj\u0119 zmiany i wdra\u017cam aktualizacje w spos\u00f3b kontrolowany. W ten spos\u00f3b oddzielam parametry aplikacji od logiki bezpiecze\u0144stwa, co ogranicza \u017ar\u00f3d\u0142a b\u0142\u0119d\u00f3w. R\u00f3wnolegle wzmacniam bezpiecze\u0144stwo instancji na poziomie sieci, na przyk\u0142ad poprzez <a href=\"https:\/\/webhosting.de\/pl\/bezpieczenstwo-redis-zabezpieczanie-otwartych-portow-serwer-pamieci-podrecznej-zaawansowane\/\">zabezpieczenie otwartych port\u00f3w<\/a> i eliminuj\u0119 niepotrzebne s\u0142abe punkty. W sumie zwi\u0119ksza to <strong>Bezpiecze\u0144stwo<\/strong> i u\u0142atwia obs\u0142ug\u0119.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/secure-redis-acl-multiuser-8172.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Przestrzenie nazw i separacja klient\u00f3w<\/h2>\n\n<p>Projektuj\u0119 prefiksy kluczy w taki spos\u00f3b, aby wyra\u017anie odzwierciedla\u0142y identyfikatory dzier\u017cawc\u00f3w i nazwy aplikacji, na przyk\u0142ad <strong>tenantA:<\/strong>app1:session:{id}. W ten spos\u00f3b tworz\u0119 wyra\u017anie widoczn\u0105 barier\u0119 wok\u00f3\u0142 danych ka\u017cdej strony, kt\u00f3r\u0105 dodatkowo zabezpieczaj\u0105 regu\u0142y ACL. W przypadku \u015bcie\u017cek migracji stosuj\u0119 sp\u00f3jne schematy nazewnictwa, aby u\u0142atwi\u0107 wdra\u017canie metodami Blue-Green lub Canary. Jednoznaczna struktura pomaga r\u00f3wnie\u017c podczas tworzenia kopii zapasowych i przywracania danych, poniewa\u017c zajmuj\u0119 si\u0119 tylko odpowiednimi fragmentami danych. To po\u0142\u0105czenie koncepcji nazewnictwa i regu\u0142 ACL zapewnia <strong>Klienci<\/strong> dok\u0142adnie oddzielone.<\/p>\n\n<h2>Mikrous\u0142ugi i role zespo\u0142owe w codziennej pracy<\/h2>\n\n<p>Dla ka\u017cdej us\u0142ugi tworz\u0119 jednego u\u017cytkownika, kt\u00f3ry ma dost\u0119p wy\u0142\u0105cznie do odczytu i zapisu w\u0142asnych przestrzeni danych, bez dost\u0119pu do obcych prefiks\u00f3w ani funkcji administracyjnych. Dla kont programist\u00f3w definiuj\u0119 restrykcyjne uprawnienia do odczytu lub zapisu, podczas gdy konta administrator\u00f3w pozostaj\u0105 \u015bci\u015ble ograniczone i s\u0105 rejestrowane. Zadania wsadowe otrzymuj\u0105 wy\u0142\u0105cznie polecenia niezb\u0119dne do ich realizacji, takie jak odczyt, zapis i zmiany TTL, ale nie otrzymuj\u0105 polece\u0144 administracyjnych. Integracje zewn\u0119trzne ograniczam dodatkowo czasowo lub do \u015brodowisk testowych, aby nieprawid\u0142owe konfiguracje nie <strong>Produktywny<\/strong>-Dane wra\u017cliwe. W ten spos\u00f3b jasno rozdzielam obowi\u0105zki, nie obni\u017caj\u0105c przy tym poziomu bezpiecze\u0144stwa.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis_acls_tech_office_7432.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ograniczenia list ACL i poziomy izolacji<\/h2>\n\n<p>Prawid\u0142owo oceniam listy ACL: kontroluj\u0105 one dost\u0119p, ale nie izoluj\u0105 <strong>Zasoby<\/strong> takie jak procesor, pami\u0119\u0107 RAM czy operacje wej\u015bcia\/wyj\u015bcia na poziomie proces\u00f3w. W scenariuszach wymagaj\u0105cych \u015bcis\u0142ej zgodno\u015bci z przepisami rozwa\u017cam zatem wykorzystanie dedykowanych instancji, oddzielnych klastr\u00f3w lub w\u0142asnych w\u0119z\u0142\u00f3w. Logiczne oddzielenie za pomoc\u0105 list kontroli dost\u0119pu (ACL) ogranicza nieuprawniony dost\u0119p, ale zasoby serwerowe s\u0105 nadal wsp\u00f3lne. W przypadku wra\u017cliwych obci\u0105\u017ce\u0144 planuj\u0119 dodatkowe oddzielenie, na przyk\u0142ad poprzez segmenty sieciowe, granice kontener\u00f3w lub maszyn wirtualnych. W ten spos\u00f3b \u0142\u0105cz\u0119 kontrol\u0119 dost\u0119pu z technicznymi <strong>ekranowanie<\/strong> w celu zapewnienia wy\u017cszego poziomu bezpiecze\u0144stwa.<\/p>\n\n<h2>Dzia\u0142alno\u015b\u0107: audyty, rotacja i rejestrowanie<\/h2>\n\n<p>Regularnie sprawdzam uprawnienia za pomoc\u0105 polecenia ACL LIST i prowadz\u0119 harmonogram zmian, aby podczas audyt\u00f3w m\u00f3c szybko zweryfikowa\u0107, co jest aktualnie aktywne. Has\u0142a zmieniam w ustalonych odst\u0119pach czasu oraz skrupulatnie rejestruj\u0119 zdarzenia logowania oraz nietypowe wzorce. W przypadku incydent\u00f3w natychmiast blokuj\u0119 u\u017cytkownik\u00f3w, kt\u00f3rych to dotyczy, \u0142aduj\u0119 zaktualizowane regu\u0142y i automatycznie testuj\u0119 \u015bcie\u017cki krytyczne. W procesie CI\/CD wbudowuj\u0119 kontrole, kt\u00f3re sygnalizuj\u0105 niedozwolone polecenia lub brakuj\u0105ce prefiksy w konfiguracjach. To <strong>Procedura<\/strong> oszcz\u0119dza czas i ogranicza przestoje w pracy.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis_acls_multiuser_env_7435.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Decyzje architektoniczne: wsp\u00f3\u0142dzielone czy dedykowane<\/h2>\n\n<p>Zastanawiam si\u0119, czy kilku klient\u00f3w powinno korzysta\u0107 z jednej instancji, czy te\u017c powinienem udost\u0119pni\u0107 oddzielne serwery, poniewa\u017c obie opcje maj\u0105 swoje zalety <strong>Ryzyko<\/strong> i zalety. Rozwi\u0105zanie wsp\u00f3\u0142dzielone pozwala obni\u017cy\u0107 koszty, ale wymaga \u015bcis\u0142ych list kontroli dost\u0119pu (ACL), przejrzystych przestrzeni nazw i \u015bcis\u0142ego monitorowania. Rozwi\u0105zanie dedykowane ogranicza interakcje, ale wi\u0105\u017ce si\u0119 z wi\u0119kszymi nak\u0142adami na sprz\u0119t i konserwacj\u0119. Je\u015bli chodzi o kwestie wydajno\u015bci i bezpiecze\u0144stwa, pos\u0142uguj\u0119 si\u0119 por\u00f3wnaniami takimi jak <a href=\"https:\/\/webhosting.de\/pl\/redis-wspoldzielony-vs-dedykowany-wydajnosc-bezpieczenstwo-cacheboost\/\">Wsp\u00f3\u0142dzielone vs dedykowane<\/a> i przeprowadzam testy obci\u0105\u017ceniowe. Na koniec podejmuj\u0119 decyzj\u0119 na podstawie dost\u0119pu do danych, wymog\u00f3w zgodno\u015bci oraz <strong>Bud\u017cet<\/strong>.<\/p>\n\n<h2>Klaster czy tryb autonomiczny \u2013 co lepiej pasuje do ACL?<\/h2>\n\n<p>Stosuj\u0119 listy ACL zar\u00f3wno w instancjach autonomicznych, jak i w klastrach, dbaj\u0105c jednak o sp\u00f3jno\u015b\u0107 regu\u0142 we wszystkich w\u0119z\u0142ach. W klastrach sprawdzam, w jaki spos\u00f3b klucze s\u0105 rozdzielone mi\u0119dzy sloty, aby prefiksy i uprawnienia nadal dzia\u0142a\u0142y prawid\u0142owo. W przypadku wysokiej dost\u0119pno\u015bci wymagam, aby prze\u0142\u0105czenie awaryjne nie <strong>Z\u0142amanie<\/strong> w \u0142a\u0144cuchu uprawnie\u0144, a plik ACL jest wsz\u0119dzie identyczny. Wst\u0119pnie testuj\u0119 \u015bcie\u017cki migracji, aby zmiana repliki lub aktualizacje nie spowodowa\u0142y \u017cadnych luk. Kto rozwa\u017ca architektur\u0119, mo\u017ce pos\u0142u\u017cy\u0107 si\u0119 por\u00f3wnaniami, takimi jak <a href=\"https:\/\/webhosting.de\/pl\/klaster-redis-a-tryb-autonomiczny-w-hostingu-internetowym-hosting-redis\/\">Klaster a tryb autonomiczny<\/a> okre\u015bli\u0107 kierunek dzia\u0142ania, a nast\u0119pnie odpowiednio wdro\u017cy\u0107 strategi\u0119 ACL.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/redis-acls-umgebung-1678.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Planowanie i Bootstrap: bezpieczny start<\/h2>\n\n<p>Zaczynam od czystego Bootstrapa. Wbudowany u\u017cytkownik \u201edefault\u201c nie otrzymuje szerokich uprawnie\u0144: albo ca\u0142kowicie go dezaktywuj\u0119, albo domy\u015blnie odbieram mu wszystkie polecenia, klucze i kana\u0142y. W ten spos\u00f3b zapobiegam przypadkowej pracy bez izolacji u\u017cytkownika. Do zada\u0144 operacyjnych celowo definiuj\u0119 oddzielne konta administracyjne z zabezpieczeniem wielosk\u0142adnikowym na poziomie zarz\u0105dzania (np. host bastionowy\/certyfikaty klienta TLS) oraz rygorystycznymi listami kontroli dost\u0119pu (ACL).<\/p>\n\n<pre><code># Bezpieczne uruchomienie w pliku ACL\nuser default off\nuser admin on &gt;SilneHas\u0142oAdministratora +@admin -@dangerous allkeys allchannels\n<\/code><\/pre>\n\n<p>Silne has\u0142a generuj\u0119 po stronie serwera, dzi\u0119ki czemu nigdy nie trafiaj\u0105 one do log\u00f3w ani historii polece\u0144 pow\u0142oki. Aby uzyska\u0107 szybkie i bezpieczne tokeny, korzystam z generatora na serwerze i regularnie je zmieniam. W przypadku nowoczesnych klient\u00f3w preferuj\u0119 uwierzytelnianie za pomoc\u0105 protoko\u0142u HELLO z podaniem nazwy u\u017cytkownika i has\u0142a w jednym kroku, co jednoznacznie okre\u015bla wersj\u0119 protoko\u0142u i pozwala unikn\u0105\u0107 sytuacji granicznych.<\/p>\n\n<h2>Wzory i pu\u0142apki zwi\u0105zane z listami ACL typu \u201ekey\u201d i \u201echannel\u201d<\/h2>\n\n<p>W przypadku wzor\u00f3w kluczy pracuj\u0119 wy\u0142\u0105cznie na podstawie list zezwole\u0144. Zaczynam od <em>klawisze resetowania<\/em> a nast\u0119pnie dodaj\u0119 konkretne wzorce ~, na przyk\u0142ad ~tenantA:* i ~tenantA:app1:* w celu uzyskania bardziej precyzyjnie wyodr\u0119bnionych obszar\u00f3w. Kluczowe znaczenie maj\u0105 nak\u0142adaj\u0105ce si\u0119 prefiksy: Je\u015bli u\u017cytkownik ma uprawnienia do ~tenantA:*, ale nie powinien mie\u0107 wgl\u0105du w obszary takie jak tenantA:archiv:*, w\u00f3wczas planuj\u0119 przestrzenie nazw tak, aby wra\u017cliwe podzbiory mia\u0142y w\u0142asne prefiksy (np. tenantA:priv:*), do kt\u00f3rych po prostu nie udzielam dost\u0119pu. Podobne zasady obowi\u0105zuj\u0105 w przypadku kana\u0142\u00f3w: ustawiam <em>resetuj kana\u0142y<\/em> i przyznaj wy\u0142\u0105cznie &amp;tenantA:* oraz dok\u0142adnie te kana\u0142y, kt\u00f3re s\u0105 niezb\u0119dne do powiadomie\u0144 w przestrzeni kluczy, o ile takie istniej\u0105.<\/p>\n\n<pre><code># Klucze i kana\u0142y \u015bci\u015ble\nACL SETUSER tenantA:app1 on &gt;Pass +@read +@write -@dangerous \\\n  resetkeys ~tenantA:app1:* \\\n  resetchannels &amp;tenantA:app1:* \n<\/code><\/pre>\n\n<p>Zwracam uwag\u0119, \u017ce polecenia takie jak RENAME, MIGRATE czy DUMP\/RESTORE mog\u0105 zapisywa\u0107 dane poza granicami prefiks\u00f3w. Takie polecenia pozostaj\u0105 zablokowane na kontach us\u0142ugowych w \u015brodowisku produkcyjnym. Pola skr\u00f3tu, elementy listy lub elementy zestawu posortowanego nie s\u0105 oddzielnymi kluczami \u2013 lista ACL dzia\u0142a na poziomie klucza, a nie wewn\u0105trz struktury danych. Dlatego wystarczy przejrzysta koncepcja prefiks\u00f3w kluczy, aby obj\u0105\u0107 r\u00f3wnie\u017c te struktury.<\/p>\n\n<h2>\u015awiadome sterowanie kategoriami polece\u0144<\/h2>\n\n<p>Aktywuj\u0119 tylko to, czego naprawd\u0119 potrzebuj\u0119. W przypadku klasycznych zada\u0144 CRUD cz\u0119sto wystarczaj\u0105 +@read i +@write. Kategorie o podwy\u017cszonym ryzyku zasadniczo blokuj\u0119: <strong>@admin<\/strong> oraz <strong>@dangerous<\/strong> s\u0105 niedozwolone dla u\u017cytkownik\u00f3w aplikacji. W konfiguracjach wielodost\u0119pnych staram si\u0119 w miar\u0119 mo\u017cliwo\u015bci ca\u0142kowicie pomija\u0107 funkcje skryptowe (EVAL, FUNCTION). W przypadku us\u0142ug typu Pub\/Sub oddzielam uprawnienia, tak aby polecenia zapisu na kluczach nie by\u0142y automatycznie dozwolone. W praktyce zaczynam od minimalnego zakresu uprawnie\u0144 i w razie potrzeby zezwalam na konkretne polecenia (+COMMAND) zamiast otwiera\u0107 ca\u0142e kategorie.<\/p>\n\n<h2>Rotacja i zmiany bez przestoj\u00f3w<\/h2>\n\n<p>Planuj\u0119 rotacj\u0119 hase\u0142 bez przestoj\u00f3w. Redis pozwala na u\u017cywanie kilku aktywnych hase\u0142 dla ka\u017cdego u\u017cytkownika. Kolejno\u015b\u0107 czynno\u015bci jest prosta: najpierw nale\u017cy ustawi\u0107 dodatkowe nowe has\u0142o, nast\u0119pnie dostosowa\u0107 klienci, a na koniec usun\u0105\u0107 stare has\u0142o za pomoc\u0105 <em>resetpass<\/em> usun\u0105\u0107. T\u0119 sam\u0105 zasad\u0119 stosuj\u0119 przy stopniowym wprowadzaniu zmian uprawnie\u0144: w razie w\u0105tpliwo\u015bci najpierw przeprowadzam testy pr\u00f3bne i korzystam z kont testowych, zanim wprowadz\u0119 zmiany na kontach produkcyjnych.<\/p>\n\n<pre><code># Przebieg rotacji\nACL SETUSER app1 &gt;NoweHas\u0142o # dodatkowe ustawienie nowego has\u0142a\n# Prze\u0142\u0105czenie klient\u00f3w ...\nACL SETUSER app1 resetpass &gt;NoweHas\u0142o # stare has\u0142o usuni\u0119te, nowe pozostaje\n<\/code><\/pre>\n\n<h2>Pog\u0142\u0119bienie wiedzy na temat test\u00f3w, debugowania i audyt\u00f3w<\/h2>\n\n<p>Testuj\u0119 zmiany przed ich wdro\u017ceniem. Za pomoc\u0105 symulacji sprawdzam, czy u\u017cytkownik powinien mie\u0107 uprawnienia do wykonania polecenia na okre\u015blonym kluczu lub kanale, nie wykonuj\u0105c go faktycznie. Nieprawid\u0142owe pr\u00f3by dost\u0119pu i naruszenia zasad \u015bledz\u0119 w dedykowanym dzienniku ACL i konfiguruj\u0119 tam odpowiednie zasady przechowywania oraz przekierowywania do mojej centralnej infrastruktury dziennik\u00f3w. Aby zapewni\u0107 przejrzysto\u015b\u0107, korzystam r\u00f3wnie\u017c z list kategorii, aby zrozumie\u0107, jakie polecenia kryj\u0105 si\u0119 za dan\u0105 kategori\u0105.<\/p>\n\n<pre><code># Symulacja uprawnie\u0144\nACL DRYRUN app1 GET otherprefix:key\n# Sprawd\u017a aktualn\u0105 to\u017csamo\u015b\u0107 u\u017cytkownika\nACL WHOAMI\n# Wy\u015bwietl\/zresetuj nieudane pr\u00f3by dost\u0119pu\nACL LOG\nACL LOG RESET\n# Wy\u015bwietl polecenia wed\u0142ug kategorii\nACL CAT @write\n<\/code><\/pre>\n\n<p>Na potrzeby audyt\u00f3w, opr\u00f3cz listy ACL LIST\/USERS, udost\u0119pniam r\u00f3wnie\u017c migawki pliku ACL w systemie kontroli wersji. Ka\u017cda zmiana otrzymuje zg\u0142oszenie (ticket) lub \u017c\u0105danie zmiany (change request) oraz podlega procesowi scalania wymagaj\u0105cemu weryfikacji. Dzi\u0119ki temu mog\u0119 w ka\u017cdej chwili sprawdzi\u0107, kto, kiedy i jakie uprawnienia rozszerzy\u0142 lub ograniczy\u0142.<\/p>\n\n<h2>Skrypty, funkcje i bezpieczne wykonywanie<\/h2>\n\n<p>Skrypty Lua i funkcje po stronie serwera s\u0105 pot\u0119\u017cnym narz\u0119dziem \u2013 ale mog\u0105 te\u017c stanowi\u0107 potencjaln\u0105 drog\u0119 ucieczki z izolacji, je\u015bli udost\u0119pni si\u0119 je zbyt szerokiemu gronu u\u017cytkownik\u00f3w. W \u015brodowiskach wsp\u00f3\u0142dzielonych domy\u015blnie wy\u0142\u0105czam EVAL\/EVALSHA oraz zarz\u0105dzanie funkcjami i zezwalam na ich u\u017cycie wy\u0142\u0105cznie w \u015bci\u015ble wyodr\u0119bnionych kontekstach administracyjnych. Je\u015bli konieczne jest stosowanie skrypt\u00f3w, dok\u0142adnie sprawdzam, czy skrypty maj\u0105 dost\u0119p wy\u0142\u0105cznie do dozwolonych prefiks\u00f3w kluczy, poniewa\u017c listy kontroli dost\u0119pu (ACL) obowi\u0105zuj\u0105 r\u00f3wnie\u017c w przypadku wywo\u0142a\u0144 ze skrypt\u00f3w. Zmniejsza to ryzyko po\u015bredniego dost\u0119pu do obcych obszar\u00f3w.<\/p>\n\n<h2>Replikacja, wysoka dost\u0119pno\u015b\u0107 i sp\u00f3jno\u015b\u0107 list ACL<\/h2>\n\n<p>W konfiguracjach z replikacj\u0105 oddzielam u\u017cytkownik\u00f3w aplikacji od u\u017cytkownik\u00f3w replikacji. Do cel\u00f3w replikacji zak\u0142adam dedykowane konto techniczne, kt\u00f3re ma uprawnienia wy\u0142\u0105cznie do polece\u0144 niezb\u0119dnych do obs\u0142ugi SYNC\/PSYNC\/REPLCONF i podobnych. Plik ACL synchronizuj\u0119 na wszystkich w\u0119z\u0142ach \u2013 w przypadku r\u0119cznej obs\u0142ugi za pomoc\u0105 narz\u0119dzi do zarz\u0105dzania konfiguracj\u0105, a w klastrach zarz\u0105dzanych \u2013 za pomoc\u0105 przewidzianych w nich mechanizm\u00f3w. Po wprowadzeniu zmian zapisuj\u0119 regu\u0142y centralnie i w kontrolowany spos\u00f3b wgrywam je na nowe w\u0119z\u0142y, aby prze\u0142\u0105czenie awaryjne nie spowodowa\u0142o naruszenia uprawnie\u0144.<\/p>\n\n<p>W klastrach sprawdzam ponadto, czy prefiksy kluczy s\u0105 nadal sensownie dopasowane do granic slot\u00f3w. Nie jest to tyle kwestia listy kontroli dost\u0119pu (ACL), co raczej kwestia projektowa maj\u0105ca na celu r\u00f3wnomierny rozk\u0142ad obci\u0105\u017cenia i uproszczenie argumentacji dotycz\u0105cej uprawnie\u0144 (\u201ejeden prefiks, jedna przestrze\u0144 danych, wiele slot\u00f3w\u201c). Podczas prze\u0142\u0105czania awaryjnego dbam o to, aby u\u017cytkownicy replikacji i konta administracyjne by\u0142y ju\u017c dost\u0119pne na w\u0119\u017ale docelowym, dzi\u0119ki czemu prze\u0142\u0105czenia przebiegaj\u0105 w spos\u00f3b przezroczysty.<\/p>\n\n<h2>Zmiana klienta, migracje i kopie zapasowe<\/h2>\n\n<p>W przypadku zmiany nazw prefiks\u00f3w lub identyfikator\u00f3w klient\u00f3w z wyprzedzeniem uwzgl\u0119dniam skutki dla listy ACL. Je\u015bli klient migruje z tenantA: do tenantA2:, tymczasowo zezwalam na oba wzorce i planuj\u0119 jasno okre\u015blony etap przej\u015bciowy. Dbam o to, aby zadania migracyjne korzysta\u0142y z \u015bci\u015ble ograniczonego konta u\u017cytkownika, kt\u00f3re odczytuje i zapisuje wy\u0142\u0105cznie niezb\u0119dne prefiksy. W przypadku kopii zapasowych zwracam uwag\u0119 na to, \u017ce plik ACL jest oddzielony od RDB\/AOF \u2013 dlatego zapisuj\u0119 go osobno jako cz\u0119\u015b\u0107 konfiguracji. W przypadku cz\u0119\u015bciowego przywracania danych pomocne s\u0105 precyzyjne prefiksy, poniewa\u017c umo\u017cliwiaj\u0105 mi one wyodr\u0119bnienie wy\u0142\u0105cznie odpowiednich przestrzeni kluczy.<\/p>\n\n<h2>Integracja z klientami i bezpieczne protoko\u0142y<\/h2>\n\n<p>Po stronie klienta konsekwentnie stosuj\u0119 login i has\u0142o zamiast pozostawia\u0107 globaln\u0105 opcj\u0119 \u201erequirepass\u201c. W przypadku nowoczesnych klient\u00f3w korzystam z protoko\u0142u HELLO, aby w jednym kroku uzgodni\u0107 wersj\u0119 protoko\u0142u i uwierzytelnienie. W \u015brodowiskach produkcyjnych stosuj\u0119 szyfrowanie TLS, aby dane dost\u0119powe i \u015bcie\u017cki danych pozostawa\u0142y chronione. Sprawdzam r\u00f3wnie\u017c, czy klienci nie zapisuj\u0105 nazw u\u017cytkownik\u00f3w w logach w postaci niezaszyfrowanej lub czy logi s\u0105 odpowiednio zamazywane.<\/p>\n\n<pre><code># Przyk\u0142ad: Uwierzytelnianie w jednym kroku\nHELLO 3 AUTH app1 bezpieczneHas\u0142o\n<\/code><\/pre>\n\n<h2>Automatyzacja CI\/CD i szablony konfiguracyjne<\/h2>\n\n<p>Modeluj\u0119 listy ACL jako kod. Role i u\u017cytkownicy powstaj\u0105 na podstawie szablon\u00f3w, kt\u00f3re wype\u0142niam zmiennymi (prefiks, kana\u0142y, kategorie) dla ka\u017cdego \u015brodowiska. W potoku przebiegaj\u0105 operacje walidacji: narz\u0119dzia linter sprawdzaj\u0105, czy \u017cadne polecenia @dangerous\/@admin nie trafiaj\u0105 do kont serwisowych, testy DRYRUN s\u0105 przeprowadzane na reprezentatywnych kluczach, a kontener do test\u00f3w smoke briefly uruchamia si\u0119 na izolowanej instancji Redis w celu weryfikacji AUTH, GET\/SET oraz Pub\/Sub w trybie end-to-end. Zmiany s\u0105 wdra\u017cane dopiero wtedy, gdy wszystkie kontrole zako\u0144cz\u0105 si\u0119 pomy\u015blnie, a w przypadku wycofania zmian poprzedni plik ACL jest natychmiast dost\u0119pny.<\/p>\n\n<h2>Subtelno\u015bci operacyjne: widoczno\u015b\u0107 i porz\u0105dkowanie<\/h2>\n\n<p>W codziennej pracy drobne u\u0142atwienia przynosz\u0105 ogromne korzy\u015bci. Dzi\u0119ki ACL WHOAMI mog\u0119 szybko sprawdzi\u0107, na jakim koncie faktycznie pracuje klient \u2013 co jest szczeg\u00f3lnie cenne w przypadku z\u0142o\u017conych \u0142a\u0144cuch\u00f3w narz\u0119dzi. Regularnie usuwam konta \u201ezombie\u201c: dezaktywowane us\u0142ugi trac\u0105 swoich u\u017cytkownik\u00f3w (\u201eoff\u201c), has\u0142a s\u0105 usuwane (\u201eresetpass\u201c), a uprawnienia do kluczy i kana\u0142\u00f3w s\u0105 kasowane (\u201eresetkeys\u201c, \u201eresetchannels\u201c). Przestrzegam konwencji nazewniczych dla u\u017cytkownik\u00f3w (np. team_service_env), co przyspiesza audyty i reakcje na incydenty.<\/p>\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Planuj\u0119 <strong>ACL<\/strong> Od samego pocz\u0105tku tworz\u0119 jednego u\u017cytkownika na ka\u017cd\u0105 us\u0142ug\u0119 i \u015bci\u015ble ograniczam jego polecenia, prefiksy kluczy oraz kana\u0142y. W przypadku konfiguracji wymagaj\u0105cych konserwacji korzystam z oddzielnego pliku ACL, wprowadzam zmiany w spos\u00f3b kontrolowany i dokumentuj\u0119 ka\u017cdy krok. Przestrzenie nazw z jasnymi prefiksami zapewniaj\u0105 bezpiecze\u0144stwo klient\u00f3w, a audyty, rotacja hase\u0142 i rejestrowanie dzia\u0142a\u0144 gwarantuj\u0105 niezawodno\u015b\u0107 dzia\u0142ania. W przypadku wra\u017cliwych scenariuszy uwzgl\u0119dniam dodatkowo separacj\u0119 architektoniczn\u0105, aby kontrola dost\u0119pu i izolacja techniczna wsp\u00f3\u0142dzia\u0142a\u0142y ze sob\u0105. W ten spos\u00f3b wsp\u00f3lnie u\u017cywana instancja Redis staje si\u0119 \u0142atwa w zarz\u0105dzaniu, <strong>bezpieczny<\/strong> Platforma dla wielu grup u\u017cytkownik\u00f3w.<\/p>","protected":false},"excerpt":{"rendered":"<p>Listy kontroli dost\u0119pu (ACL) w Redis przeznaczone dla \u015brodowisk wielou\u017cytkownikowych zapewniaj\u0105 wi\u0119ksze bezpiecze\u0144stwo Redis dzi\u0119ki jasno okre\u015blonym uprawnieniom u\u017cytkownik\u00f3w, regu\u0142om dotycz\u0105cym kluczy oraz kontrolowanemu dost\u0119powi.<\/p>","protected":false},"author":1,"featured_media":21428,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[794],"tags":[],"class_list":["post-21435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit-computer_und_internet"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"104","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"redis acl","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21428","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=21435"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21435\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/21428"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=21435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=21435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=21435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}