DEF-03 · Obrona i utwardzanie

Narzędzia agenta o minimalnych uprawnieniach: capability scoping, bramkowanie i human-in-the-loop

Jak ograniczyć uprawnienia agenta AI do minimum: capability scoping, bramkowanie uprawnień, dynamiczne zawężanie narzędzi i human-in-the-loop dla działań nieodwracalnych.

Defense in depth: atak jest tłumiony przez kolejne warstwy kontroli, zanim dotrze do uprzywilejowanego działaniaatakfiltrwejściaL1uprawnieniaL2izolacjaL3zgodaczłowiekaL4każda warstwa zakłada, że poprzednia zawiodła — zasięg szkody maleje od lewej do prawej

Narzędzia agenta o minimalnych uprawnieniach: capability scoping, bramkowanie i human-in-the-loop

Agent AI jest tak niebezpieczny, jak niebezpieczne są narzędzia, które mu wręczysz. Sam model językowy niczego nie zepsuje — dopóki nie podłączysz go do API, które potrafi usunąć bazę danych, wysłać przelew albo upublicznić dane klientów. Dlatego najważniejsza decyzja w architekturze agenta nie dotyczy promptu ani modelu, tylko tego, do czego agent w ogóle może sięgnąć.

Ten artykuł należy do klastra obrony i opisuje cztery uzupełniające się mechanizmy ograniczania uprawnień agenta: capability scoping (zawężanie zdolności), bramkowanie uprawnień, dynamiczne zawężanie zestawu narzędzi do konkretnego zadania oraz human-in-the-loop dla działań nieodwracalnych.

Co znaczą minimalne uprawnienia agenta i jak je wymusić?

Minimalne uprawnienia agenta to zasada, zgodnie z którą agent w danym momencie ma dostęp wyłącznie do tych narzędzi i tych zakresów działania, których wymaga bieżące zadanie — i niczego więcej. To przeniesienie klasycznej reguły najmniejszego przywileju (least privilege) z kont użytkowników na autonomiczne systemy AI. W praktyce wymusza się ją na trzech poziomach jednocześnie: jakie narzędzia agent w ogóle widzi (capability scoping), na jakich danych i operacjach może je uruchomić (bramkowanie) oraz które wywołania wymagają zatwierdzenia przez człowieka (human-in-the-loop).

Kluczowa zmiana sposobu myślenia: nie pytasz „czy agent jest godny zaufania“, tylko „co najgorszego może się stać, jeśli nie jest“. Model może zostać przejęty przez prompt injection ukryty w treści strony, dokumentu albo wiadomości e-mail, którą czyta. Jeśli przejęty agent ma dostęp tylko do odczytu kalendarza, szkoda jest ograniczona. Jeśli ma klucz do bramki płatności, kończy się katastrofą. Minimalne uprawnienia nie ograniczają funkcji — ograniczają zasięg możliwych szkód.

Najprostszy test, czy dobrze ustawiłeś uprawnienia: wyobraź sobie, że każde narzędzie agenta wykonuje atakujący, a nie model. Jeśli przy takim założeniu zestaw narzędzi nadal wygląda bezpiecznie, masz dobry punkt wyjścia.

Czym jest capability scoping i jak go zastosować?

Capability scoping to zawężenie zbioru zdolności (narzędzi, funkcji, zakresów API) udostępnianych agentowi do absolutnego minimum potrzebnego do jego roli. Różni się od kontroli na poziomie infrastruktury tym, że działa na warstwie samego agenta — decyduje, co model w ogóle „widzi“ jako dostępne.

W praktyce zaczynasz od podziału narzędzi według skutków, nie według wygody:

  • Odczyt bez efektów ubocznych — wyszukiwanie, pobieranie dokumentu, odczyt rekordu. Niskie ryzyko.
  • Zapis odwracalny — utworzenie szkicu, dodanie komentarza, zapis do tabeli z miękkim usuwaniem. Średnie ryzyko.
  • Zapis nieodwracalny lub kosztowny — przelew, wysłanie wiadomości na zewnątrz, trwałe usunięcie, zmiana uprawnień, zakup. Wysokie ryzyko.

Capability scoping polega na tym, że agent domyślnie dostaje tylko pierwszą kategorię, a każde narzędzie z dwóch kolejnych trzeba świadomie i wyraźnie dopuścić — z uzasadnieniem dla konkretnej roli agenta.

Drugi wymiar to granulacja samego narzędzia. „Dostęp do bazy danych“ to zdolność zbyt szeroka. Lepiej dać narzędzie pobierz_zamowienie(id), które zwraca jedno zamówienie, niż wykonaj_sql(zapytanie), które pozwala na cokolwiek. Im węższy interfejs narzędzia, tym mniej miejsca na nadużycie — zarówno przez halucynację modelu, jak i przez wstrzyknięty atak. Wąskie, typowane narzędzia z walidacją argumentów to fundament całej obrony.

Na czym polega bramkowanie uprawnień?

Bramkowanie uprawnień to warstwa pośrednicząca między decyzją agenta a faktycznym wykonaniem narzędzia. Agent proponuje wywołanie; bramka sprawdza, czy wolno je wykonać, na jakich danych i w jakim kontekście — i dopiero wtedy przepuszcza je, blokuje albo kieruje do zatwierdzenia.

Najważniejsze, by uprawnienia egzekwować poza modelem. Instrukcja w prompcie w rodzaju „nie usuwaj produkcyjnych rekordów“ to nie zabezpieczenie, tylko sugestia, którą prompt injection obejdzie w jednym zdaniu. Realną granicę stawia kod wokół narzędzia, do którego model nie ma dostępu.

Dobra bramka kontroluje przynajmniej cztery rzeczy:

  1. Tożsamość i zakres — czy ten agent, działający w imieniu tego użytkownika, ma prawo do tej operacji. Najlepiej, gdy agent dziedziczy uprawnienia konkretnego użytkownika, a nie działa jako wszechmocne konto serwisowe.
  2. Argumenty wywołania — czy parametry mieszczą się w dozwolonym zakresie (np. kwota przelewu poniżej limitu, odbiorca z listy dozwolonych, identyfikator należący do tego klienta).
  3. Kontekst i tempo — ile podobnych operacji agent wykonał w ostatniej minucie. Nagła seria usunięć to sygnał, że coś poszło nie tak.
  4. Ślad audytowy — każde wywołanie zapisane: kto, co, z jakimi argumentami i z jakim skutkiem. Bez tego nie zbadasz incydentu po fakcie.

Bramkowanie warto budować jako jeden punkt przejścia — wszystkie wywołania narzędzi przechodzą przez tę samą warstwę polityk. Warunki if rozsiane po kodzie rozjadą się przy pierwszej refaktoryzacji i zostawią luki.

Jak dynamicznie zawężać zestaw narzędzi do zadania?

Statyczny zestaw narzędzi to zestaw dobrany raz, na wszelki wypadek — i dlatego prawie zawsze zbyt szeroki. Dynamiczne zawężanie polega na tym, że agent na każdym etapie zadania dostaje tylko te narzędzia, których ten etap rzeczywiście wymaga.

Takie podejście opłaca się z dwóch powodów naraz. Po pierwsze, bezpieczeństwo: agent przetwarzający fakturę nie potrzebuje narzędzia do wysyłania e-maili, więc po prostu go nie widzi — a czego nie widzi, tego nie nadużyje, nawet po udanym wstrzyknięciu. Po drugie, jakość: model z trzema trafnymi narzędziami wybiera lepiej niż model z czterdziestoma, z których trzydzieści siedem to szum rozpraszający uwagę.

Praktyczne wzorce zawężania:

  • Według fazy zadania — etap zbierania danych ma tylko narzędzia odczytu; etap zapisu odblokowuje się dopiero po zatwierdzeniu planu. Klasyczny rozdział „najpierw plan, potem działanie“.
  • Według roli w architekturze wieloagentowej — agent-badacz nie ma narzędzi zapisu, agent-wykonawca dostaje je dopiero z gotowym, zweryfikowanym planem. Wąskie gardło uprawnień zamiast jednego agenta-omnibusa.
  • Według progresji zaufania — nowe lub rzadziej sprawdzane przepływy startują z węższym zestawem, który rozszerza się po okresie obserwacji.
  • Według wyniku klasyfikacji wejścia — jeśli warstwa wstępna rozpozna, że zapytanie dotyczy raportowania, agent dostaje narzędzia raportowe, a nie cały katalog.

Kluczowa zasada: zawężanie ma być domyślnie zamknięte. Agent zaczyna od pustego albo minimalnego zestawu, a narzędzia dochodzą w miarę potrzeby — nie odwrotnie. Lista, z której odejmuje się „to, co niepotrzebne“, zawsze zostawi coś, o czym zapomniałeś.

Kiedy stosować human-in-the-loop dla działań nieodwracalnych?

Human-in-the-loop (człowiek w pętli) to wymóg, by określone wywołania narzędzi zatrzymały się i czekały na wyraźne zatwierdzenie przez człowieka, zanim się wykonają. To ostatnia linia obrony przed skutkami, których nie da się cofnąć.

Reguła doboru jest prosta i opiera się na jednym pytaniu: czy tę operację da się odwrócić w rozsądnym czasie i rozsądnym kosztem? Jeśli nie — wymagaj zatwierdzenia. Do typowych kandydatów należą:

  • transfery pieniędzy i każdy zakup;
  • wysyłka komunikacji na zewnątrz organizacji (e-maile do klientów, posty, wiadomości);
  • trwałe usunięcie danych bez kosza i kopii;
  • zmiany uprawnień, ról i konfiguracji bezpieczeństwa;
  • wdrożenia na produkcję i operacje na infrastrukturze;
  • udostępnianie danych wrażliwych poza zaufaną granicę.

Żeby human-in-the-loop działał, a nie był fikcją, musi spełnić kilka warunków. Przede wszystkim człowiek musi widzieć konkret — pełną propozycję wywołania z faktycznymi argumentami, a nie ogólnik „agent chce coś usunąć“. Zatwierdzanie w ciemno jest gorsze niż jego brak, bo daje złudzenie kontroli.

Drugi warunek to świadome przeciwdziałanie znieczuleniu na zgody. Jeśli agent prosi o zgodę przy każdym drobiazgu, człowiek szybko zaczyna klikać „zatwierdź“ odruchowo. Dlatego bramki zatwierdzeń stawia się wyłącznie przy operacjach z najwyższej kategorii ryzyka — całą resztę przepuszczasz automatycznie. Kilka pytań o dużym ciężarze chroni lepiej niż lawina pytań o nic.

Trzeci warunek: bezpieczny stan domyślny. Brak odpowiedzi w wyznaczonym czasie ma oznaczać blokadę, nie wykonanie. Przekroczenie limitu czasu nigdy nie powinno przepychać działania nieodwracalnego.

Jak te cztery mechanizmy układają się w jedną obronę?

Capability scoping, bramkowanie, dynamiczne zawężanie i human-in-the-loop to nie konkurencyjne podejścia, tylko warstwy ustawione jedna za drugą. Każda łapie to, co przepuści poprzednia.

Mechanizm Co ogranicza Gdzie działa Główne ryzyko, gdy go brak
Capability scoping Jakie narzędzia agent w ogóle posiada Konfiguracja agenta Zbyt szeroki zasięg możliwych szkód
Bramkowanie uprawnień Czy i na jakich danych wolno wykonać wywołanie Warstwa pośrednicząca (poza modelem) Egzekwowanie polityki tylko w prompcie
Dynamiczne zawężanie Które narzędzia są dostępne na danym etapie Czas działania, per zadanie/rola Stały, zbyt szeroki zestaw narzędzi
Human-in-the-loop Które działania wymagają zgody człowieka Bramka zatwierdzeń przed wykonaniem Nieodwracalne skutki bez kontroli

Spięte razem dają obronę głębszą niż każdy z osobna. Capability scoping zawęża pulę startową. Dynamiczne zawężanie odejmuje z niej resztę zależnie od kontekstu. Bramkowanie pilnuje każdego dopuszczonego wywołania na poziomie danych i tożsamości. Human-in-the-loop zatrzymuje to, czego cofnąć się nie da. Atak musiałby przejść przez wszystkie cztery — a to znacznie trudniejsze niż obejście pojedynczej instrukcji w prompcie.

Najczęstszy błąd przy wdrażaniu: traktowanie tego jako jednorazowej konfiguracji. Zestaw narzędzi agenta rośnie razem z produktem, a każde nowe narzędzie to nowa powierzchnia ataku. Przegląd uprawnień agenta powinien być stałym punktem przy każdej zmianie — tak samo jak przegląd uprawnień nowego mikroserwisu.

Od czego zacząć w istniejącym systemie?

Jeśli masz już działającego agenta i chcesz dokręcić uprawnienia, kolejność jest następująca. Najpierw zinwentaryzuj wszystkie narzędzia i oznacz każde jako odczyt, zapis odwracalny lub zapis nieodwracalny. Następnie przenieś egzekwowanie polityk z promptu do kodu — zbuduj jeden punkt przejścia dla wywołań. Potem ustaw human-in-the-loop dla całej kategorii nieodwracalnej. Na końcu zacznij zawężać dynamicznie: odbieraj agentowi narzędzia, których konkretne przepływy nie używają, i sprawdzaj, czy jakość spada (zwykle rośnie).

Każdy z tych kroków osobno zmniejsza zasięg możliwych szkód, więc nie musisz czekać z wdrożeniem na komplet. Jedna dobrze postawiona bramka na operacji usuwania danych daje więcej niż najlepszy prompt z prośbą o ostrożność.

Najwięcej dają te decyzje wtedy, gdy zapadają na etapie projektowania agenta, a nie przy poprawkach po fakcie — o tym, jak wpleść wybór narzędzi i granic uprawnień w cały proces inżynierski budowy agenta, piszemy osobno w bezpiecznej inżynierii agentowej.


Artykuł ma charakter edukacyjny i opisuje ogólne wzorce projektowe bezpieczeństwa agentów AI. Konkretne wdrożenie należy dostosować do własnego modelu zagrożeń i wymogów regulacyjnych.

Najczęstsze pytania

Czym różni się capability scoping od bramkowania uprawnień?

Capability scoping decyduje, jakie narzędzia agent w ogóle posiada — działa na poziomie konfiguracji samego agenta. Bramkowanie uprawnień działa o jeden poziom niżej: gdy agent już zaproponuje wywołanie dozwolonego narzędzia, bramka sprawdza tożsamość, argumenty i kontekst i dopiero wtedy przepuszcza, blokuje lub kieruje do zatwierdzenia. Scoping ogranicza pulę narzędzi, bramkowanie pilnuje każdego użycia z tej puli.

Dlaczego nie wystarczy zakazać niebezpiecznych działań w prompcie?

Bo instrukcja w prompcie to sugestia, nie granica. Prompt injection ukryty w czytanej przez agenta treści potrafi nadpisać taką instrukcję w jednym zdaniu. Realne uprawnienia trzeba egzekwować w kodzie wokół narzędzia, do którego model nie ma dostępu i którego nie zmieni żadnym tekstem wejściowym.

Które działania agenta powinny zawsze wymagać zatwierdzenia przez człowieka?

Te, których nie da się łatwo cofnąć: przelewy i zakupy, wysyłka komunikacji na zewnątrz organizacji, trwałe usunięcie danych bez kopii, zmiany uprawnień i konfiguracji bezpieczeństwa, wdrożenia na produkcję oraz udostępnianie danych wrażliwych poza zaufaną granicę. Operacje odwracalne i bez efektów ubocznych przepuszcza się automatycznie, żeby nie wywołać zmęczenia zatwierdzaniem.

Czy dynamiczne zawężanie narzędzi nie pogarsza jakości odpowiedzi agenta?

Przeciwnie — zwykle ją poprawia. Model z kilkoma trafnymi narzędziami wybiera lepiej niż model z kilkudziesięcioma, z których większość to szum rozpraszający uwagę. Dynamiczne zawężanie poprawia więc jednocześnie bezpieczeństwo (mniejszy zasięg rażenia po wstrzyknięciu) i trafność wyboru narzędzia.

Jak uniknąć zmęczenia zatwierdzaniem przy human-in-the-loop?

Stawiaj bramki zatwierdzeń wyłącznie przy operacjach z najwyższej kategorii ryzyka, a całą resztę przepuszczaj automatycznie. Pokazuj człowiekowi konkretne argumenty wywołania, a nie ogólnik. Mniej pytań o większej wadze chroni lepiej niż lawina pytań o drobiazgi, przy której człowiek klika zatwierdzenie odruchowo.

Od czego zacząć ograniczanie uprawnień w już działającym agencie?

Najpierw zinwentaryzuj narzędzia i oznacz je jako odczyt, zapis odwracalny lub nieodwracalny. Potem przenieś egzekwowanie polityk z promptu do jednego punktu przejścia w kodzie. Następnie ustaw zatwierdzanie przez człowieka dla całej kategorii nieodwracalnej. Na końcu zawężaj dynamicznie — odbieraj agentowi narzędzia, których konkretne przepływy nie używają.