# Azure Confidential Computing for AI

**Last updated:** 2026-02
**Status:** GA
**Category:** Hybrid Cloud & Edge AI

---

## 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
