Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/ infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk (fra første ## seksjon), advisor urørt (0 endringer). To applier-fixes oppdaget under kjøring (TDD, RED→GREEN): - insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer 500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor scan-vinduet, applierens post-write-assertion fanget + restaurerte). - normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i 500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent utvidelse av carve-out; kun stray metadata-linjer, aldri prosa. test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet (fila bærer nå Source). Suite 728/728 grønn.
379 lines
14 KiB
Markdown
379 lines
14 KiB
Markdown
# Azure Confidential Computing for AI
|
|
|
|
**Last updated:** 2026-02
|
|
**Status:** GA
|
|
**Category:** Hybrid Cloud & Edge AI
|
|
**Type:** reference
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Kjernekomponenter](#kjernekomponenter)
|
|
- [TEE-Enabled Model Execution](#tee-enabled-model-execution)
|
|
- [Encrypted Inference Pipelines](#encrypted-inference-pipelines)
|
|
- [Attestation for Compliance](#attestation-for-compliance)
|
|
- [Performance Trade-offs](#performance-trade-offs)
|
|
- [Norsk offentlig sektor](#norsk-offentlig-sektor)
|
|
- [Beslutningsrammeverk](#beslutningsrammeverk)
|
|
- [For Cosmo](#for-cosmo)
|
|
|
|
## Introduksjon
|
|
|
|
Azure Confidential Computing (ACC) beskytter data under prosessering (data-in-use) ved hjelp av hardware-baserte Trusted Execution Environments (TEE). For AI-arbeidsbelastninger betyr dette at modeller og inferensdata kan beskyttes mot uautorisert tilgang — inkludert fra skyoperatoren selv. Dette er en gamechanger for organisasjoner som prosesserer sensitive data med AI.
|
|
|
|
For norsk offentlig sektor losner ACC en fundamental utfordring: hvordan bruke sky-basert AI-kraftig hardware (GPU-er, akseleratorer) for sensitive data uten a kompromittere datasikkerheten. NSM Grunnprinsipper og Schrems II-krav kan ivaretas ved at data aldri eksisteres i klartekst utenfor TEE — selv Microsoft som skyoperator kan ikke se dataene.
|
|
|
|
Microsoft tilbyr flere ACC-tilbud for AI: Confidential VMs basert pa AMD SEV-SNP for CPU-baserte arbeidsbelastninger, Confidential GPU VMs med NVIDIA H100 for GPU-akselerert AI, Confidential Containers pa ACI og AKS, og Azure Attestation for verifisering av TEE-integritet.
|
|
|
|
---
|
|
|
|
## Kjernekomponenter
|
|
|
|
| Komponent | Formal | Teknologi |
|
|
|-----------|--------|-----------|
|
|
| AMD SEV-SNP | Minnesikring for hele VM | CPU-basert TEE |
|
|
| Intel TDX | Trust Domain Extensions for VM-isolasjon | CPU-basert TEE (Preview) |
|
|
| Intel SGX | Application-level enclaves | Enclave-basert TEE |
|
|
| NVIDIA H100 TEE | GPU-basert confidential computing | Confidential GPU VM |
|
|
| Azure Attestation | Verifisering av TEE-tilstand | PaaS-tjeneste |
|
|
| Confidential VMs | Kryptert VM-minne | DCasv5, ECasv5, NCCadsH100v5 |
|
|
| Confidential Containers | Container-isolasjon i TEE | ACI, AKS |
|
|
| Azure Key Vault mHSM | Nokkelhandtering i HSM | FIPS 140-2 Level 3 |
|
|
|
|
---
|
|
|
|
## TEE-Enabled Model Execution
|
|
|
|
### Confidential VM for AI-inferens
|
|
|
|
```bash
|
|
# Opprett Confidential VM for AI-arbeidslast (AMD SEV-SNP)
|
|
az vm create \
|
|
--resource-group rg-confidential-ai \
|
|
--name vm-confidential-inference \
|
|
--image "Canonical:0001-com-ubuntu-confidential-vm-jammy:22_04-lts-cvm:latest" \
|
|
--size Standard_DC4as_v5 \
|
|
--security-type ConfidentialVM \
|
|
--os-disk-security-encryption-type VMGuestStateOnly \
|
|
--enable-vtpm true \
|
|
--enable-secure-boot true \
|
|
--admin-username azureuser \
|
|
--generate-ssh-keys
|
|
|
|
# Installer AI runtime
|
|
az vm run-command invoke \
|
|
--resource-group rg-confidential-ai \
|
|
--name vm-confidential-inference \
|
|
--command-id RunShellScript \
|
|
--scripts "
|
|
pip install onnxruntime torch transformers
|
|
# Modell og data er kryptert i minnet av AMD SEV-SNP
|
|
"
|
|
```
|
|
|
|
### Confidential GPU VM for AI (NVIDIA H100)
|
|
|
|
```bash
|
|
# Opprett Confidential GPU VM med NVIDIA H100 TEE
|
|
az vm create \
|
|
--resource-group rg-confidential-ai \
|
|
--name vm-confidential-gpu \
|
|
--image "microsoft-dsvm:ubuntu-hpc:2204:latest" \
|
|
--size Standard_NCCads_H100_v5 \
|
|
--security-type ConfidentialVM \
|
|
--os-disk-security-encryption-type DiskWithVMGuestState \
|
|
--enable-vtpm true \
|
|
--admin-username azureuser \
|
|
--generate-ssh-keys
|
|
```
|
|
|
|
### Linked CPU-GPU TEE-arkitektur
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Confidential GPU VM │
|
|
│ │
|
|
│ ┌──────────────┐ ┌────────────────┐ │
|
|
│ │ CPU TEE │ │ GPU TEE │ │
|
|
│ │ (AMD SNP) │←→│ (NVIDIA H100) │ │
|
|
│ │ │ │ │ │
|
|
│ │ - Datainntak │ │ - Inferens │ │
|
|
│ │ - Pre/post │ │ - Training │ │
|
|
│ │ - Orkestrering│ │ - Tensor ops │ │
|
|
│ └──────────────┘ └────────────────┘ │
|
|
│ ↑ ↑ │
|
|
│ Kryptert minne Kryptert VRAM │
|
|
│ (aldri i klartekst utenfor TEE) │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Encrypted Inference Pipelines
|
|
|
|
### End-to-end kryptert inferens
|
|
|
|
```python
|
|
# Confidential inferens med attestation-basert nokkelfrigivelse
|
|
from azure.identity import DefaultAzureCredential
|
|
from azure.keyvault.keys import KeyClient
|
|
from azure.attestation import AttestationClient
|
|
import onnxruntime as ort
|
|
|
|
class ConfidentialInferencePipeline:
|
|
def __init__(self):
|
|
self.credential = DefaultAzureCredential()
|
|
self.attestation_client = AttestationClient(
|
|
endpoint="https://sharedeus.eus.attest.azure.net",
|
|
credential=self.credential
|
|
)
|
|
|
|
async def run_confidential_inference(self, encrypted_input: bytes) -> bytes:
|
|
"""Kjor inferens med end-to-end kryptering"""
|
|
|
|
# Steg 1: Generer TEE-attestasjonsrapport
|
|
attestation_report = self._generate_attestation()
|
|
|
|
# Steg 2: Hent dekrypteringsnokkel via Secure Key Release (SKR)
|
|
decryption_key = await self._secure_key_release(attestation_report)
|
|
|
|
# Steg 3: Dekrypter input innenfor TEE
|
|
# (Data er kun i klartekst innenfor TEE-minnet)
|
|
plaintext_input = self._decrypt_in_tee(encrypted_input, decryption_key)
|
|
|
|
# Steg 4: Kjor inferens
|
|
result = self._run_model(plaintext_input)
|
|
|
|
# Steg 5: Krypter output for returnerning
|
|
encrypted_output = self._encrypt_in_tee(result, decryption_key)
|
|
|
|
return encrypted_output
|
|
|
|
def _generate_attestation(self) -> dict:
|
|
"""Generer hardware-attestasjonsrapport fra AMD SEV-SNP"""
|
|
# Hent SNP attestation report fra /dev/sev-guest
|
|
# Rapporten inkluderer:
|
|
# - Platform-versjon og firmware
|
|
# - VM measurement (hash av VM-konfigurasjon)
|
|
# - Runtime measurement
|
|
import subprocess
|
|
report = subprocess.run(
|
|
["snp-report", "--format", "json"],
|
|
capture_output=True, text=True
|
|
)
|
|
return {
|
|
"snp_report": report.stdout,
|
|
"runtime_data": self._get_runtime_claims()
|
|
}
|
|
|
|
async def _secure_key_release(self, attestation: dict) -> bytes:
|
|
"""Frigivelse av nokkel basert pa attestasjon"""
|
|
# Azure Attestation verifiserer TEE-tilstand
|
|
result = self.attestation_client.attest_snp_vm(
|
|
report=attestation["snp_report"],
|
|
runtime_data=attestation["runtime_data"]
|
|
)
|
|
|
|
# Kun hvis attestasjon er gyldig, frigir Key Vault nokkelen
|
|
key_client = KeyClient(
|
|
vault_url="https://myvault.vault.azure.net",
|
|
credential=self.credential
|
|
)
|
|
|
|
return key_client.release_key(
|
|
name="inference-key",
|
|
target_attestation_token=result.token
|
|
)
|
|
```
|
|
|
|
### Confidential Containers for AI
|
|
|
|
```yaml
|
|
# Confidential container deployment pa Azure Container Instances
|
|
# Container-gruppen kjorer i AMD SEV-SNP TEE
|
|
apiVersion: 2023-05-01
|
|
name: confidential-inference
|
|
location: norwayeast
|
|
properties:
|
|
confidentialComputeProperties:
|
|
ccePolicy: "<base64-encoded-rego-policy>"
|
|
containers:
|
|
- name: inference-engine
|
|
properties:
|
|
image: myregistry.azurecr.io/confidential-inference:v1
|
|
resources:
|
|
requests:
|
|
cpu: 4
|
|
memoryInGB: 16
|
|
environmentVariables:
|
|
- name: MODEL_PATH
|
|
value: /models/encrypted_model.enc
|
|
- name: ATTESTATION_ENDPOINT
|
|
value: "https://sharedneu.neu.attest.azure.net"
|
|
volumeMounts:
|
|
- name: model-volume
|
|
mountPath: /models
|
|
osType: Linux
|
|
sku: Confidential
|
|
volumes:
|
|
- name: model-volume
|
|
azureFile:
|
|
shareName: encrypted-models
|
|
storageAccountName: mystorageaccount
|
|
```
|
|
|
|
---
|
|
|
|
## Attestation for Compliance
|
|
|
|
### Azure Attestation-flyten
|
|
|
|
```
|
|
┌──────────┐ ┌───────────────┐ ┌──────────────┐
|
|
│ TEE/CVM │────→│ Azure │────→│ Relying │
|
|
│ │ │ Attestation │ │ Party │
|
|
│ Generer │ │ │ │ │
|
|
│ Evidence │ │ Verifiser │ │ Frigir data/ │
|
|
│ │ │ Evaluer policy│ │ noekler │
|
|
└──────────┘ └───────────────┘ └──────────────┘
|
|
```
|
|
|
|
### Attestasjonspolicy for AI-arbeidsbelastninger
|
|
|
|
```json
|
|
// SKR-policy for Confidential AI VM
|
|
{
|
|
"version": "1.0.0",
|
|
"anyOf": [
|
|
{
|
|
"authority": "https://sharedneu.neu.attest.azure.net",
|
|
"allOf": [
|
|
{
|
|
"claim": "x-ms-compliance-status",
|
|
"equals": "azure-compliant-cvm"
|
|
},
|
|
{
|
|
"claim": "x-ms-sevsnpvm-is-debuggable",
|
|
"equals": "false"
|
|
},
|
|
{
|
|
"claim": "x-ms-sevsnpvm-vmpl",
|
|
"equals": "0"
|
|
},
|
|
{
|
|
"claim": "x-ms-isolation-tee.x-ms-attestation-type",
|
|
"equals": "sevsnpvm"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Compliance-rapportering
|
|
|
|
```python
|
|
# Generer compliance-rapport for confidential AI
|
|
class ConfidentialAIComplianceReport:
|
|
def generate_report(self) -> dict:
|
|
return {
|
|
"platform": {
|
|
"type": "Azure Confidential VM",
|
|
"tee": "AMD SEV-SNP",
|
|
"firmware_version": self._get_firmware_version(),
|
|
"attestation_status": "verified"
|
|
},
|
|
"data_protection": {
|
|
"encryption_at_rest": "AES-256 (Customer-managed key)",
|
|
"encryption_in_transit": "TLS 1.3",
|
|
"encryption_in_use": "AMD SEV-SNP memory encryption",
|
|
"key_management": "Azure Key Vault Managed HSM"
|
|
},
|
|
"access_control": {
|
|
"operator_access": "Denied (TEE-enforced)",
|
|
"attestation_required": True,
|
|
"secure_key_release": True
|
|
},
|
|
"compliance_frameworks": [
|
|
"GDPR Art. 32 (data-in-use protection)",
|
|
"Schrems II (operator cannot access data)",
|
|
"NSM Grunnprinsipper (kryptering ved bruk)",
|
|
"ISO 27001 A.10 (cryptographic controls)"
|
|
],
|
|
"audit_trail": {
|
|
"attestation_logs": "Azure Monitor",
|
|
"key_release_logs": "Key Vault audit log",
|
|
"inference_metadata": "Application Insights"
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Performance Trade-offs
|
|
|
|
### Ytelsespavirkning av Confidential Computing
|
|
|
|
| Arbeidsbelastning | Uten CC | Med CC (CPU TEE) | Med CC (GPU TEE) | Overhead |
|
|
|-------------------|---------|-------------------|-------------------|----------|
|
|
| ONNX inferens (CPU) | 10 ms | 11-12 ms | N/A | 10-20% |
|
|
| PyTorch inferens (GPU) | 5 ms | N/A | 5.5-6 ms | 10-20% |
|
|
| LLM generering (GPU) | 30 tok/s | N/A | 25-28 tok/s | 7-17% |
|
|
| Embedding-generering | 50 ms/batch | 55-60 ms/batch | 52-55 ms/batch | 4-20% |
|
|
| Modell-lasting | 5 s | 7-8 s | 6-7 s | 20-40% |
|
|
|
|
### Optimalisering for lavere overhead
|
|
|
|
| Optimalisering | Beskrivelse | Forventet forbedring |
|
|
|----------------|-------------|---------------------|
|
|
| Batching | Samle flere inferensforesp. | Amortiser TEE-overhead |
|
|
| Model caching | Hold modell i TEE-minne | Unnga re-dekryptering |
|
|
| Forhands-attestasjon | Cache attestasjonstoken | Reduser latens per kall |
|
|
| NUMA-optimalisering | Pin til korrekt NUMA-node | Bedre minneytelse |
|
|
| Hugepage-allokering | Bruk store minnesider | Reduser TLB-misser |
|
|
|
|
---
|
|
|
|
## Norsk offentlig sektor
|
|
|
|
### Hvorfor Confidential Computing for norsk offentlig AI?
|
|
|
|
- **Schrems II-kompatibilitet**: Data er kryptert under prosessering — selv Microsoft kan ikke se innholdet, noe som adresserer europeisk personvernlovgivning
|
|
- **NSM-krav**: Grunnprinsipper for IKT-sikkerhet krever kryptering, og CC utvider dette til data-in-use
|
|
- **Flerpartisanalyse**: Kommuner og etater kan analysere data sammen uten a eksponere radata for hverandre
|
|
- **AI pa sensitive data**: Helsedata (pasientjournaler), persondata (NAV), og justisdata kan prosesseres med AI uten a kompromittere personvern
|
|
|
|
### Bruksscenarier
|
|
|
|
| Etat | Scenario | CC-komponent |
|
|
|------|----------|--------------|
|
|
| NAV | AI-analyse av soknader med persondata | Confidential VM |
|
|
| Helsedirektoratet | Prediktiv analyse pa helsejournaler | Confidential GPU VM |
|
|
| Politiet | Biometrisk matching | SGX enclaves |
|
|
| Skatteetaten | Fraud detection pa skattedata | Confidential Containers |
|
|
| Kommuner | Flerparts-analyse av velferdsdata | Confidential ACI |
|
|
|
|
---
|
|
|
|
## Beslutningsrammeverk
|
|
|
|
| Scenario | Anbefaling | Begrunnelse |
|
|
|----------|------------|-------------|
|
|
| CPU-basert AI, enkel migrasjon | Confidential VM (SEV-SNP) | Ingen kodeendringer |
|
|
| GPU-akselerert AI, hoy ytelse | NCCadsH100v5 Confidential GPU VM | Linked CPU+GPU TEE |
|
|
| Container-baserte mikrotjenester | Confidential Containers pa ACI/AKS | Container-policy-basert sikkerhet |
|
|
| Application-level isolasjon | Intel SGX enclaves | Minst mulig TCB |
|
|
| Flerpartssanalyse | Confidential Containers + Attestation | Verifiserbar isolasjon |
|
|
| Strengeste compliance-krav | Confidential GPU + mHSM + Attestation | Full stack confidentiality |
|
|
|
|
---
|
|
|
|
## For Cosmo
|
|
|
|
- **Confidential Computing losner data-in-use-problemet for sky-AI** — anbefal Confidential VMs (AMD SEV-SNP) som forste steg for organisasjoner som noler med sky-AI pa grunn av datasikkerhetshensyn
|
|
- **Ytelsesoverhead er typisk 10-20%** — dette er akseptabelt for de fleste arbeidsbelastninger og kan optimaliseres med batching og modell-caching innenfor TEE
|
|
- **Azure Attestation + Secure Key Release er pabudt for compliance** — modeller og data bor kun dekrypteres etter vellykket attestasjon som beviser at arbeidsmiljoet er integert
|
|
- **For norsk offentlig sektor: Confidential GPU VMs (H100) er den mest lovende losningen** for a kjore avansert AI pa sensitive data i skyen — den kombinerer GPU-ytelse med TEE-beskyttelse
|
|
- **Dokumenter alltid TEE-stack, attestasjonspolicy og nokkelhandtering** i sikkerhetsarkitekturen — dette er konkret bevis for compliance i DPIA og sikkerhetsrevisjoner
|