Sammensætbar AI Mikro‑service Arkitektur for Skalerbar Automatisering af Sikkerhedsspørgeskemaer
Virksomheder drukner i en stadigt voksende strøm af sikkerhedsspørgeskemaer, leverandørvurderinger og compliance‑audits. Traditionelle monolitiske værktøjer har svært ved at holde trit, især når de skal integreres med forskellige produktøkosystemer, understøtte flersprogede anmodninger og levere real‑time revisionsspor.
En sammensætbar mikro‑service arkitektur, bygget omkring store sprogmodeller (LLM’er) og retrieval‑augmented generation (RAG), giver en måde at skalere automatiseringen på, mens fleksibilitet og styring—som regulerede industrier kræver—bevares. I denne guide vil vi:
- Skitsere de centrale designprincipper, der holder systemet sikkert, auditabelt og udvidbart.
- Gå igennem en referenceimplementation illustreret med Mermaid.
- Vise, hvordan hver tjeneste kan udgives uafhængigt på Kubernetes, serverless FaaS eller edge‑runtime.
- Give konkrete anbefalinger til data‑styring, observabilitet og løbende forbedring.
TL;DR: Del automatiseringsplatformen for spørgeskemaer op i små, veldefinerede tjenester, lad LLM’er ligge bag et statsløst inferenslag, og brug begivenhedsdrevne pipelines til at opretholde en enkelt kilde til sandhed for beviser og versionskontrol.
1. Hvorfor sammensætte i stedet for at bygge en kæmpemonolit?
| Monolitisk Tilgang | Sammensætbar Mikro‑service |
|---|---|
| Enkel kodebase, svært at skalere specifikke arbejdsbelastninger (fx LLM‑inferens). | Uafhængig skalering – AI‑inferens kan køre på GPU‑noder, mens lagring forbliver på omkostningseffektive objektlagre. |
| Tæt kobling gør opdateringer risikable; en fejl i UI’en kan bringe hele systemet ned. | Løs kobling via asynkrone begivenheder eller HTTP‑API’er isolerer fejl. |
| Begrænset sprog‑agnostisk integration – ofte låst til én stack. | Polyglot‑support – hver tjeneste kan skrives i det sprog, der er bedst egnet til opgaven (Go til auth, Python til LLM‑orchestration, Rust til høj‑gennemløbst pipelines). |
| Revision og compliance bliver et mareridt, når log‑filer er sammenblandet. | Centraliseret begivenhedslager + uforanderligt revisionslog giver et klart, forespørgbart spor for regulatorer. |
Den sammensættelige model omfavner filosofien “du bygger kun, hvad du har brug for, og udskifter kun, hvad du ikke har brug for”. Den matcher den dynamiske karakter af sikkerhedsspørgeskemaer, hvor nye kontrolrammer (fx ISO 27001 Rev 2) dukker op regelmæssigt, og teams skal kunne tilpasse sig hurtigt.
2. Kernearchitektoniske Søjler
- Stateless API‑gateway – indgangspunkt for UI, SaaS‑connectors og eksterne værktøjer. Håndterer godkendelse, anmodningsvalidering og throttling.
- Domænespecifikke Mikro‑services – hver indkapsler en afgrænset kontekst:
- Spørgeskema‑service – gemmer spørgeskema‑metadata, versionering og opgavefordeling.
- Bevis‑service – administrerer artefakter (politikker, skærmbilleder, revisionslogge) i et uforanderligt objektlager.
- AI‑orchestreringstjeneste – sammensætter prompts, kører RAG‑pipelines og returnerer svar‑udkast.
- Ændrings‑detekteringstjeneste – overvåger bevis‑opdateringer, udløser gen‑evaluering af berørte svar.
- Notifikationstjeneste – skubber Slack, Teams eller e‑mail‑begivenheder til interessenter.
- Begivenheds‑bus (Kafka / Pulsar) – garanterer mindst‑en‑gang‑levering af domænebegivenheder (fx
EvidenceUploaded,AnswerDrafted). - Observabilitets‑stack – OpenTelemetry‑spor på tværs af tjenester, Prometheus‑metrics og Loki‑logge.
- Policy‑as‑Code Motor – evaluerer compliance‑regler (skrevet i Rego eller OPA) før et svar markeres “endeligt”.
Alle tjenester kommunikerer via gRPC (for lav latency) eller REST (for eksterne integrationer). Designet opfordrer til dumme rør, smarte endepunkter—forretningslogikken bor, hvor den hører hjemme, mens bussen kun transporterer beskeder.
3. Dataflow – Fra Spørgsmål til Auditabelt Svar
flowchart TD
subgraph UI["Brugergrænseflade"]
UI1["\"Web‑UI\""] -->|Indsend spørgeskema| AG["\"API‑gateway\""]
end
AG -->|Auth & Validate| QMS["\"Spørgeskema‑service\""]
QMS -->|Hent skabelon| AIOS["\"AI‑orchestreringstjeneste\""]
AIOS -->|Hent relevant bevis| ES["\"Bevis‑service\""]
ES -->|Bevis‑objekter| AIOS
AIOS -->|Generer udkast svar| RAG["\"RAG‑pipeline\""]
RAG -->|LLM‑output| AIOS
AIOS -->|Gem udkast| QMS
QMS -->|Emit AnswerDrafted| EB["\"Begivenheds‑bus\""]
EB -->|Trigger| CDS["\"Ændrings‑detekteringstjeneste\""]
CDS -->|Gen‑kør hvis bevis ændret| AIOS
CDS -->|Emit AnswerUpdated| EB
EB -->|Notify| NS["\"Notifikationstjeneste\""]
NS -->|Push til Slack/E‑mail| UI
style UI fill:#f9f,stroke:#333,stroke-width:2px
style AG fill:#bbf,stroke:#333,stroke-width:1px
style QMS fill:#bfb,stroke:#333,stroke-width:1px
style AIOS fill:#ffb,stroke:#333,stroke-width:1px
style ES fill:#fbb,stroke:#333,stroke-width:1px
style RAG fill:#fdd,stroke:#333,stroke-width:1px
style CDS fill:#ddf,stroke:#333,stroke-width:1px
style NS fill:#cfc,stroke:#333,stroke-width:1px
Vigtige øjeblikke i flowet:
- Bruger indsender et nyt spørgeskema eller vælger et eksisterende.
- API‑gateway validerer JWT, tjekker rate‑limits og sender videre til Spørgeskema‑service.
- Spørgeskema‑service henter spørgeskema‑skabelonen og sender en begivenhed til AI‑orchestreringstjenesten.
- AI‑orchestreringstjenesten udfører et retrieval‑step—den forespørger Bevis‑service på alle artefakter, der er relevante for den aktuelle kontrol (ved hjælp af vektor‑similaritet eller nøgleords‑match).
- De hentede kontekster, sammen med prompt‑skabelonen, sendes gennem en RAG‑pipeline (fx
openAI/gpt‑4o‑preview). - Udkastet gemmes tilbage i Spørgeskema‑service, markeret “venter på godkendelse.”
- Ændrings‑detekteringstjenesten overvåger nye bevis‑uploads. Hvis en politik opdateres, udløser den RAG‑pipeline for berørte svar igen.
- Endelige anmeldere accepterer eller redigerer udkastet; ved accept validerer Policy‑as‑Code Motoren, at svaret opfylder alle regel‑konfigurationer, før det bliver forankret i et uforanderligt revisionslog.
4. Implementeringsdetaljer
4.1. API‑gateway (Envoy + OIDC)
- Routing –
POST /questionnaires/:id/answers→spørgeskema‑service. - Sikkerhed – Gennemtving scopes (
questionnaire:write). - Rate limiting – 100 anmodninger/min per tenant for at beskytte nedstrøms LLM‑omkostninger.
4.2. Spørgeskema‑service (Go)
type Questionnaire struct {
ID string `json:"id"`
Version int `json:"version"`
Controls []Control `json:"controls"`
Drafts map[string]Answer `json:"drafts"` // key = control ID
AssignedTo map[string]string `json:"assigned_to"` // userID
}
- Bruger PostgreSQL til relationsdata, EventStoreDB til domænebegivenheder.
- Eksponerer gRPC‑metoder
GetTemplate,SaveDraft,FinalizeAnswer.
4.3. Bevis‑service (Python + FastAPI)
- Gemmer filer i MinIO eller AWS S3 med bucket‑niveau kryptering.
- Indexerer indhold i Qdrant (vektor‑DB) for lignende‑søgning.
- Tilbyder endpoint
POST /searchsom accepterer en forespørgsel og returnerer top‑k artefakt‑ID’er.
4.4. AI‑orchestreringstjeneste (Python)
def generate_answer(question: str, evidence_ids: List[str]) -> str:
evidence = fetch_evidence(evidence_ids)
context = "\n".join(evidence)
prompt = f"""You are a compliance specialist.
Using the following evidence, answer the question concisely:\n{context}\n\nQuestion: {question}"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role":"system","content":prompt}]
)
return response.choices[0].message.content
- RAG – Kombiner vektor‑søgning med et system‑prompt, der instruerer modellen i at citere bevis‑ID’er.
- Caching – Gemmer genererede svar i 24 t for at undgå dubletter af LLM‑kald.
4.5. Ændrings‑detekteringstjeneste (Rust)
- Abonnerer på
EvidenceUploaded‑begivenheder. - Beregner en hash af det nye artefakt og kører en diff mod eksisterende bevis knyttet til hver kontrol.
- Hvis diff‑en overstiger en konfigurerbar tærskel, udgiver den
AnswerRequiresRegen.
4.6. Notifikationstjeneste (Node.js)
- Lytter på
AnswerDrafted,AnswerFinalized,AnswerRequiresRegen. - Formaterer Slack‑blocks, Teams Adaptive Cards eller e‑mail‑templates.
- Støtter deduplikation – notificerer kun én gang pr. ændring pr. spørgeskema.
5. Sikkerhed & Styring
| Bekymring | Afhjælpning |
|---|---|
| Data‑lækage – LLM‑prompter kan indeholde følsom politiktekst. | Brug on‑prem LLM‑inferens (fx Llama 3.2) inden for et VPC. Maskér PII før afsendelse til eksterne API’er. |
| Uautoriseret bevis‑adgang | Gennemtving fin‑granulære ACL’er ved hjælp af OPA‑politikker i Bevis‑service. |
| Model‑drift – Svar forringes over tid. | Planlæg periodisk evaluering mod et benchmark‑korpus og gen‑train prompt‑templates. |
| Auditabilitet | Alle tilstandsovergange logges i et uforanderligt event‑log gemt på WORM‑S3. |
| Overholdelse af GDPR/CCPA | Implementér right‑to‑be‑forgotten‑workflow, der sletter bruger‑specifik bevis fra vektor‑DB og objektlager (GDPR). |
| ISO 27001‑overholdelse | Valider, at bevis‑retention, kryptering og adgangskontrol‑politikker matcher ISO 27001‑standarden. |
| HIPAA / SOC 2 | Udvid OPA‑regler til at håndhæve de nødvendige safeguards for sundheds‑ eller SaaS‑leverandører. |
6. Skaleringstrategier
- Horizontal Pod Autoscaling (HPA) – Skaler AI‑orchestrering‑pods baseret på GPU‑udnyttelse (
nvidia.com/gpu). - Burst‑able Queues – Brug Kafka‑partitionering til at isolere høj‑trafik‑tenants.
- Cold‑Start Reducering – Hold en varm pulje af containere til LLM‑inferens‑serveren (fx med KEDA og en custom scaler).
- Omkostningsstyring – Anvend token‑baseret budgettering pr. tenant; throttle eller fakturér over‑forbrug automatisk.
7. Observabilitet & Kontinuerlig Forbedring
- Distribueret Sporing – OpenTelemetry‑spænd fra UI‑request → API‑gateway → AI‑orchestrering → RAG → Bevis‑service.
- Metrics –
answer_draft_latency_seconds,evidence_upload_bytes,llm_token_usage. - Log‑aggregering – Strukturere JSON‑logge med
request_idpropagere på tværs af tjenester. - Feedback‑Loop – Efter endelig godkendelse, indfang reviewer‑kommentarer (
review_score). Brug disse i en reinforcement learning‑model, der justerer prompt‑temperatur eller vælger alternative bevis‑kilder.
8. Trin‑for‑Trin Migrationsvej for Eksisterende Teams
| Fase | Mål | Aktiviteter |
|---|---|---|
| 0 – Opdagelse | Kortlæg nuværende spørgeskema‑workflow. | Identificér datakilder, definer kontrol‑taksonomi. |
| 1 – Byg Fundamentet | Deploy API‑gateway, authentikation og basistjenester. | Containerisér spørgeskema‑service og bevis‑service. |
| 2 – Introducér AI | Kør RAG på et pilot‑spørgeskema. | Brug en sandbox‑LLM, verificér udkast manuelt. |
| 3 – Begivenhedsdrevet Automatisering | Tilslut Ændrings‑detektering‑pipeline. | Aktivér auto‑regen ved bevis‑opdatering. |
| 4 – Styrk Governance | Tilføj OPA‑politikker, uforanderligt revisionslog. | Skift til produktions‑LLM (on‑prem). |
| 5 – Skaler & Optimer | Auto‑scale GPU‑pods, implementér omkostnings‑kontrol. | Deploy observabilitets‑stack, opsæt SLO’er. |
Ved gradvis at adoptere den sammensætbare arkitektur undgår teams “big‑bang”‑risikoen og kan demonstrere tidlig ROI (ofte en 30‑50 % reduktion i håndterings‑tid).
9. Fremtidssikring af Stakken
- Federated Learning – Træn letvægts‑adapters på hver tenants data uden at flytte rå‑beviser udenfor, hvilket forbedrer svar‑relevans og respekterer data‑suverænitet.
- Zero‑Trust Service Mesh – Brug Istio eller Linkerd med mutual TLS til at sikre intern trafik.
- Semantisk Governance – Udvid Policy‑as‑Code‑motoren til også at validere den semantiske lighed mellem bevis og kontroltekst.
- Generativ Sporbarhed – Gem den præcise LLM‑temperature, top‑p og system‑prompt ved siden af hvert svar for revisor‑inspektion.
10. Konklusion
En sammensætbar mikro‑service arkitektur forvandler automatisering af sikkerhedsspørgeskemaer fra et besværligt manuelt arbejde til en skalerbar, auditabel og løbende forbedrende motor. Ved at adskille ansvarsområder, udnytte LLM’er via et statsløst RAG‑lag og sammenkoble alt med et begivenhedsdrevet backbone, kan organisationer:
- Besvare leverandør‑vurderinger på minutter i stedet for dage.
- Holde compliance‑beviser altid opdateret med automatisk ændrings‑detektion.
- Give regulatorer et klart, uforanderligt revisionsspor.
Start i det små, iterer hurtigt, og lad mikro‑service‑filosofien guide dig mod en fremtid, hvor compliance er en funktion, ikke en flaskehals.
