# Sovereign Cloud for Norwegian AI

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

---

## Introduksjon

Microsoft Sovereign Cloud er en suite av kapabiliteter og deploymentmodeller designet for a hjelpe myndigheter og regulerte industrier med a oppfylle krav til dataresidency, compliance og operasjonell suverenitet — uten a gi avkall pa fordelene ved hyperscale sky-innovasjon. For norsk offentlig sektor er dette sarlig relevant gitt strenge krav fra NSM, Datatilsynet, og EU-regulering.

Sovereign Cloud tilbyr tre deploymentmodeller: Sovereign Public Cloud i Microsoft-drevne datasentre innenfor definerte geopolitiske grenser (f.eks. Norway East/West), Sovereign Private Cloud via Azure Local for customer-kontrollerte miljoer, og National Partner Clouds for lokaliserte suverene skyimplementeringer. Hver modell balanserer skyverdi mot suverenitetskontroller.

For AI-arbeidsbelastninger i norsk offentlig sektor kombinerer Sovereign Cloud dataresendens med konfidensielle beregningsteknologier, kundestyrte krypteringsnoekler, og policy-baserte guardrails — alt for a muliggjore avansert AI-bruk uten a kompromittere suverenitet.

---

## Kjernekomponenter

| Komponent | Formal | Teknologi |
|-----------|--------|-----------|
| Sovereign Landing Zone | Infrastruktur-as-code for suverene miljoer | Bicep/Terraform |
| Sovereignty Baseline Policies | Azure Policy for dataresidency og konfidensialitet | Azure Policy |
| Azure Confidential Computing | Beskyttelse av data under prosessering | AMD SEV-SNP, Intel TDX |
| Customer-Managed Keys (CMK) | Kundekontrollert kryptering | Azure Key Vault mHSM |
| Data Guardian | Datastyring for suverene arbeidsbelastninger | Preview |
| External Key Management | Kundekontrollert nokkelhandtering utenfor Azure | Integration |
| Transparency Logs | Innsyn i operatoerens aktiviteter | Audit |
| Azure Local | On-premises sky-infrastruktur | Sovereign Private Cloud |

---

## Data Sovereignty Architecture

### Sovereign Landing Zone (SLZ)

SLZ er en variant av Azure Landing Zone spesielt designet for digital suverenitet:

```
┌─────────────────────────────────────────────────┐
│              Sovereign Landing Zone              │
│                                                  │
│  ┌─────────────────────────────────────────────┐ │
│  │          Management Group Hierarchy          │ │
│  │  Root → Sovereign → Production → AI          │ │
│  └─────────────────────────────────────────────┘ │
│                                                  │
│  ┌──────────────┐  ┌───────────────────────────┐ │
│  │ Sovereignty  │  │    Workload Templates     │ │
│  │ Baseline     │  │                           │ │
│  │ Policies     │  │  - AI Foundry template    │ │
│  │              │  │  - AKS template           │ │
│  │  - Data      │  │  - App Service template   │ │
│  │    residency │  │  - Storage template       │ │
│  │  - CMK       │  │                           │ │
│  │  - Network   │  │                           │ │
│  └──────────────┘  └───────────────────────────┘ │
│                                                  │
│  ┌──────────────┐  ┌───────────────────────────┐ │
│  │ Confidential │  │   Monitoring & Audit      │ │
│  │ Computing    │  │                           │ │
│  │ Layer        │  │  - Azure Monitor          │ │
│  │              │  │  - Transparency Logs      │ │
│  │  - CVMs      │  │  - Compliance Manager     │ │
│  │  - mHSM      │  │  - Defender for Cloud     │ │
│  └──────────────┘  └───────────────────────────┘ │
└─────────────────────────────────────────────────┘
```

### Deployment med Bicep

```bicep
// Sovereign Landing Zone for norsk offentlig AI
targetScope = 'managementGroup'

@description('Sovereignty Baseline Policy Assignment')
resource sovereigntyBaseline 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'sovereignty-baseline-norway'
  properties: {
    displayName: 'Sovereignty Baseline - Norway AI'
    policyDefinitionId: '/providers/Microsoft.Authorization/policySetDefinitions/sovereignty-baseline'
    parameters: {
      allowedLocations: {
        value: ['norwayeast', 'norwaywest']
      }
      requireConfidentialComputing: {
        value: true
      }
      requireCustomerManagedKeys: {
        value: true
      }
      requirePrivateEndpoints: {
        value: true
      }
    }
  }
}

// Nektelsespolicy: Hindre data fra a forlate Norge
resource dataResidencyPolicy 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'data-residency-norway'
  properties: {
    displayName: 'Enforce Norway Data Residency'
    policyDefinitionId: '/providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c'
    parameters: {
      listOfAllowedLocations: {
        value: ['norwayeast', 'norwaywest']
      }
    }
    enforcementMode: 'Default'
  }
}

// Customer-Managed Key krav for AI-lagring
resource cmkPolicy 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'cmk-encryption-ai'
  properties: {
    displayName: 'Require CMK for AI Storage'
    policyDefinitionId: '/providers/Microsoft.Authorization/policyDefinitions/6fac406b-40ca-413b-bf8e-0bf964659c25'
    enforcementMode: 'Default'
  }
}
```

---

## Regional Deployment Constraints

### Azure-regioner i Norge

| Region | Lokasjon | Tjenester | GA-status |
|--------|----------|-----------|-----------|
| Norway East | Oslo | Fullt AI-spekter | GA |
| Norway West | Stavanger | DR og backup | GA |

### AI-tjenester tilgjengelig i Norway East

| Tjeneste | Tilgjengelig | Sovereign-kompatibel |
|----------|-------------|---------------------|
| Azure OpenAI | Ja | Ja (med CMK) |
| Azure AI Search | Ja | Ja |
| Azure ML | Ja | Ja |
| Azure AI Services | Ja | Ja |
| Azure AI Foundry | Ja | Ja |
| Confidential VMs | Ja | Ja |
| AKS | Ja | Ja |

### Deployment-begrensninger

```python
# Verifiser at AI-ressurser deployes i tillatte regioner
from azure.mgmt.resource import ResourceManagementClient
from azure.identity import DefaultAzureCredential

class SovereigntyChecker:
    ALLOWED_REGIONS = ["norwayeast", "norwaywest"]

    def __init__(self):
        self.credential = DefaultAzureCredential()

    def verify_resource_locations(self, subscription_id: str) -> list[dict]:
        """Verifiser at alle AI-ressurser er i tillatte regioner"""
        client = ResourceManagementClient(self.credential, subscription_id)
        violations = []

        ai_resource_types = [
            "Microsoft.CognitiveServices/accounts",
            "Microsoft.MachineLearningServices/workspaces",
            "Microsoft.Search/searchServices",
            "Microsoft.OpenAI/accounts"
        ]

        for resource in client.resources.list():
            if resource.type in ai_resource_types:
                if resource.location not in self.ALLOWED_REGIONS:
                    violations.append({
                        "resource_name": resource.name,
                        "resource_type": resource.type,
                        "location": resource.location,
                        "severity": "CRITICAL",
                        "remediation": f"Flytt til {self.ALLOWED_REGIONS}"
                    })

        return violations

    def verify_data_residency(self, subscription_id: str) -> dict:
        """Generer dataresidency-rapport"""
        violations = self.verify_resource_locations(subscription_id)
        return {
            "status": "COMPLIANT" if not violations else "NON_COMPLIANT",
            "allowed_regions": self.ALLOWED_REGIONS,
            "total_ai_resources": self._count_ai_resources(subscription_id),
            "violations": violations,
            "recommendation": (
                "Alle AI-ressurser er innenfor tillatte regioner"
                if not violations
                else f"{len(violations)} ressurser krever flytting"
            )
        }
```

---

## Compliance Audit Trails

### Logging-arkitektur for sovereign AI

```
┌─────────────────────────────────────────┐
│           AI-arbeidsbelastning           │
│                                         │
│  [Inferens] → [Azure Monitor]           │
│  [Trening]  → [Log Analytics]           │
│  [Datatilgang] → [Diagnostic Settings]  │
└────────────────┬────────────────────────┘
                 ↓
┌─────────────────────────────────────────┐
│         Compliance Audit Layer          │
│                                         │
│  [Transparency Logs]                    │
│    → Microsoft operator-aktiviteter     │
│                                         │
│  [Azure Activity Log]                   │
│    → Ressurs-operasjoner               │
│                                         │
│  [Key Vault Audit Log]                  │
│    → Nokkel-tilgang og -bruk           │
│                                         │
│  [Purview Audit]                        │
│    → Data-tilgang og -klassifisering   │
└────────────────┬────────────────────────┘
                 ↓
┌─────────────────────────────────────────┐
│       Long-term Retention (Norway)      │
│                                         │
│  [Immutable Blob Storage]               │
│    → 7 ars retention for compliance     │
│    → WORM-policy (Write Once Read Many) │
│    → Norway East lokasjon               │
└─────────────────────────────────────────┘
```

### Implementering av audit trail

```python
# Sovereign AI audit trail konfigurasjon
from azure.mgmt.monitor import MonitorManagementClient

class SovereignAuditConfiguration:
    def configure_ai_diagnostics(self, resource_id: str, workspace_id: str):
        """Konfigurer diagnostikk for sovereign AI-ressurs"""
        monitor_client = MonitorManagementClient(
            self.credential, self.subscription_id
        )

        diagnostic_settings = {
            "logs": [
                {
                    "category": "RequestResponse",
                    "enabled": True,
                    "retentionPolicy": {"enabled": True, "days": 2555}  # 7 ar
                },
                {
                    "category": "Audit",
                    "enabled": True,
                    "retentionPolicy": {"enabled": True, "days": 2555}
                },
                {
                    "category": "AllMetrics",
                    "enabled": True,
                    "retentionPolicy": {"enabled": True, "days": 365}
                }
            ],
            "workspaceId": workspace_id,
            "storageAccountId": self.immutable_storage_id
        }

        monitor_client.diagnostic_settings.create_or_update(
            resource_uri=resource_id,
            name="sovereign-ai-diagnostics",
            diagnostic_settings_resource=diagnostic_settings
        )
```

---

## Vendor Lock-in Mitigation

### Strategier for a unnga avhengighet

| Strategi | Implementering | Effekt |
|----------|----------------|--------|
| ONNX-format | Bruk ONNX for alle modeller | Portabilitet mellom plattformer |
| Open-source SLM | Phi-modeller med MIT-lisens | Ingen leverandor-avhengighet |
| IaC (Bicep/Terraform) | Infrastruktur som kode | Reproduserbar deployment |
| Standard API-er | OpenAI-kompatible API-er | Bytt leverandor uten kodeendring |
| Multi-cloud exit plan | Dokumentert migrasjonsplan | Redusert risiko |
| Container-basert | Docker/Kubernetes | Platform-uavhengig |

### Exit-strategi-sjekkliste

```markdown
## Exit-strategi for sovereign AI-plattform

### Data
- [ ] Alle data kan eksporteres i standardformater (JSON, Parquet, CSV)
- [ ] Vektordatabase kan eksporteres (HNSW-indekser)
- [ ] Krypteringsnoekler lagret i customer-controlled HSM
- [ ] Backup-kopier i kundens kontroll

### Modeller
- [ ] Alle modeller i ONNX-format
- [ ] Fine-tuning-data og adaptere eksporterbare
- [ ] Evalueringsmetriker dokumentert for sammenligning
- [ ] Ingen proprietaere modellformater

### Infrastruktur
- [ ] All infrastruktur definert i Bicep/Terraform
- [ ] Kubernetes-arbeidsbelastninger med standard Helm charts
- [ ] Ingen Azure-spesifikke SDK-avhengigheter i forretningslogikk
- [ ] CI/CD-pipelines platform-uavhengige

### Kontrakt
- [ ] Dataportabilitet klausul i avtale
- [ ] Migrasjonsbistand klausul
- [ ] Oppsigelsesperiode tilstrekkelig for migrasjon
- [ ] Eierskap til data og modeller tydelig definert
```

---

## Norsk offentlig sektor

### Relevante krav og rammeverk

| Krav | Kilde | Sovereign Cloud-losning |
|------|-------|------------------------|
| Data ma lagres i Norge/EOS | Schrems II / Datatilsynet | Norway East/West regioner |
| Kryptering av data ved hvile og transport | NSM Grunnprinsipper | CMK + TLS 1.3 |
| Kryptering av data under prosessering | NSM / okt sikkerhet | Confidential Computing |
| Innsyn i operatoerens handlinger | Offentleglova / transparens | Transparency Logs |
| Dokumentert risikovurdering | Utredningsinstruksen | Compliance Manager |
| Leverandoruavhengighet | Arkitekturprinsippene (Digdir) | ONNX + open source + IaC |
| Universell utforming | Likestillingsloven | N/A (applikasjonsniva) |

### Anskaffelseshensyn

- **SSA-L/SSA-T**: Sovereign Cloud-kapabiliteter bor spesifiseres i kravspesifikasjonen
- **Databehandleravtale**: Ma dekke dataresidency, kryptering, og audit-rettigheter
- **Exit-klausul**: Kontrakten ma sikre rett til dataeksport og migrasjonsbistand
- **Gevinstrealisering**: Dokumenter besparelser vs. on-premises drift

---

## Beslutningsrammeverk

| Scenario | Anbefaling | Begrunnelse |
|----------|------------|-------------|
| Standard AI-arbeidsbelastning | Sovereign Public Cloud (Norway East) | Enklest, fullt spekter av tjenester |
| Sensitive data med hoy sikkerhet | SPC + Confidential Computing + CMK | Maksimal beskyttelse |
| Forsvar/nasjonal sikkerhet | Sovereign Private Cloud (Azure Local) | Full kontroll, air-gapped |
| Flerparts-analyse mellom etater | Confidential Computing pa SPC | Verifiserbar isolasjon |
| Compliance-kritisk AI | SPC + Compliance Manager + Audit trails | Dokumenterbar etterlevelse |
| Hybrid sky + on-prem | Azure Arc + SLZ | Enhetlig forvaltning |

---

## For Cosmo

- **Sovereign Landing Zone er den korrekte startarkitekturen** for alle AI-prosjekter i norsk offentlig sektor — deploy SLZ med Sovereignty Baseline Policies som forste steg
- **Norway East er primary-regionen for AI** — alle Azure AI-tjenester inkludert OpenAI og Confidential VMs er tilgjengelig der, med Norway West for DR
- **Customer-Managed Keys (CMK) via Managed HSM er et minimum** for sovereign AI — dette gir kundekontrollert kryptering og tilfredsstiller NSM-krav
- **Vendor lock-in-mitigering er pabudt** ifoolge Digdirs arkitekturprinsipper — bruk ONNX, open-source SLM (Phi), og Infrastructure-as-Code for a sikre portabilitet
- **Transparency Logs og Compliance Manager er kritiske for revisjon** — norsk offentlig sektor ma kunne dokumentere operatoertilgang og compliance-status for Riksrevisjonen og Datatilsynet
