Przejdź do głównej zawartości

Automatyzacja zgodności regulacyjnej

Automatyzacja zgodności regulacyjnej wykorzystuje agentów AI do kodowania wymagań SOC 2, HIPAA i GDPR jako wykonywalnych polityk egzekwowanych w pipeline’ach CI/CD zamiast zbierania dowodów ręcznie. Hooki pre-commit i bramki CI wychwytują naruszenia przed wdrożeniem, historia Git staje się ścieżką audytową automatycznie, a agent szkicuje pakiety dowodów, dokumenty przepływu danych i handlery DSAR, które człowiek recenzuje przed audytorem.

Twoja firma właśnie przeszła audyt SOC 2 Type II, ale zbieranie dowodów zajęło trzem inżynierom dwa pełne tygodnie: kopiowanie logów z pół tuzina systemów do arkuszy kalkulacyjnych, pisanie narracyjnych opisów kontroli, robienie zrzutów ekranu konfiguracji na dowód, że polityka była egzekwowana. W następnym kwartale audytor poprosi o te same dowody, a do tego o potwierdzenie, że nie trafiła do wydania żadna zależność na licencji GPL, i o diagram przepływu danych pokazujący, gdzie znajdują się dane osobowe obywateli UE. Inżynier, który wiedział, gdzie wszystko leży, właśnie odszedł z firmy.

Zgodność regulacyjna nie jest opcjonalna, ale otaczająca ją praca ręczna już tak. To dokładnie ten rodzaj powtarzalnej, dowodochłonnej roboty, w której agent kodujący AI jest dobry: czyta repozytorium, szkicuje skrypty zbierające dowody, podłącza bramki CI egzekwujące mechanizm kontrolny i zamienia kod w narrację, jakiej oczekuje audytor. Ty pozostajesz recenzentem; agent wykonuje pisanie.

  • Promptu, który audytuje repozytorium pod kątem konkretnego mechanizmu kontrolnego SOC 2 (CC6.1, CC8.1) i zwraca tabelę luk z dowodami w formacie file:line
  • Wzorców compliance-as-code egzekwujących politykę w CI/CD, plus hooków pre-commit i hooków na poziomie agenta, które blokują naruszenie, zanim w ogóle zostanie zacommitowane
  • Zadania GitHub Actions, które wywala build na niedozwolonych licencjach zależności, oraz bramki sekretów gitleaks, którą agent podłączy za ciebie
  • Generowania ścieżek audytowych z historii Git, danych recenzji z GitHuba i stanu Terraform
  • Promptów tworzących pakiety dowodów SOC 2, sprawdzenia przepływu PHI pod HIPAA, handlery DSAR i dokument przepływu danych GDPR
  • Serwerów MCP, które zamieniają zbieranie dowodów w jeden krok zamiast dziesięciu

Główna idea: zakoduj wymagania regulacyjne jako wykonywalne reguły uruchamiane automatycznie. Zamiast udowadniać zgodność wstecz, nie dopuszczasz niezgodności do wdrożenia — a każde uruchomienie egzekwujące zostawia po sobie datowany artefakt, który sam w sobie jest dowodem.

  1. Zmapuj jeden mechanizm kontrolny na swój kod. Przetłumacz pojedynczą kontrolę (SOC 2 CC6.1, HIPAA 164.312, GDPR Artykuł 25) na coś sprawdzalnego i ustal, gdzie już ją spełniasz, a gdzie nie.

  2. Egzekwuj ją na każdej warstwie, która potrafi egzekwować. Hooki agenta zatrzymują złą edycję, zanim zostanie zapisana. Hooki pre-commit wychwytują ją lokalnie. Bramki CI/CD blokują scalenie. Skanery infrastructure-as-code walidują wdrożenie.

  3. Wygeneruj kolektor dowodów. Każde sprawdzenie egzekwujące produkuje wpis z timestampem, a skrypt na żądanie ściąga ochronę gałęzi, zatwierdzenia i rekordy wdrożeń. Razem tworzą twoją ścieżkę audytową.

  4. Napisz narrację, którą czyta audytor. Agent agreguje logi egzekwowania, historię Git i stan infrastruktury w prozę i diagramy, jakich oczekują audytorzy.

Traktuj wszystko, co produkuje agent, jako pierwszą wersję roboczą do recenzji, nigdy jako ostatnie słowo audytora. Tryb awarii, który kosztuje cię finding, to pewna siebie, schludna, niesprawdzalna tabela.

Zacznij wąsko. Wybierz jeden mechanizm kontrolny i poproś agenta, by znalazł, gdzie go spełniasz, a gdzie nie. Sztuczka polega na wymuszeniu cytatów file:line, żebyś mógł zweryfikować każdą tezę zamiast ufać podsumowaniu.

Klauzula „do not invent” ma znaczenie. Prompty dotyczące zgodności to miejsce, gdzie modele najbardziej kuszą się o halucynowanie schludnej, w pełni zgodnej odpowiedzi. Żądanie cytatów zamienia „zaufaj mi” w coś, co możesz wyrywkowo sprawdzić w 30 sekund.

Mechanika kierowania agenta na repozytorium różni się w zależności od narzędzia:

Otwórz repozytorium i przełącz Agenta na model klasy planistycznej (Fable 5 lub Opus 5 do dokładnych audytów, Sonnet 5 do codziennych przebiegów). Wklej prompt w trybie Agent i dodaj @Codebase, aby przeszukał cały projekt, a nie tylko otwarte pliki. Cursor renderuje tabelę luk w treści; kliknij każdy cytat file:line, aby przeskoczyć prosto do dowodu i go potwierdzić.

Najbardziej niezawodne egzekwowanie zgodności odbywa się w pipeline CI/CD. Kod naruszający politykę nigdy nie trafia do produkcji, ponieważ pipeline go odrzuca.

Wygeneruj pipeline w trybie agenta, a następnie użyj checkpointów Cursora i przeglądu różnic, aby zweryfikować każdą wygenerowaną regułę. Reguły zgodności są z natury dopasowaniem dokładnym, więc krok wizualnego przeglądu ma tutaj większe znaczenie niż w większości przepływów pracy.

@codebase "Create a GitHub Actions workflow that enforces the following compliance
policies before any code can be merged to main:
1. All secrets must be stored in environment variables, never hardcoded
(scan for patterns like API keys, passwords, tokens)
2. All database queries must use parameterized statements
(no string concatenation in SQL)
3. All user-facing endpoints must have authentication middleware
4. All PII fields must be encrypted at rest (check schema definitions)
5. All changes to auth-related files require two approvals
For each check, log the result to a compliance-evidence.json artifact
with timestamp, check name, result (pass/fail), and affected files.
Generate the workflow file and any helper scripts needed."

Przed zaakceptowaniem różnicy ustaw checkpoint Cursora i sprawdź każdą wygenerowaną regułę w odniesieniu do faktycznego języka twojej kontroli. Regex, który jest nieco zbyt szeroki, oznaczy każdy PR; ten, który jest zbyt wąski, po cichu przepuści naruszenia. Checkpoint pozwala cofnąć pojedynczą złą regułę bez regenerowania całego workflow.

Ze wszystkiego, co możesz bramkować, licencje zależności i sekrety zwracają się najszybciej. Sprawdzanie licencji to czysta polityka, więc agent może napisać je wprost:

Z sekretami jest inaczej. Dwa poniższe prompty wyglądają podobnie i nie są wymienne: pierwszy to jednorazowa inwentaryzacja tego, co już leży w drzewie, uruchamiana przez agenta i czytana przez człowieka; stałą bramką jest gitleaks, podłączony przez agenta, ale nigdy przez niego napisany. Nigdy nie pozwól agentowi ręcznie składać skanera sekretów — jego zestaw reguł to zgadywanie, zestaw gitleaks jest utrzymywany i testowany.

Hooki pre-commit dają deweloperom natychmiastowy feedback, zanim kod opuści ich maszynę. To szybsze niż czekanie na CI i zmniejsza liczbę naruszeń u źródła. Agent, który pisze twój kod, może być bramkowany na tych samych identyfikatorach kontroli o warstwę wcześniej.

Wygeneruj standardowy .pre-commit-config.yaml, a następnie użyj trybu agenta, aby dodać reguły specyficzne dla projektu i przejrzyj każdą z nich w różnicy przed commitem.

"Generate a pre-commit hook configuration (.pre-commit-config.yaml) that
enforces these compliance rules locally:
1. No secrets in committed files (use detect-secrets or gitleaks)
2. No TODO/FIXME comments in files under src/security/
3. All TypeScript files must have 'use strict' or strict mode enabled
4. Database migration files must include a rollback step
5. API route files must import from the auth middleware module
For each rule that fails, print a clear message explaining the violation
and how to fix it. Also create a COMPLIANCE.md that documents each hook
and the regulatory requirement it addresses."

Dla samej części z sekretami poproś o sprawdzone narzędzie, a nie o własne reguły:

Add a pre-commit hook using gitleaks that blocks commits containing secrets,
plus a CI job that runs `gitleaks detect` on every PR.

Cursor edytuje .pre-commit-config.yaml i plik workflow. Przejrzyj diff w panelu Source Control, a następnie zastage’uj lokalnie fałszywą linię AWS_SECRET_ACCESS_KEY=..., aby potwierdzić, że hook faktycznie ją blokuje, zanim mu zaufasz. To przenośna, niezależna od języka warstwa, którą dostaje każdy współpracownik niezależnie od tego, jakiego edytora używa.

Audytorzy potrzebują dowodów, że kontrole były egzekwowane w czasie, nie tylko w momencie audytu. Automatyczna ścieżka audytowa zbiera dane o egzekwowaniu w sposób ciągły.

Twoja historia Git już zawiera bogatą ścieżkę audytową. AI może wyodrębnić z niej zdarzenia istotne dla zgodności.

Zmiany infrastruktury również potrzebują ścieżek audytowych. Jeśli używasz Terraform, CloudFormation lub Pulumi, każda zmiana jest już wersjonowana.

Uruchom to interaktywnie w trybie agenta, gdy przygotowujesz się do okna audytowego i chcesz czytać ustalenia na bieżąco, a następnie wejść w szczegóły konkretnych różnic Terraform w edytorze.

@codebase "Generate an infrastructure compliance report by analyzing:
1. All Terraform state changes in the past quarter
2. Security group modifications (who changed what, when)
3. IAM policy changes and their justifications from PR descriptions
4. Encryption configuration status for all data stores
5. Network access control changes
Cross-reference each change against our SOC 2 CC6.1 (logical access)
and CC6.6 (boundary protection / network controls) requirements. Flag
any changes that lack a corresponding approval in the PR process.
Output as a structured report with evidence links to specific commits."

Cursor łączy każde ustalenie z commitem, więc możesz otworzyć różnicę w edytorze i na własne oczy ocenić, czy zmiana naprawdę odpowiada uzasadnieniu z PR, zanim raport trafi do audytora.

Audyty SOC 2 Type II wymagają dowodów, że kontrole działały efektywnie przez okres, zwykle 6-12 miesięcy. Ręczne generowanie tych dowodów to najbardziej czasochłonna część audytu.

Kolektor, który uruchomisz ponownie rankiem w dniu audytu

Dział zatytułowany „Kolektor, który uruchomisz ponownie rankiem w dniu audytu”

Zanim powstanie duży pakiet, zbuduj małą powtarzalną rzecz: skrypt, który ściąga dowód na żądanie, żeby dowód nigdy nie był jednorazowym zapisem rozmowy.

Przejrzyj to, co wyprodukuje. Potwierdź, że wywołuje prawdziwe punkty końcowe gh api / Octokit (a nie wymyślone), że czyta token ze środowiska zamiast wpisywać go na sztywno i że mapowanie mechanizmów kontrolnych w komentarzu nagłówkowym jest uczciwe. Następnie uruchom go raz i porównaj wzrokiem JSON z tym, co widzisz w interfejsie GitHuba.

Składaj pakiet interaktywnie, abyś mógł korygować zakres w trakcie pracy agenta — otwórz w edytorze eksport z dostawcy tożsamości lub plik Terraform i potwierdź, że dowód się zgadza, zanim trafi do dokumentu.

"Generate a complete SOC 2 Type II evidence package for the past quarter.
For each Trust Service Criteria, collect the following:
CC6.1 (Logical Access Controls):
- User access reviews (export from our identity provider)
- Role-based access control documentation
- MFA enforcement evidence (percentage of users with MFA enabled)
- Privileged access inventory
CC6.2 (System Account Management):
- Service account inventory with last rotation dates
- Automated credential rotation evidence from CI/CD logs
- Account lifecycle documentation (creation, modification, termination)
CC6.6 (Boundary Protection) and CC6.7 (Data Classification / Transmission):
- Network architecture diagram (generate from Terraform)
- Data classification matrix
- Data flow diagrams for PII (encryption in transit)
CC8.1 (Change Management):
- All PRs merged to main with approval status
- CI/CD pipeline pass rates
- Deployment logs with rollback instances
- Change advisory board meeting notes (if applicable)
For each control, provide:
1. Control description
2. Evidence collected
3. Testing results (effective/deficiency)
4. Recommendations for improvement
Output as a structured document that an auditor can review directly."

Zgodność z HIPAA wymaga konkretnych zabezpieczeń technicznych dla chronionych informacji zdrowotnych (PHI). Narzędzia AI mogą egzekwować te zabezpieczenia w kodzie.

// Example: AI-generated PHI access logging middleware
import { auditLogger } from '~/lib/compliance/audit';
import { classifyData } from '~/lib/compliance/data-classification';
export async function phiAccessMiddleware(request: Request, next: Function) {
const classification = await classifyData(request);
if (classification.containsPHI) {
await auditLogger.log({
timestamp: new Date().toISOString(),
userId: request.auth.userId,
action: request.method,
resource: request.url,
dataClassification: 'PHI',
justification: request.headers.get('X-Access-Justification'),
ipAddress: request.headers.get('X-Forwarded-For'),
});
}
return next(request);
}

GDPR wymaga konkretnych możliwości: obsługa żądań dostępu podmiotów danych (DSAR), prawo do usunięcia, zarządzanie zgodami i rejestry przetwarzania danych.

Zbuduj handler w trybie agenta i ustaw checkpoint przed zaakceptowaniem każdego adaptera magazynu danych — ścieżka usuwania jest destrukcyjna, więc chcesz przejrzeć logikę usuwania/anonimizacji w różnicy, a nie ufać jej w ciemno.

"Generate a DSAR (Data Subject Access Request) handler that:
1. Accepts a user identifier (email or user ID)
2. Searches all data stores for records associated with that user:
- PostgreSQL (users, orders, payments, support_tickets)
- Redis cache (session data, preferences)
- S3 (uploaded documents, profile images)
- Analytics events (PostHog)
- Email service (Resend delivery logs)
3. Compiles all data into a structured JSON export
4. Generates a human-readable PDF summary
5. Logs the DSAR fulfillment for our processing records
6. Can also handle right-to-erasure by deleting/anonymizing all records
Include proper error handling for partial failures (e.g., one data store
is unreachable). The response should indicate which sources were
successfully queried and which failed, so we can retry."

Ostatni odcinek większości audytów to proza: opis przepływu danych, który audytor lub inspektor ochrony danych (DPO) może przeczytać. Agent potrafi prześledzić pola danych osobowych przez kod znacznie szybciej, niż ty zdołasz je wyszukać przez grep — o ile zmusisz go do cytowania źródeł i sygnalizowania niepewności.

Diagram Mermaid renderuje się bezpośrednio w większości narzędzi do dokumentacji i daje twojemu DPO obraz zamiast ściany tekstu. Znacznik „NEEDS REVIEW” to zawór bezpieczeństwa — wyłapuje pola, których agent nie zdołał w pełni prześledzić, aby człowiek domknął lukę.

Które serwery MCP i skille naprawdę się tu opłacają

Dział zatytułowany „Które serwery MCP i skille naprawdę się tu opłacają”

Zbieranie dowodów staje się dramatycznie krótsze, gdy agent może odpytywać twoje systemy bezpośrednio, zamiast wywoływać CLI. Serwery GitHub i Postgres powyżej wykonują większość pracy; dwa kolejne warto podłączyć:

  • Sentry MCP (https://mcp.sentry.dev/mcp) — pobieraj historię incydentów i błędów jako dowód dla mechanizmów kontrolnych dostępności i reagowania na incydenty.
  • Filesystem MCP — do zawężenia agenta do konkretnego katalogu z dowodami podczas generowania raportów.

Jeśli naprawdę potrzebujesz skryptowo obsłużyć klienta MCP (zamiast pozwolić agentowi go prowadzić), konstrukcja SDK jest specyficzna — pakiet eksportuje Client, a nie nadrzędny MCPClient, i łączy się przez transport, nigdy przez goły ciąg z nazwą serwera:

// Connect a programmatic MCP client to the GitHub server
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const client = new Client({ name: 'compliance-evidence', version: '1.0.0' });
await client.connect(
new StreamableHTTPClientTransport(new URL('https://api.githubcopilot.com/mcp/'))
);

Po stronie Skilli jednozadaniowy skill do code review z otwartego marketplace’u skilli (przeglądaj skills.sh i instaluj przez npx skills add <owner/repo>) jest lżejszą alternatywą dla pełnego serwera MCP, gdy potrzebujesz jedynie spójnej, ukierunkowanej na zgodność recenzji przy każdym PR. Sięgnij po skill, gdy potrzebujesz powtarzalnego zachowania; sięgnij po serwer MCP, gdy agent potrzebuje żywego połączenia z systemem źródłowym.

Ciągłe skanowanie bezpieczeństwa wychwytuje luki zanim trafią do produkcji. Kluczem jest integracja skanów w przepływy pracy, z których deweloperzy już korzystają, a nie dodawanie oddzielnych bramek bezpieczeństwa, które nauczą się omijać.

.github/workflows/compliance-security.yml
name: Compliance Security Scan
on:
pull_request:
branches: [main]
schedule:
- cron: '0 6 * * 1' # Weekly Monday scan
jobs:
dependency-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run dependency audit
run: npm audit --json > audit-results.json
- name: Analyze results
run: |
node scripts/compliance/analyze-audit.js \
--input audit-results.json \
--severity high,critical \
--output compliance-evidence/dependency-scan-$(date +%Y%m%d).json
- name: Upload compliance evidence
uses: actions/upload-artifact@v4
with:
name: compliance-evidence-deps
path: compliance-evidence/
retention-days: 365

Napisz reguły ESLint w trybie agenta i przetestuj je na prawdziwych plikach w edytorze — wklej znaną wadliwą instrukcję logowania i potwierdź, że reguła faktycznie się uruchamia, zanim zaufasz jej w CI.

"Create a static analysis configuration that checks for compliance-relevant
patterns in our codebase:
1. Data handling: PII must be logged with redaction, never raw values
2. Authentication: All API endpoints must check auth before processing
3. Encryption: Sensitive config values must use encrypted env vars
4. Logging: Security events must use the structured audit logger
5. Error handling: Error responses must not leak internal details
Use ESLint custom rules where possible. For checks ESLint cannot handle,
create standalone analysis scripts. Each rule should reference the
specific compliance requirement it enforces (e.g., SOC2-CC6.1, HIPAA-164.312)."

Automatyzuj cotygodniowe i kwartalne raporty, aby dane były zawsze aktualne i nikt nie musiał odtwarzać kwartału z pamięci.

scripts/compliance/generate-weekly-report.ts
import { getGitActivity } from './sources/git';
import { getCIResults } from './sources/ci';
import { getSecurityScans } from './sources/security';
import { getAccessReviews } from './sources/access';
import { renderReport } from './templates/weekly';
async function generateWeeklyComplianceReport() {
const period = { start: sevenDaysAgo(), end: now() };
const data = {
gitActivity: await getGitActivity(period),
ciResults: await getCIResults(period),
securityScans: await getSecurityScans(period),
accessReviews: await getAccessReviews(period),
};
const report = renderReport({
...data,
controls: mapToControls(data),
deficiencies: findDeficiencies(data),
recommendations: generateRecommendations(data),
});
await saveReport(report, `weekly-${period.end.toISOString()}`);
await notifyComplianceTeam(report.summary);
}

Agent oznacza mechanizm kontrolny jako „Met” bez prawdziwego dowodu. To tryb awarii, który zafunduje ci finding. Zawsze wymagaj cytatów file:line, a potem wyrywkowo sprawdź trzy z nich. Jeśli cytat wskazuje na plik, który nie zawiera deklarowanego mechanizmu, odrzuć całą tabelę i uruchom ponownie ze ściślejszym promptem.

Agent wymyśla serwer MCP lub pakiet npm. Nie wklejaj regulatory-mcp-server, @compliance/* ani podobnych — żaden nie istnieje. Zweryfikuj każdy proponowany pakiet poleceniem npm view <pkg> version, zanim go podłączysz, i trzymaj się serwerów MCP GitHub/Postgres/Sentry/Filesystem wymienionych powyżej.

Skanery zawodzą w obie strony. Wygenerowany regex przepuszcza prawdziwy sekret; skaner sekretów oznacza fixture testowy z fałszywym kluczem API. Na pierwszy problem użyj gitleaks lub gh secret-scanning zamiast ręcznie składanych reguł, na drugi — listy dozwolonych, którą przeglądasz kwartalnie, żeby po cichu nie urosła do ukrywania prawdziwych znalezisk.

Dane licencyjne są błędne dla zależności tranzytywnych. license-checker czyta zadeklarowane licencje, które bywają błędnie oznaczone u źródła. W przypadku czegokolwiek, co masz zamiar wydać pod audytem, ręcznie potwierdź oznaczone pakiety copyleft, zanim wywalisz lub odblokujesz build.

Ścieżka audytowa ma luki. Jeśli deweloperzy pushują bezpośrednio do main, omijając proces PR, ścieżka pomija zatwierdzenia. Egzekwuj ochronę gałęzi na poziomie repozytorium, nie tylko w CI. Zarówno GitHub, jak i GitLab obsługują wymaganie zatwierdzeń PR jako ustawienie repozytorium.

Handler DSAR pomija magazyn danych. Gdy dodawana jest nowa usługa, ktoś zapomina dodać ją do handlera. Prowadź rejestr magazynów danych, w którym każda nowa usługa musi się zarejestrować, i dodaj powyższe sprawdzenie pokrycia w CI, które weryfikuje, że każde połączenie z bazą danych w kodzie ma odpowiadający adapter DSAR.

Wygenerowany dokument ujawnia prawdziwy sekret lub próbkę danych osobowych. Powiedz agentowi, by zredagował wartości i odwoływał się wyłącznie do nazw pól. Przejrzyj diff przed zacommitowaniem czegokolwiek do evidence/.

Raporty zgodności odnoszą się do nieaktualnych polityk. Dokumentacja mówi, że rotujesz poświadczenia co 90 dni, ale skrypt rotacji uruchamia się co 180. Generator raportów powinien sprawdzać faktyczne daty rotacji względem zadeklarowanej polityki i oznaczać rozbieżność, zamiast powtarzać politykę.

Hooki pre-commit spowalniają deweloperów. Jeśli hooki zgodności trwają dłużej niż 5 sekund, deweloperzy pomijają je przez --no-verify. Trzymaj sprawdzenia pre-commit szybkie (skanowanie sekretów, reguły lint) i przenieś wolniejsze (pełny audyt zależności, skanowanie infrastruktury) do CI.

Wymagania regulacyjne się zmieniają. Gdy regulacja się aktualizuje — nowe wytyczne GDPR, zrewidowane kryteria SOC 2 — twoje zakodowane polityki też muszą się zmienić. Subskrybuj kanały aktualizacji regulacyjnych i planuj kwartalne przeglądy reguł compliance-as-code względem aktualnych wymagań.