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.
Czego się nauczysz o automatyzacji zgodności
Dział zatytułowany „Czego się nauczysz o automatyzacji zgodności”- 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
Cztery ruchy compliance-as-code
Dział zatytułowany „Cztery ruchy compliance-as-code”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.
-
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.
-
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.
-
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ą.
-
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.
Mapowanie jednego mechanizmu kontrolnego na kod
Dział zatytułowany „Mapowanie jednego mechanizmu kontrolnego na kod”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ć.
Z katalogu głównego repozytorium uruchom claude i wklej prompt. Claude Code czyta pliki za pomocą Read, Glob i Grep, budując tabelę, więc cytuje prawdziwe ścieżki. Aby zapisać wynik jako artefakt do folderu audytowego, uruchom go w trybie headless:
claude -p "Audit this repo against SOC 2 CC6.1 and output a markdown gap table with file:line evidence. Only mark Met with a citation." \ --output-format json > soc2-cc6.1-gap.jsonUruchom codex w repozytorium i wklej prompt. Trzymaj zatwierdzenia ściśle dla audytu tylko do odczytu, żeby nigdy nie edytował plików:
codex --ask-for-approval untrusted --sandbox read-onlySandbox read-only gwarantuje, że agent może wszystko zbadać, ale nie może tknąć drzewa roboczego, gdy buduje tabelę dowodów.
Egzekwowanie polityk w CI/CD
Dział zatytułowany „Egzekwowanie polityk w CI/CD”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 compliancepolicies 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 middleware4. 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 artifactwith 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.
Przewagą Claude Code jest tutaj to, że ten sam agent działa zarówno interaktywnie, jak i w trybie headless, więc reguły wygenerowane lokalnie to te same reguły, które działają w CI. Zbuduj je raz, a następnie wywołuj Claude w trybie headless wewnątrz samego zadania zgodności.
claude "Create a compliance enforcement system for our CI/CD pipeline.
Requirements:- GitHub Actions workflow that runs on every PR to main- Secret detection: scan for hardcoded API keys, passwords, and tokens- SQL injection prevention: verify parameterized queries- Authentication checks: ensure all public endpoints use auth middleware- PII protection: validate encryption on sensitive database fields- Approval gates: require 2 reviewers for changes to auth/ and security/ dirs
Each check should produce structured JSON output with: { timestamp, check_name, result, affected_files, evidence_hash }
Store results as workflow artifacts for audit trail.Generate all files needed: workflow YAML, scanning scripts, and acompliance-report-generator that summarizes results."Następnie uruchom sam krok analizy w trybie headless z poziomu workflow, aby dowody JSON były produkowane przez tego samego agenta i parsowane deterministycznie:
- name: Compliance review (headless) run: | claude -p "Review the diff in this PR against the rules in .compliance/policies.md. Emit one JSON object per violation: { control_id, file, line, severity, fix }. Emit [] if clean." \ --output-format json --allowedTools "Read,Grep,Bash" \ > compliance-evidence/review-$(date +%Y%m%d-%H%M%S).json--output-format json daje ci wynik parsowalny maszynowo, na którym możesz oprzeć bramkowanie zadania, a artefakt z timestampem sam w sobie staje się dowodem audytowym.
Wyróżnikiem Codex jest zadanie w chmurze połączone z integracją z GitHubem: workflow egzekwujący można napisać i dostarczyć jako PR, bez uruchamiania go lokalnie przez kogokolwiek. Otwórz zadanie w chmurze, które wykonuje pracę i otwiera PR za ciebie.
Z poziomu terminala uruchom zadanie w chmurze i pobierz różnicę, gdy będzie gotowa:
codex cloud exec --env prod-ci "Add a GitHub Actions compliance gate that runs onevery PR to main: secret scanning, parameterized-query check, auth-middlewarecheck on public endpoints, PII-encryption check on schemas, and a 2-reviewerrequirement for auth/ and security/. Emit structured JSON evidence per check andupload it as a workflow artifact. Open a PR with the workflow and scripts."codex apply # apply the task's diff to your local working tree to reviewAlbo całkowicie pomiń terminal: skomentuj @codex add the compliance gate described in our SOC 2 checklist w śledzącym PR, a Codex uruchomi zadanie w chmurze, używając tego PR jako kontekstu, po czym wypchnie swoje zmiany z powrotem. Ponieważ praca trafia jako PR do przeglądu, samo wygenerowanie twoich reguł zgodności zostaje uchwycone w ścieżce audytowej zarządzania zmianami.
Dwie bramki, od których warto zacząć
Dział zatytułowany „Dwie bramki, od których warto zacząć”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.
Blokowanie naruszenia przed commitem
Dział zatytułowany „Blokowanie naruszenia przed commitem”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) thatenforces 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 enabled4. Database migration files must include a rollback step5. API route files must import from the auth middleware module
For each rule that fails, print a clear message explaining the violationand how to fix it. Also create a COMPLIANCE.md that documents each hookand 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.
Poza współdzielonym .pre-commit-config.yaml Claude Code ma własne natywne hooki, które uruchamiają się wokół działań samego agenta. Użyj hooka PreToolUse, aby sam agent był blokowany przed zapisaniem sekretu lub nieuwierzytelnionej trasy, a nie tylko blokowany w momencie commita.
claude "Add a Claude Code PreToolUse hook in .claude/settings.json that runson Edit and Write. The hook should run scripts/compliance/guard.sh on thefile being written and exit non-zero (blocking the edit) if it detects ahardcoded secret or a new API route missing the auth middleware import.Print the violated control ID so the block message is audit-friendly.Also generate the shared .pre-commit-config.yaml for git-level enforcement."Zabramkuj też commity agenta na gitleaks, tak aby zastage’owany sekret przerwał commit, który agent właśnie miał wykonać:
{ "hooks": { "PreToolUse": [ { "matcher": "Bash(git commit:*)", "hooks": [{ "type": "command", "command": "gitleaks protect --staged --redact" }] } ] }}Konfiguracja pre-commit wychwytuje to, co commituje człowiek; hooki Claude Code wychwytują to, co agent w ogóle próbuje zapisać i zacommitować. Wszystkie trzy warstwy emitują te same identyfikatory kontroli, więc naruszenie jest śledzalne do konkretnej klauzuli SOC 2 / HIPAA, niezależnie od tego, która z nich zadziała.
Potraktuj konfigurację hooków jako małą, łatwą do przejrzenia zmianę, którą możesz dostarczyć bez lokalnej konfiguracji. Wspomnij @codex w śledzącym zgłoszeniu lub PR i pozwól zadaniu w chmurze otworzyć PR:
@codex add pre-commit compliance hooks: gitleaks for secret detection, acustom hook blocking TODO/FIXME in src/security/, a hook requiring a rollbackblock in every DB migration, and a hook checking API routes import the authmiddleware. Add .pre-commit-config.yaml plus the custom scripts and open a PR.Aby zrobić to lokalnie, pozwól Codeksowi edytować pliki, ale trzymaj włączone zatwierdzanie poleceń, żebyś zobaczył instalację gitleaks:
codex --ask-for-approval on-request --sandbox workspace-writeNastępnie niech raz uruchomi gitleaks detect --no-git, aby udowodnić, że konfiguracja się parsuje. Tak czy inaczej zmiana trafia przez ten sam przepływ zatwierdzeń co każdy kod, więc dodanie zabezpieczenia samo w sobie jest logowane jako zdarzenie zarządzania zmianami.
Automatyczne generowanie ścieżki audytowej
Dział zatytułowany „Automatyczne generowanie ścieżki audytowej”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.
Ścieżka audytowa oparta na Git
Dział zatytułowany „Ścieżka audytowa oparta na Git”Twoja historia Git już zawiera bogatą ścieżkę audytową. AI może wyodrębnić z niej zdarzenia istotne dla zgodności.
Ścieżka audytowa infrastruktury
Dział zatytułowany „Ścieżka audytowa infrastruktury”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 quarter2. Security group modifications (who changed what, when)3. IAM policy changes and their justifications from PR descriptions4. Encryption configuration status for all data stores5. Network access control changes
Cross-reference each change against our SOC 2 CC6.1 (logical access)and CC6.6 (boundary protection / network controls) requirements. Flagany 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.
Audytorzy chcą dowodów zbieranych w sposób ciągły, a nie w noc poprzedzającą audyt. Tryb headless Claude Code pozwala uruchamiać ten sam audyt według harmonogramu i zrzucać raport prosto do twojego kubełka z dowodami — bez człowieka w pętli.
# scripts/compliance/infra-audit.sh — run from a weekly cron / scheduled CI jobclaude -p "Generate an infrastructure compliance audit report.Analyze Terraform state changes over the past 7 days. For each change extract:resource modified, Git author, PR number and approval status, and whether ittouches a security control (security groups, IAM, encryption, network ACLs).Map each finding to SOC 2 controls CC6.1 (logical access), CC6.6(boundary/network controls), and CC7.1 (detection of configuration changesand unauthorized components). Flag changes without proper PR approval." \ --output-format json --allowedTools "Read,Grep,Bash" \ > compliance-evidence/infra-audit-$(date +%Y%m%d).jsonPonieważ działa w trybie headless i emituje JSON, co tydzień otrzymujesz datowany, odporny na manipulacje artefakt, a dalszy krok może oblać zadanie (lub zaalarmować kanał zgodności) w momencie, gdy pojawi się niezatwierdzona zmiana IAM.
Codex pasuje, gdy audyt ma żyć w chmurze i sam się publikować zespołowi. Zaplanuj zadanie w chmurze albo skonfiguruj GitHub Action tak, by każdy PR dotyczący infrastruktury dostawał inline’owy przegląd zgodności.
on: pull_request: paths: ['infra/**', '**/*.tf']jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: openai/codex-action@v1 with: prompt-file: .github/codex/prompts/infra-audit.mdTrzymaj prompt w .github/codex/prompts/infra-audit.md (te same sprawdzenia Terraform/IAM/szyfrowania zmapowane na CC6.1, CC6.6, CC7.1). Dla doraźnego uruchomienia skomentuj @codex audit the infra changes in this PR against our SOC 2 controls, a Codex opublikuje ustalenia jako recenzję PR.
Generowanie pakietu dowodów SOC 2
Dział zatytułowany „Generowanie pakietu dowodów SOC 2”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ładanie pełnego pakietu
Dział zatytułowany „Składanie pełnego pakietu”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 description2. Evidence collected3. Testing results (effective/deficiency)4. Recommendations for improvement
Output as a structured document that an auditor can review directly."Pełny pakiet SOC 2 obejmuje kilka niezależnych domen dowodowych, co mapuje się czysto na sub-agentów: poproś Claude Code, by rozdzielił każdą rodzinę kontroli do własnego sub-agenta, tak aby zbierali dowody równolegle i raportowali do jednego koordynatora.
claude "Generate a SOC 2 Type II evidence package for Q4. Use a separatesub-agent per control family so they run in parallel, then merge the results:
- Sub-agent A — CC6.1: logical access controls (user reviews, RBAC, MFA)- Sub-agent B — CC6.2: system accounts (service account inventory, rotation)- Sub-agent C — CC6.6/CC6.7: boundary protection and data classification (network diagrams, data-flow/PII encryption)- Sub-agent D — CC8.1: change management (PR approvals, CI/CD logs, deployments)
Each sub-agent: describe the evidence needed, pull what is available from Githistory and CI/CD artifacts, document gaps requiring manual evidence, and rateeffectiveness with any deficiencies. The coordinator merges everything into oneauditor-ready document with an executive summary."Sub-agenci utrzymują okno kontekstowe każdej kontroli skupione na jej własnych dowodach i skracają czas rzeczywisty pracy nad pakietem, który w przeciwnym razie byłby jednym długim przebiegiem szeregowym.
Zbieranie dowodów jest długotrwałe i najlepiej obsłużyć je asynchronicznie. Zgłoś je jako zadanie w chmurze, które kompiluje pakiet i otwiera PR dodający go w compliance/evidence/, a następnie przejrzyj różnicę lokalnie.
codex cloud exec --env compliance "Generate a SOC 2 Type II evidence packagecovering CC6.1, CC6.2, CC6.6/CC6.7, and CC8.1. Pull evidence from Git history,CI/CD artifacts, and infrastructure configs. Flag gaps that require manualevidence. Write the result to compliance/evidence/soc2-q4.md and open a PR."codex apply # bring the task's diff into your working tree to reviewUruchamianie tego w chmurze oznacza, że pakiet regeneruje się w tym samym rytmie każdego kwartału bez angażowania lokalnej sesji, a wprowadzenie go jako PR poddaje same dowody kontroli zmian.
Wzorce zgodności HIPAA
Dział zatytułowany „Wzorce zgodności HIPAA”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 middlewareimport { 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);}Automatyzacja zgodności z GDPR
Dział zatytułowany „Automatyzacja zgodności z GDPR”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.
Automatyzacja żądań podmiotów danych
Dział zatytułowany „Automatyzacja żądań podmiotów 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 export4. Generates a human-readable PDF summary5. Logs the DSAR fulfillment for our processing records6. Can also handle right-to-erasure by deleting/anonymizing all records
Include proper error handling for partial failures (e.g., one data storeis unreachable). The response should indicate which sources weresuccessfully queried and which failed, so we can retry."Wygeneruj handler wraz z testami, a następnie oprzyj się na trybie headless, aby utrzymać pokrycie DSAR uczciwym w czasie — zaplanowane sprawdzenie claude -p dowodzące, że każdy magazyn danych wciąż ma adapter, samo w sobie jest dowodem na Artykuł 30 GDPR.
claude "Build a GDPR DSAR handler.
Given a user email or ID, it should:- Query all data stores (PostgreSQL, Redis, S3, analytics, email logs)- Compile user data into JSON export- Generate PDF summary for the data subject- Log the request for Article 30 processing records- Support right-to-erasure (delete/anonymize across all stores)- Handle partial failures gracefully
Create the handler, data store adapters, and the API endpoint.Include tests for the happy path and partial failure scenarios."Następnie dodaj do CI bramkę pokrycia, która oblewa się, gdy magazyn danych nie ma adaptera:
claude -p "List every persistent data store referenced in the codebase(DB connections, Redis clients, S3 buckets, external logging clients). Foreach, state whether a DSAR adapter exists. Emit JSON: { store, has_adapter }." \ --output-format json --allowedTools "Read,Grep"Handler DSAR obejmuje kilka adapterów i jest naturalnym kandydatem do asynchronicznego budowania. Zgłoś go jako zadanie w chmurze, które otwiera PR, i trzymaj prompt w repozytorium, aby praca była powtarzalna i łatwa do przejrzenia.
@codex build a GDPR DSAR handler that queries PostgreSQL, Redis, S3, andanalytics for all of a user's data. Support data export (JSON + PDF) andright-to-erasure across every store, log all requests for Article 30 records,and handle partial failures with retry. Add tests and open a PR.Wspomnienie @codex w śledzącym zgłoszeniu uruchamia zadanie w chmurze z tym zgłoszeniem jako kontekstem i wypycha handler z powrotem jako PR — więc logika usuwania przechodzi przegląd przez człowieka, zanim w ogóle będzie mogła zadziałać na danych produkcyjnych.
Szkicowanie narracji przepływu danych GDPR
Dział zatytułowany „Szkicowanie narracji przepływu danych GDPR”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 serverimport { 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.
Automatyzacja skanowania bezpieczeństwa
Dział zatytułowany „Automatyzacja skanowania bezpieczeństwa”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ć.
name: Compliance Security Scanon: 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: 365Analiza statyczna dla zgodności
Dział zatytułowany „Analiza statyczna dla zgodności”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-relevantpatterns in our codebase:
1. Data handling: PII must be logged with redaction, never raw values2. Authentication: All API endpoints must check auth before processing3. Encryption: Sensitive config values must use encrypted env vars4. Logging: Security events must use the structured audit logger5. 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 thespecific compliance requirement it enforces (e.g., SOC2-CC6.1, HIPAA-164.312)."Niektóre wzorce zgodności („czy ta odpowiedź błędu ujawnia stack trace?”) są semantyczne, nie składniowe, i statyczny linter ich nie widzi. Użyj trybu headless Claude Code jako semantycznego kontrolera w CI obok ESLinta, emitując ten sam JSON oznaczony identyfikatorami kontroli.
claude "Create compliance-focused static analysis rules.
Rules needed:- PII redaction in logs (no raw email, SSN, phone in log statements)- Auth middleware on all API routes- Encrypted env vars for sensitive config- Structured audit logging for security events- No internal details in error responses
Implement as ESLint custom rules where possible, standalone scriptsfor the rest. Tag each rule with its compliance requirement ID."Dla reguł, których ESLint nie potrafi wyrazić, dodaj do zadania PR semantyczny przebieg w trybie headless:
claude -p "Review changed files for compliance violations ESLint cannot catch:error responses leaking internal details, log statements with unredacted PII,endpoints missing an auth check. Emit JSON: { control_id, file, line, issue }." \ --output-format json --allowedTools "Read,Grep"Uruchom przebieg analizy statycznej jako część Codex GitHub Action, aby każdy PR był sprawdzany w CI, a ustalenia trafiały z powrotem jako recenzja, z promptem wersjonowanym w repozytorium.
# add to .github/workflows/compliance-security.yml- uses: openai/codex-action@v1 with: prompt-file: .github/codex/prompts/compliance-lint.mdTrzymaj .github/codex/prompts/compliance-lint.md oznaczający każde ustalenie identyfikatorem wymagania (SOC2-CC6.1, HIPAA-164.312). Dla doraźnego skanu @codex review for compliance regressions w PR uruchamia te same sprawdzenia jako zadanie w chmurze.
Zaplanowane raportowanie zgodności
Dział zatytułowany „Zaplanowane raportowanie zgodności”Automatyzuj cotygodniowe i kwartalne raporty, aby dane były zawsze aktualne i nikt nie musiał odtwarzać kwartału z pamięci.
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);}Kiedy psuje się compliance-as-code
Dział zatytułowany „Kiedy psuje się compliance-as-code”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ń.