Ren value-preserving label-relabel av de to norske header-labelene til engelsk på 51 ref-filer (22 bærer begge). Ny testet ren primitiv relabelHeaderDialect() (header-blokk-scoped, kollisjons-/multiforekomst-guard) + manifest-drevet driver relabel-dialect.mjs (frosset 51-fil-manifest, hard per-fil-invariant, idempotent, isMain-guard). **Dato:** bevisst UTE (body-template-felle → Enhet 2). Premiss-korreksjon i roadmap R22: tredje Dato-dialekt (16), 0 bold-duplikater (ikke 4), 1 datoløs (ikke 5), category-none = vindus-artefakt. test-relabel-dialect 11/11; diff +73/-73 0 linjer utover label; suite 782/782 exit 0.
950 lines
45 KiB
Markdown
950 lines
45 KiB
Markdown
# Zero Trust Architecture Applied to AI Services
|
||
|
||
**Category:** AI Security Engineering
|
||
**Last updated:** 2026-06-19
|
||
**Målgruppe:** Arkitekter som skal sikre AI-tjenester med Zero Trust-prinsipper
|
||
**Type:** reference
|
||
**Source:** https://learn.microsoft.com/security/zero-trust/apply-zero-trust-azure-services-overview
|
||
|
||
## Innhold
|
||
|
||
- [Introduksjon](#introduksjon)
|
||
- [Kjernekomponenter](#kjernekomponenter)
|
||
- [Arkitekturmønstre](#arkitekturmønstre)
|
||
- [Beslutningsveiledning](#beslutningsveiledning)
|
||
- [Integrasjon med Microsoft AI-plattformer](#integrasjon-med-microsoft-ai-plattformer)
|
||
- [Offentlig sektor-hensyn](#offentlig-sektor-hensyn)
|
||
- [Kostnad og ressursbruk](#kostnad-og-ressursbruk)
|
||
- [For arkitekten](#for-arkitekten)
|
||
- [Kilder](#kilder)
|
||
|
||
## Introduksjon
|
||
|
||
Zero Trust (ZT) er en sikkerhetsmodell som ikke gir implisitt tillit til noe som helst, uavhengig av hvor forespørselen kommer fra. For AI-tjenester betyr dette kontinuerlig verifisering av hver tilgang, streng segmentering av nettverk, og "assume breach"-mentalitet. Denne guiden viser hvordan du implementerer Zero Trust-arkitektur for Azure AI Services, Azure OpenAI, Copilot Studio og andre Microsoft AI-plattformer.
|
||
|
||
Zero Trust for AI handler ikke bare om å beskytte modellene – det handler om å sikre hele verdikjeden: identiteter som får tilgang til AI-tjenester, data som flyter gjennom dem, og infrastrukturen som leverer dem. I en verden der AI-tjenester håndterer sensitiv forretningslogikk og personopplysninger, er Zero Trust ikke et valg – det er et krav.
|
||
|
||
### De tre Zero Trust-prinsippene
|
||
|
||
1. **Verify explicitly** – Autentiser og autoriser basert på alle tilgjengelige datapunkter (identitet, lokasjon, device health, service/workload, risiko)
|
||
2. **Use least-privileged access** – Begrens brukertilgang med Just-In-Time/Just-Enough-Access (JIT/JEA)
|
||
3. **Assume breach** – Minimer eksplosjonradiusen ved å segmentere nettverk, verifisere ende-til-ende-kryptering, og bruke analyse for synlighet og trusseldeteksjon
|
||
|
||
## Kjernekomponenter
|
||
|
||
### 1. AI Service Network Isolation
|
||
|
||
**Private endpoints** erstatter offentlig eksponering av AI-tjenester. I stedet for å eksponere Azure OpenAI eller Document Intelligence direkte på Internett, projiseres tjenesten inn i ditt private nettverk via Azure Private Link.
|
||
|
||
**Hvordan det fungerer:**
|
||
- Opprett en Private Endpoint i ditt VNet
|
||
- Azure oppretter en bot-spesifikk DNS-record (f.eks. `your-service.privatelink.openai.azure.com`)
|
||
- DNS-recorden mapper til en lokal IP i ditt VNet
|
||
- All trafikk forblir innenfor Microsofts backbone-nettverk
|
||
|
||
**Implementering:**
|
||
|
||
```bash
|
||
# Opprett private endpoint for Azure OpenAI
|
||
az network private-endpoint create \
|
||
--resource-group myRG \
|
||
--name myOpenAI-PE \
|
||
--vnet-name myVNet \
|
||
--subnet mySubnet \
|
||
--private-connection-resource-id /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{name} \
|
||
--group-id account \
|
||
--connection-name myConnection
|
||
```
|
||
|
||
**Network Security Groups (NSG):** Definerer tillatte inbound/outbound-regler for AI-tjenester. Best practice er å deny-all som default, deretter allowlist spesifikke sources.
|
||
|
||
**Azure Firewall / Application Gateway:** Inspiserer trafikk mot AI-tjenester på Layer 7. Kan blokkere mistenkelige payloads, rate-limit requests, eller logge all aktivitet for audit.
|
||
|
||
**Konfigurasjon:**
|
||
- Aktiver **public network access: Disabled** på AI-ressursen
|
||
- Konfigurer NSG-regler: `AllowAzureCognitiveServices`, `DenyAllOutbound`
|
||
- Bruk **Network Security Perimeter** for PaaS-tjenester som trenger sikker kommunikasjon
|
||
|
||
### 2. Managed Identity and RBAC
|
||
|
||
**Managed Identity** eliminerer behovet for API-nøkler i kode. Tjenesten får automatisk en Microsoft Entra ID-identitet som kan brukes for autentisering.
|
||
|
||
**To typer:**
|
||
- **System-assigned:** Livsløpet er knyttet til ressursen. Slettes automatisk når ressursen slettes.
|
||
- **User-assigned:** Standalone-ressurs som kan deles mellom flere ressurser. Anbefalt for produksjon.
|
||
|
||
**RBAC-roller for AI Services:**
|
||
|
||
| Rolle | Rolle-ID | Tilgang | Bruksområde |
|
||
|-------|----------|---------|-------------|
|
||
| `Cognitive Services OpenAI User` | `5e0bd9bd-7b93-4f28-af87-19fc36ad61bd` | Inference API (chat, embeddings) | Applikasjoner som bruker AI-modeller |
|
||
| `Cognitive Services OpenAI Contributor` | `a001fd3d-188f-4b5d-821b-7da978bf7442` | Inference + modell-deployment | DevOps/Platform teams |
|
||
| `Cognitive Services User` | `a97b65f3-24c7-4388-baec-2e87135dc908` | Data plane access (alle AI Services) | Generell app-tilgang |
|
||
| `Cognitive Services Contributor` | `25fbc0a9-bd7c-42a3-aa1a-3b75d497ee68` | Full kontroll (inkl. nøkler) | Admin-oppgaver |
|
||
|
||
*(Verified MCP 2026-04)*
|
||
|
||
**Implementering (Python):**
|
||
|
||
```python
|
||
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
|
||
from openai import AzureOpenAI
|
||
|
||
# DefaultAzureCredential prøver automatisk:
|
||
# 1. Environment variables
|
||
# 2. Managed Identity
|
||
# 3. Visual Studio Code credentials
|
||
# 4. Azure CLI credentials
|
||
# 5. Azure PowerShell credentials
|
||
|
||
token_provider = get_bearer_token_provider(
|
||
DefaultAzureCredential(),
|
||
"https://cognitiveservices.azure.com/.default"
|
||
)
|
||
|
||
client = AzureOpenAI(
|
||
azure_endpoint="https://your-resource.openai.azure.com",
|
||
api_version="2024-02-01",
|
||
azure_ad_token_provider=token_provider
|
||
)
|
||
|
||
# Ingen API-nøkler i koden!
|
||
response = client.chat.completions.create(
|
||
model="gpt-4o",
|
||
messages=[{"role": "user", "content": "Hello!"}]
|
||
)
|
||
```
|
||
|
||
**Assign RBAC role via Azure CLI:**
|
||
|
||
```bash
|
||
# Tildel Cognitive Services OpenAI User til en managed identity
|
||
az role assignment create \
|
||
--role "5e0bd9bd-7b93-4f28-af87-19fc36ad61bd" \
|
||
--assignee-object-id <managed-identity-object-id> \
|
||
--scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{ai-service-name}
|
||
```
|
||
|
||
**Viktig begrensning:** Managed Identity-tokens caches i opptil 24 timer. Hvis du endrer gruppetilhørighet eller roller, kan det ta flere timer før endringene trer i kraft. Bruk **App Roles** i stedet for grupper for raskere propagering.
|
||
|
||
**Nøkkelbasert autentisering frarådes:** Microsoft anbefaler nå eksplisitt å **unngå API-nøkler** for Azure AI Services i produksjon. Bruk alltid `DefaultAzureCredential` / Managed Identity. Microsoft Foundry (Foundry resource — tidligere «Foundry Tools», `kind=AIServices`) bruker samme `DefaultAzureCredential`-mønster på tvers av alle AI-tjenester. *(Verified MCP 2026-06)*
|
||
|
||
### 3. Endpoint Verification for AI
|
||
|
||
**Problem:** Selv med Managed Identity kan ondsinnet kode sende forespørsler til AI-tjenester hvis den har network-tilgang.
|
||
|
||
**Løsning:** Kombiner Managed Identity med **Conditional Access** og **Continuous Access Evaluation (CAE)**.
|
||
|
||
**Conditional Access-policyer:**
|
||
- Krev MFA for interactive sign-in (ikke relevant for service-to-service)
|
||
- Krev compliant device (via Microsoft Defender for Endpoint)
|
||
- Krev spesifikke network locations (IP-ranges)
|
||
- Bloker access fra risky sign-ins
|
||
|
||
**Continuous Access Evaluation (CAE):**
|
||
- Revokerer access tokens i nær-realtime hvis:
|
||
- Bruker fjernes fra rolle
|
||
- Device går ut av compliance
|
||
- Risiko detekteres (malware, unusual location)
|
||
- Token lifetime med CAE: opptil **28 timer** (vs. standard 1 time) — klienten oppdaterer kun ved kritiske hendelser
|
||
- Reduserer reaktionstid på kritiske hendelser fra 1 time til sekunder
|
||
|
||
**CAE konfigureres via Conditional Access:** Fra 2025 er CAE flyttet til Conditional Access-policyer i stedet for en separat toggle. CAE-session controls er nå et alternativ under "Session controls" i CA-policyen. *(Verified MCP 2026-04)*
|
||
|
||
**Strict Location Enforcement (Preview):** Videreutvikling av Universal CAE. Aktiveres per CA-policy. Blokkerer tokens som brukes utenfor godkjente nettverkslokasjoner i nær-realtime, i stedet for ved neste token-refresh. Støtter nå også **Azure Government**-skyer. *(Verified MCP 2026-04)*
|
||
|
||
**Konfigurasjon:**
|
||
|
||
```bash
|
||
# CAE konfigureres i Conditional Access-policyer (ikke lenger en separat toggle)
|
||
# Gå til: Entra admin center → Protection → Conditional Access
|
||
# Opprett eller rediger policy → Session controls → Customize continuous access evaluation
|
||
# Velg "Disabled" (off), "Basic" (default: kritiske hendelser), eller "Strict" (location enforcement)
|
||
```
|
||
|
||
**Global Secure Access:** For end-user-scenarioer (ikke service-to-service) kan du bruke Microsoft Entra Private Access som ZTNA-løsning. Dette erstatter tradisjonelle VPN-er med app-spesifikke, identitetsdrevne tilkoblinger.
|
||
|
||
### 4. Audit Logging for AI
|
||
|
||
**Azure Monitor + Log Analytics:** Samler inn diagnostikklogger fra AI-tjenester. Inkluderer:
|
||
- Request ID, timestamp, caller identity
|
||
- Prompt/completion (hvis aktivert – vær obs på personvern!)
|
||
- Token usage, latency, HTTP status
|
||
|
||
**Aktivering:**
|
||
|
||
```bash
|
||
# Opprett Log Analytics workspace
|
||
az monitor log-analytics workspace create \
|
||
--resource-group myRG \
|
||
--workspace-name myAILogs
|
||
|
||
# Aktiver diagnostics på Azure OpenAI
|
||
az monitor diagnostic-settings create \
|
||
--resource /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{name} \
|
||
--name myDiagnostics \
|
||
--workspace /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.OperationalInsights/workspaces/myAILogs \
|
||
--logs '[{"category": "Audit", "enabled": true}, {"category": "RequestResponse", "enabled": true}]' \
|
||
--metrics '[{"category": "AllMetrics", "enabled": true}]'
|
||
```
|
||
|
||
**Microsoft Sentinel:** SIEM/SOAR-løsning for AI-trusseldeteksjon.
|
||
|
||
**Bruksscenarioer:**
|
||
- **Prompt injection detection:** Analyser RequestResponse-logger for mistenkelige mønstre (jailbreak-forsøk, "ignore previous instructions")
|
||
- **Data exfiltration:** Detekter unormalt store completion-responses eller høy frekvens av forespørsler
|
||
- **Anomaly detection:** Bruk ML-baserte deteksjonsregler for å finne avvikende bruksmønstre
|
||
|
||
**Eksempel Sentinel-regel:**
|
||
|
||
```kql
|
||
// Detekter prompt injection-forsøk
|
||
AzureDiagnostics
|
||
| where ResourceProvider == "MICROSOFT.COGNITIVESERVICES"
|
||
| where Category == "RequestResponse"
|
||
| extend Prompt = tostring(parse_json(properties_s).prompt)
|
||
| where Prompt contains "ignore previous instructions"
|
||
or Prompt contains "DAN mode"
|
||
or Prompt contains "jailbreak"
|
||
| project TimeGenerated, CallerIpAddress, identity_claim_upn_s, Prompt
|
||
```
|
||
|
||
**Microsoft Defender XDR:** Korrelerer AI-logger med identity, endpoint og email-signaler for helhetlig trusselrespons.
|
||
|
||
**Eksempel:** Defender for Endpoint detekterer malware på en VM → XDR isolerer VM → Sentinel-playbook revokerer AI Service Managed Identity → Blokkerer all AI-tilgang fra kompromittert ressurs.
|
||
|
||
## Arkitekturmønstre
|
||
|
||
### Mønster 1: Hub-Spoke med Private Endpoints
|
||
|
||
**Beskrivelse:** AI-tjenester eksponeres kun via private endpoints i en hub-VNet. Spoke-VNets (per applikasjon) kobler seg til hub via VNet peering.
|
||
|
||
```
|
||
┌─────────────────────┐
|
||
│ Hub VNet │
|
||
│ ┌──────────────┐ │
|
||
│ │ Azure FW │ │
|
||
│ └──────────────┘ │
|
||
│ ┌──────────────┐ │
|
||
│ │ Private EP │ │
|
||
│ │ (OpenAI) │ │
|
||
│ └──────────────┘ │
|
||
└─────────────────────┘
|
||
▲ ▲
|
||
│ │
|
||
┌────────┴──┐ ┌────┴────────┐
|
||
│ Spoke 1 │ │ Spoke 2 │
|
||
│ (App A) │ │ (App B) │
|
||
└───────────┘ └─────────────┘
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Sentralisert sikkerhetskontroll i hub
|
||
- Enkel inspeksjon av all AI-trafikk via Azure Firewall
|
||
- Spoke-applikasjoner trenger ikke direkte Internet-tilgang
|
||
|
||
**Konfigurasjon:**
|
||
1. Opprett hub-VNet med Azure Firewall
|
||
2. Opprett private endpoint for Azure OpenAI i hub
|
||
3. Peer spoke-VNets til hub (allow forwarded traffic)
|
||
4. Konfigurer UDR (User Defined Routes) for spoke-trafikk via hub
|
||
|
||
### Mønster 2: App Service med VNet Integration
|
||
|
||
**Beskrivelse:** App Service integreres direkte i VNet, bruker Managed Identity for AI-tilgang, og har ingen public endpoint.
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ VNet │
|
||
│ ┌────────────────────────────────┐ │
|
||
│ │ App Service Subnet │ │
|
||
│ │ (VNet Integration) │ │
|
||
│ │ ┌──────────────────────────┐ │ │
|
||
│ │ │ App Service │ │ │
|
||
│ │ │ (System Assigned MI) │ │ │
|
||
│ │ └──────────────────────────┘ │ │
|
||
│ └────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌────────────────────────────────┐ │
|
||
│ │ Private Endpoint Subnet │ │
|
||
│ │ ┌──────────────────────────┐ │ │
|
||
│ │ │ PE: Azure OpenAI │ │ │
|
||
│ │ └──────────────────────────┘ │ │
|
||
│ └────────────────────────────────┘ │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
**Fordeler:**
|
||
- App Service får automatisk Managed Identity
|
||
- Ingen API-nøkler i App Configuration
|
||
- Trafikk forblir i VNet (ikke via Internet)
|
||
|
||
**Konfigurasjon:**
|
||
|
||
```bash
|
||
# Aktiver VNet Integration for App Service
|
||
az webapp vnet-integration add \
|
||
--resource-group myRG \
|
||
--name myApp \
|
||
--vnet myVNet \
|
||
--subnet appSubnet
|
||
|
||
# Aktiver system-assigned managed identity
|
||
az webapp identity assign \
|
||
--resource-group myRG \
|
||
--name myApp
|
||
|
||
# Tildel rolle til App Service MI
|
||
az role assignment create \
|
||
--role "Cognitive Services OpenAI User" \
|
||
--assignee <app-service-principal-id> \
|
||
--scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{openai-name}
|
||
```
|
||
|
||
### Mønster 3: Azure Kubernetes Service (AKS) med Workload Identity
|
||
|
||
**Beskrivelse:** AKS pods får Managed Identity via Workload Identity (erstatter AAD Pod Identity). Pods kommuniserer med AI-tjenester via private endpoints uten service keys.
|
||
|
||
```
|
||
┌──────────────────────────────────────────┐
|
||
│ AKS Cluster │
|
||
│ ┌────────────────────────────────────┐ │
|
||
│ │ Namespace: ai-app │ │
|
||
│ │ ┌──────────────────────────────┐ │ │
|
||
│ │ │ Pod (with Service Account) │ │ │
|
||
│ │ │ → Workload Identity │ │ │
|
||
│ │ │ → Managed Identity (federated)│ │ │
|
||
│ │ └──────────────────────────────┘ │ │
|
||
│ └────────────────────────────────────┘ │
|
||
│ │
|
||
│ Connected to VNet with Private Endpoint │
|
||
└──────────────────────────────────────────┘
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Granular identity per pod/service account
|
||
- Native Kubernetes RBAC + Azure RBAC
|
||
- Ingen secrets i container images
|
||
|
||
**Konfigurasjon:**
|
||
|
||
```bash
|
||
# Aktiver Workload Identity på AKS
|
||
az aks update \
|
||
--resource-group myRG \
|
||
--name myCluster \
|
||
--enable-workload-identity \
|
||
--enable-oidc-issuer
|
||
|
||
# Opprett user-assigned managed identity
|
||
az identity create \
|
||
--resource-group myRG \
|
||
--name myAIPodIdentity
|
||
|
||
# Federer Kubernetes service account med managed identity
|
||
az identity federated-credential create \
|
||
--name myFedCred \
|
||
--identity-name myAIPodIdentity \
|
||
--resource-group myRG \
|
||
--issuer $(az aks show -n myCluster -g myRG --query "oidcIssuerProfile.issuerUrl" -o tsv) \
|
||
--subject system:serviceaccount:ai-app:default
|
||
|
||
# Tildel RBAC-rolle til identity
|
||
az role assignment create \
|
||
--role "Cognitive Services OpenAI User" \
|
||
--assignee <identity-client-id> \
|
||
--scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{openai-name}
|
||
```
|
||
|
||
**Kubernetes manifest:**
|
||
|
||
```yaml
|
||
apiVersion: v1
|
||
kind: ServiceAccount
|
||
metadata:
|
||
name: default
|
||
namespace: ai-app
|
||
annotations:
|
||
azure.workload.identity/client-id: <managed-identity-client-id>
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: ai-app
|
||
namespace: ai-app
|
||
spec:
|
||
template:
|
||
metadata:
|
||
labels:
|
||
azure.workload.identity/use: "true"
|
||
spec:
|
||
serviceAccountName: default
|
||
containers:
|
||
- name: app
|
||
image: myapp:latest
|
||
env:
|
||
- name: AZURE_CLIENT_ID
|
||
value: <managed-identity-client-id>
|
||
```
|
||
|
||
### Mønster 4: Defender for Cloud Apps + Private Access (for End-User AI)
|
||
|
||
**Beskrivelse:** For AI Copilots som brukes av sluttbrukere (f.eks. M365 Copilot, custom copilots via Copilot Studio), kombiner Microsoft Entra Private Access (ZTNA) med Defender for Cloud Apps (CASB).
|
||
|
||
```
|
||
┌──────────────────────────────────────────────┐
|
||
│ End User (Managed Device) │
|
||
└────────────┬─────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────┐
|
||
│ Microsoft Entra Private Access (ZTNA) │
|
||
│ • Conditional Access (MFA, device health) │
|
||
│ • Continuous Access Evaluation │
|
||
└────────────┬────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────┐
|
||
│ Defender for Cloud Apps (CASB) │
|
||
│ • Session control (block download/upload) │
|
||
│ • DLP (data loss prevention) │
|
||
│ • Threat detection (anomalous prompts) │
|
||
└────────────┬────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────┐
|
||
│ AI Service (Copilot Studio, Azure OpenAI) │
|
||
│ • Private Endpoint │
|
||
│ • Managed Identity │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Konfigurasjon:**
|
||
|
||
1. **Conditional Access:**
|
||
- Require MFA for Copilot Studio app
|
||
- Require compliant device (Intune)
|
||
- Require approved location
|
||
- Enable session control: "Use Conditional Access App Control"
|
||
|
||
2. **Defender for Cloud Apps:**
|
||
- Opprett session policy for Copilot Studio
|
||
- Block download of sensitive content (DLP labels)
|
||
- Monitor for prompt injection patterns
|
||
- Log all user interactions for audit
|
||
|
||
## Beslutningsveiledning
|
||
|
||
### Når bruke System-Assigned vs User-Assigned Managed Identity?
|
||
|
||
| Kriterium | System-Assigned | User-Assigned |
|
||
|-----------|-----------------|---------------|
|
||
| **Livsløp** | Knyttet til ressurs | Uavhengig av ressurs |
|
||
| **Deling** | Nei | Ja (flere ressurser kan dele) |
|
||
| **Bruksområde** | Enkle 1:1-scenarioer | Komplekse multi-service-scenarioer |
|
||
| **Anbefaling** | Dev/test | Produksjon |
|
||
|
||
**Eksempel:** Hvis du har 10 App Services som alle trenger samme tilgang til Azure OpenAI, bruk én User-Assigned Identity i stedet for 10 System-Assigned. Dette forenkler RBAC-administrasjon.
|
||
|
||
### Private Endpoint vs Service Endpoints?
|
||
|
||
| Aspekt | Private Endpoint | Service Endpoint |
|
||
|--------|------------------|------------------|
|
||
| **Sikkerhet** | ✅ Høy (privat IP i VNet) | ⚠️ Medium (public IP, men restricted) |
|
||
| **Cost** | 💰 Dyrere (per endpoint) | 💰 Gratis |
|
||
| **DNS** | ✅ Automatisk (Private DNS Zone) | ❌ Krever manuell konfigurasjon |
|
||
| **Cross-Region** | ✅ Ja | ❌ Nei |
|
||
| **Bruksområde** | Produksjon, compliance | Dev/test, kostnadsoptimalisering |
|
||
|
||
**Anbefaling:** Bruk **Private Endpoint** for produksjon og compliance-scenarioer. Service Endpoints er legacy og bør unngås for nye deployments.
|
||
|
||
### Når bruke Azure Firewall vs NSG?
|
||
|
||
| Bruksområde | NSG | Azure Firewall |
|
||
|-------------|-----|----------------|
|
||
| **Layer 3/4 filtering** | ✅ | ✅ |
|
||
| **Layer 7 (HTTPS, SQL)** | ❌ | ✅ |
|
||
| **FQDN-based rules** | ❌ | ✅ |
|
||
| **Threat intelligence** | ❌ | ✅ |
|
||
| **IDPS** | ❌ | ✅ (Premium SKU) |
|
||
| **TLS inspection** | ❌ | ✅ (Premium SKU) |
|
||
| **Cost** | 💰 Gratis | 💰 Dyrere |
|
||
|
||
**Anbefaling:** Bruk **NSG** som basis-segmentering. Legg til **Azure Firewall** hvis du trenger:
|
||
- FQDN-baserte regler (f.eks. "allow *.openai.azure.com")
|
||
- Threat intelligence feed
|
||
- TLS inspection (dekrypter HTTPS-trafikk for inspeksjon)
|
||
|
||
### CAE: Når trer det i kraft?
|
||
|
||
**Standard token lifetime:**
|
||
- Access token: 1 time
|
||
- Refresh token: 24 timer (Managed Identity)
|
||
|
||
**Med CAE:**
|
||
- Kritiske hendelser (user disabled, password change): **Sekunder**
|
||
- IP location change (Strict mode): **Nær-realtime** (ikke 5-10 min som med Basic)
|
||
- Role/group membership change: **Opptil 24 timer** (pga Managed Identity caching)
|
||
- Token lifetime i CAE-session: **opptil 28 timer** (klienten håndterer refresh ved behov)
|
||
|
||
**Workaround:** Hvis du trenger raskere propagering, bruk **App Roles** i stedet for Entra ID Groups. App Roles har kortere cache-lifetime.
|
||
|
||
**Azure Government:** CAE med Strict Location Enforcement støttes nå også i Azure Government-skyer. *(Verified MCP 2026-04)*
|
||
|
||
## Integrasjon med Microsoft AI-plattformer
|
||
|
||
### Azure OpenAI + Zero Trust
|
||
|
||
```python
|
||
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
|
||
from openai import AzureOpenAI
|
||
|
||
# Kobler til Azure OpenAI via private endpoint
|
||
token_provider = get_bearer_token_provider(
|
||
DefaultAzureCredential(),
|
||
"https://cognitiveservices.azure.com/.default"
|
||
)
|
||
|
||
client = AzureOpenAI(
|
||
azure_endpoint="https://your-resource.privatelink.openai.azure.com", # Private endpoint FQDN
|
||
api_version="2024-02-01",
|
||
azure_ad_token_provider=token_provider
|
||
)
|
||
```
|
||
|
||
**Sjekkliste:**
|
||
- ✅ Private endpoint opprettet
|
||
- ✅ Public network access: Disabled
|
||
- ✅ Managed Identity assigned med `Cognitive Services OpenAI User` rolle
|
||
- ✅ Diagnostic logging til Log Analytics aktivert
|
||
- ✅ Microsoft Sentinel-regler for prompt injection konfigurert
|
||
|
||
### Copilot Studio + Zero Trust
|
||
|
||
**Utfordring:** Copilot Studio kjører i Microsoft-managed environment, men må aksessere dine on-premises eller Azure-ressurser.
|
||
|
||
**Løsning:** Kombiner **On-Premises Data Gateway** (for on-prem) eller **Virtual Network Data Gateway** (for Azure VNet) med **Managed Identity**.
|
||
|
||
**Arkitektur:**
|
||
|
||
```
|
||
Copilot Studio (Microsoft-managed)
|
||
↓ (via Managed Identity)
|
||
Virtual Network Data Gateway (ditt VNet)
|
||
↓ (via Private Endpoint)
|
||
Azure OpenAI / Custom APIs (ditt VNet)
|
||
```
|
||
|
||
**Konfigurasjon:**
|
||
|
||
1. Opprett Virtual Network Data Gateway i ditt VNet
|
||
2. Gi Copilot Studio managed identity tilgang til Gateway
|
||
3. Opprett connection i Copilot Studio via Gateway
|
||
4. Gateway bruker sin egen Managed Identity for å aksessere Azure OpenAI
|
||
|
||
**Dokumentasjon:** [Use Virtual Network Data Gateway](https://learn.microsoft.com/en-us/power-platform/admin/vnet-data-gateway)
|
||
|
||
### Microsoft Foundry + Zero Trust
|
||
|
||
**Microsoft Foundry-prosjekt** har innebygd støtte for Managed Network Isolation:
|
||
|
||
**Modes:**
|
||
- **Allow Internet Outbound:** Tillater all utgående trafikk (default)
|
||
- **Allow Only Approved Outbound:** Blokkerer all utgående trafikk unntatt eksplisitt godkjente destinations
|
||
|
||
**Konfigurasjon:**
|
||
|
||
```python
|
||
from azure.ai.ml import MLClient
|
||
from azure.identity import DefaultAzureCredential
|
||
|
||
ml_client = MLClient(
|
||
credential=DefaultAzureCredential(),
|
||
subscription_id="<sub-id>",
|
||
resource_group_name="<rg>",
|
||
workspace_name="<workspace>"
|
||
)
|
||
|
||
# Konfigurer managed network med allow only approved outbound
|
||
from azure.ai.ml.entities import ManagedNetwork, PrivateEndpointDestination
|
||
|
||
managed_network = ManagedNetwork(
|
||
isolation_mode="allow_only_approved",
|
||
outbound_rules=[
|
||
PrivateEndpointDestination(
|
||
name="openai-pe",
|
||
service_resource_id="/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{openai}",
|
||
subresource_target="account"
|
||
)
|
||
]
|
||
)
|
||
|
||
ml_client.workspaces.begin_update(
|
||
workspace_name="<workspace>",
|
||
managed_network=managed_network
|
||
).result()
|
||
```
|
||
|
||
**Benefit:** Foundry oppretter automatisk private endpoints for deg. Du trenger ikke manuell DNS-konfigurasjon.
|
||
|
||
### Power Platform AI Builder + Zero Trust
|
||
|
||
**Utfordring:** AI Builder-modeller kjører i Microsoft-managed environment og kan ikke direkte nå private endpoints.
|
||
|
||
**Løsning:** Bruk **Dataverse connection** med **Virtual Network Integration** (Preview).
|
||
|
||
**Arkitektur:**
|
||
|
||
```
|
||
Power Automate (with AI Builder)
|
||
↓
|
||
Dataverse (with VNet Integration)
|
||
↓
|
||
Azure OpenAI (via Private Endpoint)
|
||
```
|
||
|
||
**Status:** Virtual Network Integration for Dataverse er i Private Preview (Q1 2026). Kontakt Microsoft for early access.
|
||
|
||
**Workaround (current):** Deploy en **Azure Function** i ditt VNet som wrapper Azure OpenAI, og call denne fra Power Automate via HTTP connector.
|
||
|
||
## Offentlig sektor-hensyn
|
||
|
||
### Digdir sine "Veileder om sikkerhet i sky"
|
||
|
||
**Prinsipp 1.4: Nettverkssegmentering**
|
||
> "Ulike sikkerhetsnivåer skal skilles ved hjelp av nettverkssegmentering."
|
||
|
||
**Implementering for AI:**
|
||
- AI-tjenester som behandler gradert informasjon må ha dedikert VNet
|
||
- Kryss-netts trafikk må inspiseres av Azure Firewall
|
||
- Logging av all nettverkstrafikk til og fra AI-tjenester
|
||
|
||
**Prinsipp 2.3: Tilgangskontroll**
|
||
> "Tilgang til data og tjenester skal styres av identitet, ikke IP-adresse."
|
||
|
||
**Implementering for AI:**
|
||
- Bruk Managed Identity + RBAC (ikke IP allowlisting)
|
||
- Conditional Access for alle AI-tilganger
|
||
- Just-In-Time access for administrative oppgaver
|
||
|
||
### NSM Grunnprinsipper for IKT-sikkerhet
|
||
|
||
**Prinsipp 5: Loggføring og overvåkning**
|
||
> "Sikre tilstrekkelig loggføring for å kunne oppdage, analysere og etterforske hendelser."
|
||
|
||
**Implementering for AI:**
|
||
- Alle AI-forespørsler logges til Log Analytics (min. 90 dager retention)
|
||
- Sentinel-regler for anomaly detection (prompt injection, data exfiltration)
|
||
- Integration med Defender XDR for korrelert trusselrespons
|
||
|
||
**Prinsipp 8: Nettverk skal deles inn i soner**
|
||
> "Nettverk skal deles inn i soner basert på tillitsnivå og behov for beskyttelse."
|
||
|
||
**Implementering for AI:**
|
||
- Zone 1 (Internet-facing): Azure Front Door + WAF
|
||
- Zone 2 (App Services): VNet-integrert med private endpoints
|
||
- Zone 3 (AI Services): Kun tilgjengelig via private endpoints
|
||
- Zone 4 (Data): Azure Storage med private endpoints + Managed Identity
|
||
|
||
### EIF (European Interoperability Framework) for AI
|
||
|
||
**Security and Privacy:**
|
||
> "Information systems must ensure that data is accessible only to authorised users and protected against unauthorised access."
|
||
|
||
**Implementering:**
|
||
- Zero Trust eliminerer implisitt tillit (ingen "trusted network")
|
||
- Managed Identity sikrer at kun autoriserte applikasjoner får tilgang
|
||
- CAE revokerer access i nær-realtime ved brudd på policy
|
||
|
||
## Kostnad og ressursbruk
|
||
|
||
### Kostnadskomponenter for Zero Trust AI
|
||
|
||
| Komponent | Kostnad (NOK/mnd estimat) | Skalering |
|
||
|-----------|---------------------------|-----------|
|
||
| **Private Endpoint** | ~40 kr/endpoint/mnd + ~0.08 kr/GB egress | Per AI-ressurs |
|
||
| **Azure Firewall** | ~8 000 kr/mnd (Standard) eller ~15 000 kr/mnd (Premium) | Per region |
|
||
| **Log Analytics** | ~20 kr/GB ingested + ~5 kr/GB retention | Basert på log-volum |
|
||
| **Microsoft Sentinel** | ~260 kr/GB/mnd | Basert på log-volum |
|
||
| **Managed Identity** | Gratis | ✅ |
|
||
| **Defender for Cloud Apps** | ~60 kr/bruker/mnd | Per end-user |
|
||
|
||
**Eksempel (medium-sized deployment):**
|
||
- 5 private endpoints: 200 kr/mnd
|
||
- Azure Firewall Standard: 8 000 kr/mnd
|
||
- Log Analytics (100 GB/mnd): 2 000 kr/mnd
|
||
- Sentinel (100 GB/mnd): 26 000 kr/mnd
|
||
- **Total:** ~36 000 kr/mnd (~430 000 kr/år)
|
||
|
||
**Optimalisering:**
|
||
- Bruk **Network Security Groups** i stedet for Azure Firewall hvis du ikke trenger Layer 7-inspeksjon (spar 8 000 kr/mnd)
|
||
- Filtrer logging (ikke logg RequestResponse hvis du ikke trenger prompt/completion data) (spar opptil 50% på Log Analytics)
|
||
- Bruk **Sentinel Data Collection Rules** for å redusere ingested data (f.eks. kun logg failed requests eller high-risk operations)
|
||
|
||
### Ressursbruk (latency impact)
|
||
|
||
| Komponent | Latency overhead |
|
||
|-----------|------------------|
|
||
| Private Endpoint | +1-2 ms |
|
||
| Azure Firewall | +5-10 ms |
|
||
| TLS inspection (Firewall Premium) | +10-20 ms |
|
||
| Managed Identity token acquisition | +50-100 ms (første request, deretter cached) |
|
||
| CAE token refresh | +50-100 ms (kun ved kritiske hendelser) |
|
||
|
||
**Best practice:** For latency-kritiske AI-applikasjoner:
|
||
- Bruk Private Endpoint (minimalt overhead)
|
||
- Skip Azure Firewall hvis mulig (bruk NSG + Private Endpoint)
|
||
- Cache Managed Identity tokens i app-layer (default: 24 timer)
|
||
|
||
## For arkitekten
|
||
|
||
### Sjekkliste for Zero Trust AI-implementering
|
||
|
||
**Fase 1: Network Isolation (Uke 1-2)**
|
||
- [ ] Opprett VNet med dedikerte subnets (app, private endpoints, AzFW)
|
||
- [ ] Opprett private endpoints for alle AI-tjenester
|
||
- [ ] Konfigurer Private DNS Zones for automatisk DNS-resolusjon
|
||
- [ ] Deaktiver public network access på alle AI-ressurser
|
||
- [ ] Test connectivity fra app-subnet til AI-tjenester via private IP
|
||
|
||
**Fase 2: Identity & Access (Uke 2-3)**
|
||
- [ ] Opprett managed identities (system-assigned for enkle scenarioer, user-assigned for produksjon)
|
||
- [ ] Tildel RBAC-roller (minste privilegium-prinsippet)
|
||
- [ ] Fjern alle API-nøkler fra kode/config (bruk DefaultAzureCredential)
|
||
- [ ] Konfigurer Conditional Access-policies for interactive scenarios
|
||
- [ ] Aktiver CAE på AI-ressurser
|
||
|
||
**Fase 3: Monitoring & Response (Uke 3-4)**
|
||
- [ ] Aktiver diagnostic settings på alle AI-ressurser (send til Log Analytics)
|
||
- [ ] Opprett Microsoft Sentinel workspace og koble til Log Analytics
|
||
- [ ] Implementer Sentinel-regler for prompt injection, data exfiltration, anomaly detection
|
||
- [ ] Konfigurer Sentinel playbooks for automated response (block IP, revoke MI, alert SOC)
|
||
- [ ] Integrer med Defender XDR for korrelert trusselrespons
|
||
|
||
**Fase 4: Validation & Hardening (Uke 4-5)**
|
||
- [ ] Kjør penetration testing (test om AI-tjenester er tilgjengelige fra Internet)
|
||
- [ ] Valider at alle AI-forespørsler logger til Sentinel
|
||
- [ ] Test CAE-revokasjon (disable user/device og verifiser at access blokkeres innen sekunder)
|
||
- [ ] Review RBAC-tildelinger (ingen over-privileged identities?)
|
||
- [ ] Dokumenter arkitektur i ADR (Architecture Decision Record)
|
||
|
||
### Vanlige feil og unngåelser
|
||
|
||
**Feil 1: Bruke API-nøkler selv med Managed Identity aktivert**
|
||
|
||
```python
|
||
# ❌ IKKE GJØR DETTE
|
||
client = AzureOpenAI(
|
||
azure_endpoint="https://my-resource.openai.azure.com",
|
||
api_key="abc123..." # Hardkodet API key
|
||
)
|
||
|
||
# ✅ GJØR DETTE
|
||
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
|
||
token_provider = get_bearer_token_provider(
|
||
DefaultAzureCredential(),
|
||
"https://cognitiveservices.azure.com/.default"
|
||
)
|
||
client = AzureOpenAI(
|
||
azure_endpoint="https://my-resource.openai.azure.com",
|
||
azure_ad_token_provider=token_provider
|
||
)
|
||
```
|
||
|
||
**Feil 2: Glemme å oppdatere DNS for private endpoints**
|
||
|
||
Symptom: `getaddrinfo failed` eller connection timeouts
|
||
|
||
Løsning: Opprett Private DNS Zone og link til VNet:
|
||
|
||
```bash
|
||
az network private-dns zone create \
|
||
--resource-group myRG \
|
||
--name privatelink.openai.azure.com
|
||
|
||
az network private-dns link vnet create \
|
||
--resource-group myRG \
|
||
--zone-name privatelink.openai.azure.com \
|
||
--name myDNSLink \
|
||
--virtual-network myVNet \
|
||
--registration-enabled false
|
||
```
|
||
|
||
**Feil 3: For brede RBAC-tildelinger**
|
||
|
||
```bash
|
||
# ❌ IKKE gi Contributor på subscription-nivå
|
||
az role assignment create \
|
||
--role "Cognitive Services Contributor" \
|
||
--assignee <identity> \
|
||
--scope /subscriptions/{sub-id}
|
||
|
||
# ✅ Gi kun User-rolle på specific AI-ressurs
|
||
az role assignment create \
|
||
--role "Cognitive Services OpenAI User" \
|
||
--assignee <identity> \
|
||
--scope /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{ai-name}
|
||
```
|
||
|
||
**Feil 4: Ikke logge RequestResponse pga personvern-bekymringer**
|
||
|
||
Problem: Du mister mulighet til å detektere prompt injection.
|
||
|
||
Løsning: Bruk **Log Analytics Data Collection Rules** for å filtrere sensitive felter:
|
||
|
||
```kql
|
||
// Fjern PII fra logger før lagring
|
||
AzureDiagnostics
|
||
| where Category == "RequestResponse"
|
||
| extend Prompt = tostring(parse_json(properties_s).prompt)
|
||
| extend CleanedPrompt = replace_regex(Prompt, @"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", "[EMAIL]")
|
||
| extend CleanedPrompt = replace_regex(CleanedPrompt, @"\b\d{11}\b", "[SSN]")
|
||
| project TimeGenerated, CallerIpAddress, identity_claim_upn_s, CleanedPrompt
|
||
```
|
||
|
||
### Referansearkitektur: Produksjonsklart Zero Trust AI
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ Internet │
|
||
└────────────────┬─────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Azure Front Door + WAF │
|
||
│ • DDoS Protection Standard │
|
||
│ • WAF rules (OWASP Top 10) │
|
||
│ • Rate limiting │
|
||
└────────────────┬────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Hub VNet (10.0.0.0/16) │
|
||
│ ┌────────────────────────────────────────────────────────┐ │
|
||
│ │ Azure Firewall Subnet (10.0.1.0/24) │ │
|
||
│ │ • Azure Firewall Premium │ │
|
||
│ │ • TLS inspection enabled │ │
|
||
│ │ • IDPS mode: Alert and Deny │ │
|
||
│ │ • Threat intelligence: Microsoft feed │ │
|
||
│ └────────────────────────────────────────────────────────┘ │
|
||
│ ┌────────────────────────────────────────────────────────┐ │
|
||
│ │ Private Endpoint Subnet (10.0.2.0/24) │ │
|
||
│ │ ┌──────────────────────────────────────────────────┐ │ │
|
||
│ │ │ PE: Azure OpenAI │ │ │
|
||
│ │ │ PE: Document Intelligence │ │ │
|
||
│ │ │ PE: Azure AI Search │ │ │
|
||
│ │ │ PE: Storage Account │ │ │
|
||
│ │ └──────────────────────────────────────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
▲ ▲
|
||
│ VNet Peering │ VNet Peering
|
||
│ │
|
||
┌────────┴──────────┐ ┌────────┴──────────────┐
|
||
│ Spoke 1 VNet │ │ Spoke 2 VNet │
|
||
│ (10.1.0.0/16) │ │ (10.2.0.0/16) │
|
||
│ ┌───────────────┐ │ │ ┌────────────────┐ │
|
||
│ │ App Service │ │ │ │ AKS Cluster │ │
|
||
│ │ (VNet Int) │ │ │ │ (CNI) │ │
|
||
│ │ System MI │ │ │ │ Workload ID │ │
|
||
│ └───────────────┘ │ │ └────────────────┘ │
|
||
└───────────────────┘ └──────────────────────┘
|
||
|
||
Logging & Monitoring:
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Log Analytics Workspace │
|
||
│ • Retention: 90 days │
|
||
│ • Data Collection Rules: Filter PII │
|
||
└────────────────┬────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Microsoft Sentinel │
|
||
│ • Analytics rules: Prompt injection, data exfiltration │
|
||
│ • Playbooks: Auto-block IP, revoke MI, alert SOC │
|
||
│ • UEBA: Anomaly detection for AI usage │
|
||
└────────────────┬────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Microsoft Defender XDR │
|
||
│ • Correlation: Identity + Endpoint + AI logs │
|
||
│ • Automated response: Isolate device, revoke session │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Nøkkelkomponenter:**
|
||
|
||
1. **Internet-facing layer:**
|
||
- Azure Front Door med WAF (block OWASP Top 10)
|
||
- DDoS Protection Standard (inkludert med AFD)
|
||
|
||
2. **Hub VNet:**
|
||
- Azure Firewall Premium (TLS inspection, IDPS)
|
||
- Private Endpoints for alle AI-tjenester
|
||
- Private DNS Zones (auto-registrering)
|
||
|
||
3. **Spoke VNets:**
|
||
- App Service med VNet Integration + System MI
|
||
- AKS med CNI + Workload Identity
|
||
- NSG på alle subnets (deny-by-default)
|
||
|
||
4. **Identity & Access:**
|
||
- Managed Identities (system/user-assigned)
|
||
- RBAC på resource-nivå (minste privilegium)
|
||
- Conditional Access + CAE for interactive scenarios
|
||
|
||
5. **Monitoring:**
|
||
- Log Analytics (90 days retention, PII-filtered)
|
||
- Microsoft Sentinel (analytics rules, playbooks)
|
||
- Defender XDR (korrelert trusselrespons)
|
||
|
||
### Videre lesning
|
||
|
||
**Microsoft Learn:**
|
||
- [Zero Trust Guidance Center](https://learn.microsoft.com/en-us/security/zero-trust/) — Hub organisert etter teknologipilarer (Identity, Endpoints, Applications, Data, Infrastructure, Networks, Visibility/automation) og forretningsscenarioer; inkluderer nå et dedikert **«Protect AI and data»**-scenario (`security-adoption-scenario-secure-ai`) med Zero Trust-veiledning for AI *(Verified MCP 2026-06)*
|
||
- [Apply Zero Trust principles to Azure services](https://learn.microsoft.com/en-us/security/zero-trust/apply-zero-trust-azure-services-overview)
|
||
- [Azure AI security baseline](https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/azure-openai-security-baseline) — Reflekterer Microsoft Cloud Security Benchmark (MCSB) v1.0; sjekk om nyere versjon er tilgjengelig *(Verified MCP 2026-04)*
|
||
- [Secure Future Initiative (SFI)](https://learn.microsoft.com/en-us/security/zero-trust/sfi/secure-future-initiative-overview) — Microsofts SFI er en del av Zero Trust-hubben (egen «SFI patterns and best practices»-seksjon); gir kontekst for Microsofts sikkerhetsinvesteringer *(Verified MCP 2026-06)*
|
||
|
||
**Whitepapers:**
|
||
- "Zero Trust Architecture" (NIST SP 800-207)
|
||
- "Zero Trust Maturity Model" (CISA)
|
||
- "AI Security Best Practices" (Microsoft Security Response Center)
|
||
|
||
**GitHub samples:**
|
||
- [Azure OpenAI with Managed Identity](https://github.com/Azure-Samples/openai-python-enterprise-logging)
|
||
- [AKS with Workload Identity](https://github.com/Azure-Samples/aks-workload-identity)
|
||
|
||
## Kilder
|
||
|
||
Denne guiden er basert på følgende Microsoft Learn-dokumentasjon (sist verifisert 2026-06-19):
|
||
|
||
1. [Secure networks with SASE, Zero Trust, and AI](https://learn.microsoft.com/en-us/security/zero-trust/deploy/networks) — Offisiell Zero Trust nettverksguide
|
||
2. [How to configure Azure OpenAI with managed identities](https://learn.microsoft.com/en-us/azure/foundry-classic/openai/how-to/managed-identity) — Managed Identity-konfigurasjon for Azure OpenAI
|
||
3. [Managed identities: role-based access control (RBAC)](https://learn.microsoft.com/en-us/azure/ai-services/translator/document-translation/how-to-guides/create-use-managed-identities) — RBAC-implementering for AI Services
|
||
4. [Azure security baseline for Azure OpenAI](https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/azure-openai-security-baseline) — Sikkerhetsbaseline med Identity Management-krav
|
||
5. [Build a strong security posture for AI](https://learn.microsoft.com/en-us/security/security-for-ai/posture) — Zero Trust-prinsipper for AI-sikkerhet
|
||
6. [Network isolation in Azure AI Bot Service](https://learn.microsoft.com/en-us/azure/bot-service/dl-network-isolation-concept) — Private Endpoint-konsepter for AI-tjenester
|
||
7. [Plan for network isolation in Azure Machine Learning](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-network-isolation-planning) — Managed Network Isolation for Microsoft Foundry
|
||
8. [Managed identity best practice recommendations](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/managed-identity-best-practice-recommendations) — Token caching-begrensninger og workarounds
|
||
9. [Azure AI services authentication and authorization using .NET](https://learn.microsoft.com/en-us/dotnet/ai/azure-ai-services-authentication) — Autentiseringsmønstre for AI Services
|
||
10. [Continuous Access Evaluation (CAE)](https://learn.microsoft.com/en-us/entra/identity/conditional-access/concept-continuous-access-evaluation) — Realtime token revokasjon
|
||
11. Microsoft Learn Code Samples — Managed Identity-implementeringseksempler (Python, .NET)
|
||
|
||
---
|
||
|
||
**For Cosmo:**
|
||
|
||
Når en kunde spør om "Hvordan sikrer jeg AI-tjenester?", nevn denne guiden og gi konkrete anbefalinger basert på deres scenario:
|
||
- Er det service-to-service kommunikasjon? → Managed Identity + Private Endpoint
|
||
- Er det sluttbrukere som aksesserer AI? → Conditional Access + Private Access + Defender for Cloud Apps
|
||
- Er de offentlig sektor? → Legg vekt på Digdir/NSM-krav og logg-retensjon
|
||
- Er kostnad en bekymring? → Foreslå NSG + Private Endpoint (skip Azure Firewall hvis ikke nødvendig)
|
||
|
||
**Trigger-spørsmål:**
|
||
- "Hvordan sikrer jeg Azure OpenAI i produksjon?"
|
||
- "Hvordan eliminerer jeg API-nøkler fra koden?"
|
||
- "Hva er forskjellen mellom system-assigned og user-assigned managed identity?"
|
||
- "Hvordan detekterer jeg prompt injection?"
|
||
- "Hvordan oppfyller jeg NSM Grunnprinsipper med AI-tjenester?"
|