# Security Hardening for AI Gateways in APIM **Last updated:** 2026-02 **Status:** GA **Category:** API Management & AI Gateway --- ## Introduksjon Sikkerhet for AI-gateways krever en flerlagstilnaerming som dekker bade tradisjonelle API-sikkerhetstrusler og AI-spesifikke angrepsoverflater. Azure API Management som AI gateway tilbyr over 20 sikkerhetspolicies, fra IP-filtrering og sertifikatvalidering til AI-spesifikk innholdsmoderasjon og prompt injection-forebygging. En godt herdet AI gateway beskytter mot uautorisert tilgang, datalekkasje, prompt injection og misbruk av kostbare AI-ressurser. For norsk offentlig sektor er sikkerhetsherding av AI-gateways obligatorisk gitt Datatilsynets retningslinjer for AI, NSMs grunnprinsipper for IKT-sikkerhet, Forvaltningslovens krav om forsvarlig saksbehandling, og EU AI Act som stiller krav til hoyrisiko-AI-systemer. En offentlig virksomhet som eksponerer AI-tjenester ma kunne dokumentere at tilstrekkelige sikkerhetstiltak er implementert pa alle nivaer. Denne referansen dekker seks sikkerhetsomrader: nettverkstilgangskontroll, prompt injection-forebygging, PII-deteksjon og -maskering, mTLS-autentisering, revisjonssporing og compliance-kontroller. Hver seksjon inkluderer APIM policy XML-eksempler, Bicep-maler og anbefalinger for norsk offentlig sektor. --- ## IP-hvitelisting og -filtrering ### IP-filter policy Begrens AI-API-tilgang til kjente IP-adresser eller nettverksomrader: ```xml
203.0.113.50
198.51.100.10
``` ### Dynamisk IP-filtrering med Named Values ```xml ``` ### Nettverksisolering med VNet For maksimal sikkerhet, deploy APIM i et virtuelt nettverk: | Modus | Internett-tilgang | VNet-tilgang | Anbefalt for | |-------|-------------------|-------------|-------------| | External | Ja (gateway) | Ja | Innbyggertjenester med Front Door foran | | Internal | Nei | Ja | Rent interne AI-tjenester | | VNet Integration | Utgaende til VNet | Nei | Standard v2-tier | ```bicep resource apiManagement 'Microsoft.ApiManagement/service@2023-09-01-preview' = { name: apimName location: location sku: { name: 'Premium' capacity: 1 } properties: { virtualNetworkType: 'Internal' // Kun tilgjengelig via VNet virtualNetworkConfiguration: { subnetResourceId: apimSubnet.id } } } ``` --- ## Prompt Injection-forebygging ### Forstar trusselen Prompt injection er den mest kritiske AI-spesifikke trusselen (OWASP LLM Top 10 #1). Angripere injiserer instruksjoner i brukerinndata for a: - Overstyre systemprompt - Eksfiltrere sensitiv informasjon - Fa modellen til a utfore uautoriserte handlinger - Omga sikkerhetsmekanismer ### APIM Content Safety Policy ```xml prompt-injection-patterns offensive-content-no ``` ### Policy-basert prompt injection-deteksjon ```xml m["role"]?.ToString() == "user") .Select(m => m["content"]?.ToString() ?? "")); }" /> msg.Contains(p)); }"> application/json @{ return new JObject { ["error"] = new JObject { ["code"] = "content_policy_violation", ["message"] = "Foresporselen ble blokkert av sikkerhetspolicy.", ["request_id"] = context.RequestId.ToString() } }.ToString(); } >", "\\n\\n", "```", "ignore", "pretend" }; return suspiciousPatterns.Any(p => msg.Contains(p)); }"> @($"Suspicious prompt pattern from {context.Request.IpAddress}, sub: {context.Subscription?.Name}") ``` ### Microsoft Prompt Shields For avansert beskyttelse, bruk Microsoft Prompt Shields (via Microsoft Entra Global Secure Access): | Funksjon | Beskrivelse | |----------|-------------| | Jailbreak-deteksjon | Identifiserer forsok pa a omga sikkerhetsinstruksjoner | | Indirect injection | Oppdager injeksjon via dokumenter eller URLs | | Data exfiltration | Blokkerer forsok pa a trekke ut data | | Nettverksniva-enforcement | Fungerer uavhengig av applikasjonskode | --- ## PII-deteksjon og -maskering ### PII-filtrering i inbound requests ```xml @((string)context.Variables["sanitizedBody"]) @($"PII detected and masked in request from {context.Subscription?.Name}") ``` ### PII-filtrering i outbound responses ```xml @{ var body = context.Response.Body.As(preserveContent: true); // Apply same PII patterns as inbound body = System.Text.RegularExpressions.Regex.Replace( body, @"\b(\d{2})(0[1-9]|1[0-2])(\d{2})\d{5}\b", "$1$2$3*****"); body = System.Text.RegularExpressions.Regex.Replace( body, @"\b[\w.+-]+@[\w.-]+\.\w{2,}\b", "[EMAIL]"); body = System.Text.RegularExpressions.Regex.Replace( body, @"\b(?:\+47|0047)?\s*(?:\d\s*){8}\b", "[TELEFON]"); return body; } ``` ### PII-deteksjonskategorier | Kategori | Monster | Eksempel | |----------|---------|---------| | Fodselsnummer | `\d{11}` | 01019012345 | | E-postadresse | standard e-post regex | ola@eksempel.no | | Telefonnummer | +47 / 8 siffer | +47 912 34 567 | | Kortnummer | 16 siffer | 4111 1111 1111 1111 | | Kontonummer | `\d{4}.\d{2}.\d{5}` | 1234.56.78901 | | Organisasjonsnr | `\d{9}` | 987654321 | --- ## Mutual TLS (mTLS) ### Klient-sertifikatautentisering For AI-API-er med hoyeste sikkerhetskrav, bruk mTLS: ```xml {"error":{"code":"certificate_required","message":"A valid client certificate is required."}} ``` ### Sertifikatbasert tilgangskontroll per AI-modell ```xml {"error":{"code":"model_not_authorized","message":"Standard tier does not have access to GPT-4o. Use gpt-4o-mini."}} {"error":{"code":"certificate_not_authorized","message":"Client certificate not recognized."}} ``` ### Sertifikathondtering med Azure Key Vault ```bicep resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = { name: keyVaultName } resource apimCertificate 'Microsoft.ApiManagement/service/certificates@2023-09-01-preview' = { parent: apiManagement name: 'client-root-ca' properties: { keyVault: { secretIdentifier: '${keyVault.properties.vaultUri}secrets/client-root-ca' identityClientId: null // Use system-assigned identity } } } ``` --- ## Revisjonssporing og audit trail ### Krav til revisjonssporing | Krav | Kilde | APIM-losning | |------|-------|-------------| | Sporbarhet | Forvaltningsloven | Request/response logging med korrelasjons-ID | | Tilgangskontroll | NSM Grunnprinsipper | IP-filter, sertifikat, JWT-validering | | Dataminimering | GDPR Art. 5 | PII-maskering for lagring | | Loggoppbevaring | Arkivloven | Log Analytics retention (90-730 dager) | | Endringssporing | Intern revisjon | APIM audit logs i Activity Log | ### Omfattende audit trail-policy ```xml @{ var audit = JObject.Parse((string)context.Variables["auditContext"]); audit["statusCode"] = context.Response.StatusCode; audit["responseTime"] = (DateTime.UtcNow - DateTime.Parse(audit["timestamp"].ToString())).TotalMilliseconds; // Add token usage if available var responseBody = context.Response.Body.As(preserveContent: true); if (responseBody?["usage"] != null) { audit["promptTokens"] = responseBody["usage"]["prompt_tokens"]; audit["completionTokens"] = responseBody["usage"]["completion_tokens"]; audit["totalTokens"] = responseBody["usage"]["total_tokens"]; } return audit.ToString(); } ``` ### KQL: Sikkerhetsrevisjon ```kusto // Security audit: Failed authentication attempts ApiManagementGatewayLogs | where TimeGenerated > ago(24h) | where ResponseCode in (401, 403) | summarize FailedAttempts = count(), UniqueIPs = dcount(CallerIpAddress) by CallerIpAddress, ApiId, bin(TimeGenerated, 1h) | where FailedAttempts > 10 | order by FailedAttempts desc ``` ```kusto // Security audit: Unusual token consumption ApiManagementGatewayLlmLog | where TimeGenerated > ago(24h) | summarize AvgTokens = avg(TotalTokens), MaxTokens = max(TotalTokens), Requests = count() by SubscriptionId | where MaxTokens > 10000 or Requests > 1000 | order by MaxTokens desc ``` --- ## Sikkerhetssjekksliste for AI Gateway | Kontroll | Prioritet | Status | |----------|-----------|--------| | Microsoft Entra ID-autentisering | P0 | | | IP-filtrering (intern/VPN) | P0 | | | Rate limiting (requests og tokens) | P0 | | | Content Safety policy | P0 | | | Prompt injection-deteksjon | P0 | | | TLS 1.2+ patvunget | P0 | | | PII-deteksjon i prompts | P1 | | | Audit trail-logging | P1 | | | mTLS for hoysikkerhet | P1 | | | VNet-integrasjon | P1 | | | Subscription key + JWT | P1 | | | WAF (via Front Door) | P2 | | | DDoS Protection | P2 | | | Private Link | P2 | | | Geo-filtrering | P2 | | --- ## Referanser - [AI gateway - Security and safety](https://learn.microsoft.com/en-us/azure/api-management/genai-gateway-capabilities#security-and-safety) -- AI gateway sikkerhet - [Authenticate and authorize access to AI APIs](https://learn.microsoft.com/en-us/azure/api-management/api-management-authenticate-authorize-ai-apis) -- autentisering - [llm-content-safety policy](https://learn.microsoft.com/en-us/azure/api-management/llm-content-safety-policy) -- innholdssikkerhet - [How to secure APIs using client certificate authentication](https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-mutual-certificates-for-clients) -- mTLS - [Restrict caller IPs policy](https://learn.microsoft.com/en-us/azure/api-management/ip-filter-policy) -- IP-filtrering - [Recommendations to mitigate OWASP API Security Top 10](https://learn.microsoft.com/en-us/azure/api-management/mitigate-owasp-api-threats) -- OWASP-anbefalinger - [Secure Azure platform services (PaaS) for AI](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/ai/platform/security) -- Cloud Adoption Framework - [Artificial Intelligence Security benchmark](https://learn.microsoft.com/en-us/security/benchmark/azure/mcsb-v2-artificial-intelligence-security) -- AI sikkerhetsbenchmark - [Protect enterprise AI with Prompt Shield](https://learn.microsoft.com/en-us/entra/global-secure-access/how-to-ai-prompt-shield) -- Prompt Shields - [Security planning for LLM-based applications](https://learn.microsoft.com/en-us/ai/playbook/technology-guidance/generative-ai/mlops-in-openai/security/security-plan-llm-application) -- sikkerhetsplanlegging ## For Cosmo - **Bruk denne referansen** nar kunden trenger a herde sin AI gateway for produksjon, oppfylle compliance-krav, eller etablere et forsvar-i-dybden for AI-tjenester. - For norsk offentlig sektor er P0-kontrollene i sjekklisten obligatoriske. Start alltid med Microsoft Entra ID, IP-filtrering, rate limiting og Content Safety -- disse gir den storste sikkerhetseffekten med lavest implementeringskostnad. - PII-filtrering i APIM er en ekstra sikkerhetslinje, men bor ikke vaere eneste tiltak. Anbefal ogsa PII-filtrering i applikasjonslaget og i systemprompt-instruksjoner. - For organisasjoner som behandler sensitiv informasjon (helseopplysninger, personopplysninger), anbefal VNet-integrasjon i Internal mode + mTLS + Azure Private Link som minimumskrav. - Prompt injection-deteksjon i APIM-policies er et forstforsvar, men avanserte angrep krever Azure AI Content Safety med Prompt Shields. Anbefal bade policy-basert og AI-basert deteksjon i lag.