KB-currency refresh (medium priority, 2026-06-19) via /architect:kb-update. 74 medium-prioritets filer re-verifisert mot Microsoft Learn (MCP) — delegert til 15 parallelle Opus-subagenter (3 bølger) gruppert etter delt kilde, med disjunkte fil-sett. Verifisert i hovedkontekst (scope-sjekk + diff-review av de faktatunge gruppene + tester). Hovedendringer (faktuelle korreksjoner + currency): - Azure AI Search semantic ranker: TILGJENGELIG PÅ ALLE TIERS (også Free/Basic m/ gratis månedlig kvote) — gammel KB sa feilaktig "kun S1+". Korrigert i tier-tabell, anti-patterns og beslutningstabell (azure-ai-search-setup). - APIM score-threshold = DISTANSE (lavere = strengere): tuning-tabellen i rag-caching-optimization hadde retningen baklengs — invertert til korrekt. - Agentic retrieval GA/preview-nyanse presisert (hovedkontekst-korreksjon mot agentic-retrieval-how-to-migrate): GA via REST 2026-04-01 returnerer EKSTRAKTIV grounding (references + activity), IKKE syntetiserte svar. Answer synthesis, ikke-minimal reasoning effort (LLM query planning) og multi-turn messages forblir preview (2026-05-01-preview). Subagent hadde overforenklet til "hele kjernepipelinen GA"; rettet i agentic-rag-patterns + citation-tracking. - Copilot Studio modell-tabeller (platforms/copilot-studio): fjernet Claude Opus 4.5 + GPT-5.2 (borte fra kilde), lagt til Claude Sonnet 4.6/Opus 4.6 (GA), Opus 4.7 + Mistral Medium 3.5 (experimental); GPT-5 Reasoning/Auto = preview; A2A GA (apr 2026). - Computer Use (CUA): Copilot Studio GA 2026-05-07; 4 modeller m/ tier/status (OpenAI CUA + Sonnet 4.5 GA, Sonnet 4.6 + Opus 4.6 experimental); 5 credits/ steg standard, 15 premium; US-only region-krav FJERNET i GA-dok; Cloud PC pool + Hosted browser + bring-your-own-machine. - Azure AI Search REST API-versjoner bumpet: 2025-09-01 -> 2026-04-01 (stabil), 2025-11-01-preview -> 2026-05-01-preview (hybrid-search, rag-security-rbac, chunking). - Power Automate-integrasjon: trigger "Run a flow from Copilot" -> "When an agent calls the flow"; App Service innebygd MCP (preview) lagt til. - M365 Copilot-manifest v1.26 -> v1.28 (GA, mai) / v1.29 dokumentert (juni); "Tenant graph grounding" -> "Work IQ". - Speech fast transcription 2t/300MB -> 5t/500MB; multilingual 14 -> 15 locales (+ pt-BR). Content Understanding reasoning preview -> GA (v1.0, 2025-11-01). - Security Copilot E5 -> E5+E7. Død Databricks-URL ci-cd/best-practices -> ci-cd/flows. Prompt Flow retirement (2027-04-20 -> MAF) notert der den presenteres som go-forward. Gateway-topologi-tabell-feil rettet. - Alle 74 Last updated -> 2026-06-19. Discovery ikke kjørt (historisk kun Databricks-støy) -> 389-telling uendret, ingen resync. validate 239 PASS, kb-integrity 115/115 (262 orphan-warnings uendret), gitleaks clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
607 lines
28 KiB
Markdown
607 lines
28 KiB
Markdown
# Azure AI Services - Networking, Security and Private Endpoints
|
|
|
|
**Last updated:** 2026-06-19 | Verified: MCP 2026-06-19
|
|
**Status:** GA
|
|
|
|
> **Navngivning 2026-04:** Microsoft har omdøpt "Azure Cognitive Services" til **"Azure AI Foundry Tools"** (eller kortform "Foundry Tools") i dokumentasjonen. API-endepunkter, RBAC-roller og ARM-ressurstyper beholder "CognitiveServices" i identifikatoren. Alle nye dokumentasjonsreferanser bruker "Foundry Tools".
|
|
|
|
**Category:** Azure AI Services (Foundry Tools)
|
|
|
|
---
|
|
|
|
## Introduksjon
|
|
|
|
Azure AI Services (tidligere Cognitive Services) tilbyr et lagdelt sikkerhetsrammeverk for nettverksisolasjon som beskytter AI-modeller, data og tjenester mot uautorisert tilgang. Private endpoints, virtual networks og service endpoints gir fleksible sikkerhetskonfigurasjoner som passer både skytilkoblede og hybrid-scenarier.
|
|
|
|
Denne kunnskapsreferansen dekker:
|
|
- Private endpoints og Azure Private Link-konfigurasjon
|
|
- Virtual network-integrasjon med service endpoints
|
|
- IP-baserte firewall-regler og nettverkstilgangskontroll
|
|
- Managed identity-autentisering for nettverkssikker tilgang
|
|
- DNS-konfigurasjon for private endpoints
|
|
- Trusted services og nettverksunntak
|
|
|
|
**Viktig kontekst:** Azure AI Services støtter **ikke** direkte VNet-injeksjon (deployes ikke inn i kundens VNet), men bruker i stedet private endpoints for sikker tilkobling fra VNet til tjenesten.
|
|
|
|
---
|
|
|
|
## Kjernekomponenter
|
|
|
|
### 1. Private Endpoints og Azure Private Link
|
|
|
|
Private endpoints gir dedikert nettverkstilgang til Azure AI Services uten eksponering mot offentlig internett.
|
|
|
|
| Komponent | Funksjon | Konfigurasjon |
|
|
|-----------|----------|---------------|
|
|
| **Private Endpoint** | Dedikert nettverksgrensesnitt i kundens VNet | Tildeles privat IP fra VNet-adresseområdet |
|
|
| **Private Link Service** | Azure-backbone-tilkobling | Eliminerer internett-eksponering |
|
|
| **Private DNS Zone** | Navneoppløsning for private endpoints | `privatelink.cognitiveservices.azure.com` (AI Services)<br>`privatelink.openai.azure.com` (Azure OpenAI) |
|
|
| **Target Sub-resource** | Endepunkttype | `account` (AI Services, Azure OpenAI) |
|
|
|
|
**Fordeler:**
|
|
- Eliminerer offentlig internett-eksponering fullstendig
|
|
- Trafikk går over Microsoft backbone network
|
|
- Fungerer med VPN Gateway og ExpressRoute for on-premises tilgang
|
|
- Konsistent tilkoblings-string for både private og public endpoints
|
|
- Støtter både system-assigned og user-assigned managed identities
|
|
|
|
**Begrensninger:**
|
|
- Krever Basic tier eller høyere (ikke Free tier)
|
|
- Custom subdomain er påkrevd for private endpoints
|
|
- Speech service krever separate endpoint-konfigurasjoner
|
|
- Portal-tilgang kan kreve ekstra konfigurasjon
|
|
|
|
### 2. Service Endpoints
|
|
|
|
Service endpoints gir optimalisert ruting fra VNet til Azure AI Services uten private IP-adresser.
|
|
|
|
| Aspekt | Beskrivelse |
|
|
|--------|-------------|
|
|
| **Service Tag** | `Microsoft.CognitiveServices` |
|
|
| **Routing** | Optimal sti fra VNet til tjenesten via Azure backbone |
|
|
| **Identitet** | Subnet- og VNet-identitet sendes med hver forespørsel |
|
|
| **Kombinasjon** | Kan brukes sammen med IP-regler (maks 100 VNet-regler per ressurs) |
|
|
|
|
**Når bruke service endpoints vs private endpoints:**
|
|
- **Service Endpoints:** Enklere oppsett, gratis, men tjenesten beholder offentlig IP
|
|
- **Private Endpoints:** Full isolasjon, privat IP, bedre sikkerhet, men høyere kostnad
|
|
|
|
### 3. IP Firewall-regler (Network ACLs)
|
|
|
|
Service-level IP filtering for å begrense tilgang til godkjente IP-adresser.
|
|
|
|
| Regeltype | Format | Eksempel | Bruksområde |
|
|
|-----------|--------|----------|-------------|
|
|
| **Enkelt IP** | `x.x.x.x` | `203.0.113.10` | Spesifikt klientmaskin |
|
|
| **IP-range** | CIDR-notasjon | `10.0.0.0/24` | Subnet eller on-premises nettverk |
|
|
| **IPv4 kun** | RFC 1918-kompatibel | Private: `10.*`, `172.16-31.*`, `192.168.*` ikke tillatt | Kun offentlige IP-adresser |
|
|
|
|
**Konfigurasjonsalternativer:**
|
|
- **All networks:** Åpen tilgang (default)
|
|
- **Selected networks:** Kun godkjente VNets/IPs
|
|
- **Disabled:** Ingen public access (kun private endpoints)
|
|
|
|
**Viktig:** Default action må settes til `Deny` for at nettverksregler skal ha effekt.
|
|
|
|
### 4. Managed Identity og Autentisering
|
|
|
|
Managed identity eliminerer behovet for API-nøkler ved nettverksikrede tilkoblinger.
|
|
|
|
| Type | Levetid | Bruksområde |
|
|
|------|---------|-------------|
|
|
| **System-assigned** | Knyttet til ressurs-levetid | Standard for enkle scenarier |
|
|
| **User-assigned** | Uavhengig av ressurs | Multi-ressurs, delt identitet |
|
|
|
|
**Konfigurering via Azure Portal:**
|
|
1. Naviger til AI Services-ressurs → **Identity**
|
|
2. Aktiver **System assigned** eller legg til **User assigned**
|
|
3. Tildel RBAC-rolle på målressurs: `Cognitive Services User` eller `Cognitive Services OpenAI User`
|
|
|
|
**Trusted Services Bypass:**
|
|
- Aktiveres med `networkAcls.bypass: "AzureServices"`
|
|
- Tillater Azure AI Search, Azure Machine Learning å kalle tjenesten via managed identity
|
|
- Tjenesten validerer JWT-token fra trusted services
|
|
|
|
---
|
|
|
|
## Arkitekturmønstre
|
|
|
|
### 1. Full Private Endpoint-isolasjon
|
|
|
|
**Scenario:** Maksimal sikkerhet, null internett-eksponering.
|
|
|
|
```
|
|
┌─────────────────────────────────────────────┐
|
|
│ Azure Virtual Network (10.0.0.0/16) │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ App Subnet (10.0.1.0/24) │ │
|
|
│ │ - Web App / Function App │ │
|
|
│ │ - VNet Integration │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ Private Endpoint Subnet │ │
|
|
│ │ (10.0.2.0/24) │ │
|
|
│ │ - PE for Azure OpenAI (10.0.2.4) │───┼──> Azure OpenAI
|
|
│ │ - PE for AI Services (10.0.2.5) │───┼──> AI Services
|
|
│ │ - PE for Key Vault (10.0.2.6) │───┼──> Key Vault
|
|
│ │ - PE for Storage (10.0.2.7) │───┼──> Storage
|
|
│ └─────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ Azure Bastion Subnet (10.0.3.0/26) │ │
|
|
│ │ - Bastion Host │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────┘
|
|
│
|
|
└──> On-premises (VPN Gateway / ExpressRoute)
|
|
```
|
|
|
|
**Konfigurasjonsrekkefølge:**
|
|
1. Opprett VNet med subnets (app, private endpoint, bastion)
|
|
2. Opprett Azure AI Services med custom subdomain
|
|
3. Opprett private endpoint i dedikert subnet
|
|
4. Konfigurer Private DNS Zone (`privatelink.cognitiveservices.azure.com`)
|
|
5. Sett `publicNetworkAccess: Disabled` på AI Services
|
|
6. Aktiver managed identity på applikasjon
|
|
7. Tildel RBAC-rolle til applikasjonen på AI Services
|
|
|
|
**Best practices:**
|
|
- Bruk dedikert subnet for private endpoints (anbefalt `/26` eller større)
|
|
- Aktiver `PrivateEndpointNetworkPolicies: Disabled` på subnet
|
|
- Integrer med Private DNS Zone for automatisk navneoppløsning
|
|
- Bruk Azure Bastion for sikker management-tilgang
|
|
|
|
### 2. Hybrid Service Endpoint + IP Firewall
|
|
|
|
**Scenario:** Koste-effektiv sikkerhet med VNet + on-premises tilgang.
|
|
|
|
```
|
|
┌─────────────────────────────────────────────┐
|
|
│ Azure Virtual Network │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ App Subnet │ │
|
|
│ │ - Service Endpoint enabled │ │
|
|
│ │ (Microsoft.CognitiveServices) │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ │ │
|
|
│ └──────────────┐ │
|
|
└─────────────────────────────┼───────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐
|
|
│ Azure AI Service│
|
|
│ Firewall: │
|
|
│ - VNet rule │
|
|
│ - IP allow: │
|
|
│ 203.0.113.0/24│ <──── On-premises public IP
|
|
└─────────────────┘
|
|
```
|
|
|
|
**Konfigurasjon:**
|
|
1. Aktiver service endpoint på subnet: `Microsoft.CognitiveServices`
|
|
2. Konfigurer AI Services firewall:
|
|
- Default action: `Deny`
|
|
- VNet rule: tillat spesifikk subnet
|
|
- IP rule: tillat on-premises public IP range
|
|
|
|
### 3. Hub-Spoke med Centralisert Network Security
|
|
|
|
**Scenario:** Enterprise-arkitektur med sentralisert sikkerhet.
|
|
|
|
```
|
|
┌─────────────────────────────┐
|
|
│ Hub VNet (10.0.0.0/16) │
|
|
│ - Azure Firewall │
|
|
│ - VPN Gateway │
|
|
│ - Private DNS Zones │
|
|
└─────────────┬───────────────┘
|
|
│ VNet Peering
|
|
┌────────────┴────────────┐
|
|
│ │
|
|
┌──────▼──────┐ ┌──────▼──────┐
|
|
│ Spoke 1 VNet│ │ Spoke 2 VNet│
|
|
│ AI Workload │ │ AI Workload │
|
|
│ - PEs │ │ - PEs │
|
|
└─────────────┘ └─────────────┘
|
|
```
|
|
|
|
**Nettverksflyt:**
|
|
- Outbound trafikk → Azure Firewall (FQDN filtering)
|
|
- Inbound management → Azure Bastion i Hub
|
|
- Private DNS Zones deles via VNet-links
|
|
|
|
### 4. Azure OpenAI "On Your Data" med Network Isolation
|
|
|
|
**Scenario:** RAG-løsning med Azure AI Search + Storage bak private endpoints.
|
|
|
|
```
|
|
┌────────────────────────────────────────────────┐
|
|
│ VNet (3 subnets) │
|
|
│ │
|
|
│ 1. VPN Gateway Subnet │
|
|
│ 2. Private Endpoint Subnet: │
|
|
│ - Azure OpenAI PE │
|
|
│ - Azure AI Search PE (shared private link) │
|
|
│ - Storage Account PE │
|
|
│ 3. Web App Outbound Integration Subnet │
|
|
└────────────────────────────────────────────────┘
|
|
|
|
┌─────────────┐ Managed Identity ┌──────────────┐
|
|
│ Azure OpenAI├───────────────────>│ AI Search │
|
|
│ │ (trusted service) │ (embedding) │
|
|
└─────────────┘ bypass firewall └──────────────┘
|
|
```
|
|
|
|
**Spesialkonfigurasjon:**
|
|
- Azure OpenAI: `networkAcls.bypass: "AzureServices"` (trusted service)
|
|
- AI Search: managed identity med `Cognitive Services OpenAI User` rolle
|
|
- Storage: private endpoint + RBAC for OpenAI managed identity
|
|
|
|
---
|
|
|
|
## Beslutningsveiledning
|
|
|
|
### Når bruke hvilken nettverkssikkerhet?
|
|
|
|
| Scenario | Anbefalt løsning | Rasjonale |
|
|
|----------|------------------|-----------|
|
|
| **Maksimal sikkerhet, compliance-kritisk** | Private Endpoints + Disable Public Access | Zero Trust, ingen internett-eksponering |
|
|
| **Kostnadsbevisst, medium sikkerhet** | Service Endpoints + IP Firewall | Gratis, god sikkerhet, enklere oppsett |
|
|
| **Hybrid on-premises + Azure** | Private Endpoints + VPN Gateway / ExpressRoute | Privat tilkobling til on-premises |
|
|
| **Multi-region, lav latency** | Private Endpoints per region | Redusert latency, regional isolasjon |
|
|
| **Dev/Test miljø** | IP Firewall kun | Lavest kompleksitet, akseptabel risiko |
|
|
|
|
### Sikkerhetsnivå-matriks
|
|
|
|
| Tiltak | Sikkerhetsnivå | Kompleksitet | Kostnad | Compliance |
|
|
|--------|----------------|--------------|---------|------------|
|
|
| IP Firewall kun | ⭐⭐ | Lav | Gratis | Basis |
|
|
| Service Endpoints | ⭐⭐⭐ | Medium | Gratis | Medium |
|
|
| Private Endpoints | ⭐⭐⭐⭐⭐ | Høy | Medium | Høy (GDPR, HIPAA) |
|
|
| PE + Disabled Public | ⭐⭐⭐⭐⭐ | Høy | Medium | Maksimal |
|
|
|
|
### DNS-konfigurasjon: Azure Private DNS vs Custom DNS
|
|
|
|
**Azure Private DNS (anbefalt):**
|
|
- Automatisk CNAME-record oppdatering
|
|
- Integrert med VNet
|
|
- Ingen ekstra konfigurasjon
|
|
|
|
**Custom DNS (on-premises DNS server):**
|
|
- Krev conditional forwarder til Azure DNS (`168.63.129.16`)
|
|
- Manuell A-record for private endpoint IP
|
|
- Nødvendig for hybrid-scenarier
|
|
|
|
**FQDN-resolusjon:**
|
|
- Fra VNet: `myaccount.cognitiveservices.azure.com` → `10.0.2.5` (privat IP)
|
|
- Fra internett: `myaccount.cognitiveservices.azure.com` → public IP (hvis ikke disabled)
|
|
|
|
---
|
|
|
|
## Integrasjon med Microsoft-stakken
|
|
|
|
### 1. Azure AI Foundry (tidligere AI Studio)
|
|
|
|
**Portal-tilgang med private endpoints:**
|
|
- Custom subdomain må brukes i alle API-kall
|
|
- Portal-tilgang krever VPN eller Azure Bastion til VNet
|
|
- Service tags for portal: `AzureActiveDirectory`, `AzureFrontDoor.Frontend`, `AzureResourceManager`, `CognitiveServicesManagement`, `CognitiveServicesFrontEnd`
|
|
|
|
**Managed VNet i Foundry:**
|
|
- Foundry hub kan ha egen managed VNet
|
|
- Workspace inheriter nettverksregler fra hub
|
|
- Private endpoints til Foundry Tools konfigureres separat
|
|
|
|
### 2. Power Platform Integration
|
|
|
|
**Power Automate / Power Apps med private endpoints:**
|
|
- Krever On-premises data gateway for VNet-tilkobling
|
|
- Azure Relay hybrid connection ikke støttet direkte
|
|
- Custom connector må bruke public endpoint med IP firewall
|
|
|
|
**Workaround for private endpoints:**
|
|
1. Deploy Azure Function med VNet integration
|
|
2. Function kaller AI Services via private endpoint
|
|
3. Custom connector kaller Azure Function (public endpoint med auth)
|
|
|
|
### 3. Azure Machine Learning
|
|
|
|
**AML Workspace med AI Services private endpoints:**
|
|
- Shared private link fra AML til AI Services
|
|
- Managed identity med `Cognitive Services User` rolle
|
|
- Trusted service bypass: `networkAcls.bypass: "AzureServices"`
|
|
|
|
**Compute Cluster konfigurasjon:**
|
|
- Cluster må være i samme VNet (eller peered VNet)
|
|
- NSG må tillate outbound til `AzureMachineLearning` service tag
|
|
|
|
### 4. Azure AI Search (for RAG)
|
|
|
|
**Shared Private Link:**
|
|
- AI Search kan opprette private endpoint til AI Services
|
|
- Eliminerer behovet for trusted service bypass
|
|
- Konfigureres via AI Search → Networking → Shared Private Links
|
|
|
|
**Trusted Service alternativ:**
|
|
- AI Search managed identity med RBAC-rolle på AI Services
|
|
- `networkAcls.bypass: "AzureServices"` på AI Services
|
|
- System-assigned managed identity authentication påkrevd
|
|
|
|
---
|
|
|
|
## Offentlig sektor (Norge)
|
|
|
|
### 1. Compliance-krav
|
|
|
|
| Regelverk | Relevante krav | Nettverkstiltak |
|
|
|-----------|----------------|-----------------|
|
|
| **Personvernforordningen (GDPR)** | Art. 32: Tekniske sikkerhetstiltak | Private endpoints, kryptering i transit (TLS 1.2+) |
|
|
| **Nasjonal sikkerhetsmyndighet (NSM)** | Grunnprinsipper for IKT-sikkerhet | Network segmentation, least privilege access |
|
|
| **Schrems II** | Data Processing Agreement-krav | Private endpoints reduserer eksponering mot utenlandsk jurisdiksjon |
|
|
| **eHelse** | Norm for informasjonssikkerhet (HelseNorge) | Nettverksisolasjon, logging, audit trail |
|
|
|
|
### 2. Offentlig Sektor-spesifikke hensyn
|
|
|
|
**Data Residency:**
|
|
- Private endpoints endrer ikke data location (fortsatt i Azure-regionen)
|
|
- Norway East / Norway West anbefales for offentlig sektor
|
|
- Private Link-trafikk forblir innenfor Microsoft backbone network (ikke public internet)
|
|
|
|
**Schrems II og Cloud Act:**
|
|
- Private endpoints reduserer ikke juridisk ansvar ved Cloud Act-forespørsler
|
|
- Tilleggstiltak: Customer-Managed Keys (CMK), Microsoft Purview audit logs
|
|
|
|
**Kostnadsmodell:**
|
|
- Private Endpoint: ~40 NOK/måned per endpoint
|
|
- Data Processing (ingress): Gratis
|
|
- Data Processing (egress): ~0.40 NOK/GB (intra-region via private link)
|
|
|
|
---
|
|
|
|
## Kostnad og lisensiering
|
|
|
|
### 1. Nettverkskomponenter - Priser (NOK, ca. 2026)
|
|
|
|
| Komponent | Kostnad | Enhet | Merknad |
|
|
|-----------|---------|-------|---------|
|
|
| **Private Endpoint** | ~40 NOK | per endpoint/måned | Uavhengig av trafikkmengde |
|
|
| **Data Processing (inbound)** | Gratis | per GB | Ingen kostnad for ingress |
|
|
| **Data Processing (outbound)** | ~0.40 NOK | per GB | Intra-region via private link |
|
|
| **Service Endpoint** | Gratis | - | Ingen ekstra kostnad |
|
|
| **VNet Peering** | ~0.08 NOK | per GB (intra-region) | For hub-spoke arkitektur |
|
|
| **Azure Bastion** | ~1200 NOK | per måned (Basic) | For secure management access |
|
|
| **VPN Gateway** | ~2400 NOK | per måned (Basic) | For on-premises tilkobling |
|
|
|
|
**Estimert månedskostnad for typisk oppsett:**
|
|
- **SMB (1 AI Service + Storage):** ~80 NOK/måned (2 private endpoints)
|
|
- **Enterprise (3 AI Services + Search + Storage + Key Vault):** ~240 NOK/måned (6 private endpoints) + Bastion/VPN
|
|
|
|
### 2. AI Services Tier-krav
|
|
|
|
| Tier | Private Endpoints | IP Firewall | Service Endpoints |
|
|
|------|-------------------|-------------|-------------------|
|
|
| **Free** | ❌ Ikke støttet | ❌ Ikke støttet | ❌ Ikke støttet |
|
|
| **Basic** | ✅ Støttet | ✅ Støttet | ✅ Støttet |
|
|
| **Standard** | ✅ Støttet | ✅ Støttet | ✅ Støttet |
|
|
|
|
**Minstekrav:** Basic tier (S0) eller høyere for nettverkssikkerhet.
|
|
|
|
### 3. Hidden Costs å være obs på
|
|
|
|
- **DNS Zone:** ~4 NOK/måned per Private DNS Zone + ~0.004 NOK per 1000 queries
|
|
- **Data Egress:** Trafikk ut av Azure region (ikke via private link) kan bli dyrt
|
|
- **Network Watcher:** Flowlogger for NSG koster ~40 NOK/måned per NSG
|
|
- **Log Analytics:** Ingest av network logs (pris avhenger av volum)
|
|
|
|
---
|
|
|
|
## For arkitekten (Cosmo)
|
|
|
|
### 1. Oppstartssekvens for Private Endpoint-prosjekt
|
|
|
|
**Pre-deployment checklist:**
|
|
1. ✅ Validert at AI Services tier er Basic eller høyere
|
|
2. ✅ Planlagt IP-adresseområder (VNet, subnets)
|
|
3. ✅ Identifisert custom subdomain for AI Services-ressurs
|
|
4. ✅ Avklart DNS-strategi (Azure Private DNS vs custom DNS)
|
|
5. ✅ Bestemt managed identity-strategi (system vs user-assigned)
|
|
6. ✅ RBAC-roller definert (hvem skal ha tilgang til hva)
|
|
|
|
**Deployment-rekkefølge (kritisk!):**
|
|
1. Opprett Resource Group
|
|
2. Opprett VNet med subnets (app, private endpoint, bastion)
|
|
3. Opprett AI Services-ressurs med custom subdomain
|
|
4. Opprett Private DNS Zone (`privatelink.cognitiveservices.azure.com`)
|
|
5. Link Private DNS Zone til VNet
|
|
6. Opprett Private Endpoint (velg target sub-resource: `account`)
|
|
7. Verifiser DNS record i Private DNS Zone (A-record for private IP)
|
|
8. Sett `publicNetworkAccess: Disabled` på AI Services (etter testing!)
|
|
9. Aktiver managed identity på applikasjon
|
|
10. Tildel RBAC-rolle (`Cognitive Services User`) til applikasjon
|
|
|
|
**Testing-rekkefølge:**
|
|
1. Fra VNet: `nslookup <myaccount>.cognitiveservices.azure.com` → skal returnere privat IP
|
|
2. Fra VNet: `Test-NetConnection <private-ip> -Port 443` → skal lykkes
|
|
3. Fra internett (før disabled public): `nslookup` → skal returnere public IP
|
|
4. API-kall fra VNet med managed identity → skal lykkes
|
|
5. API-kall fra internett (etter disabled public) → skal feile (403 Forbidden)
|
|
|
|
### 2. Troubleshooting-guide
|
|
|
|
| Symptom | Mulig årsak | Løsning |
|
|
|---------|-------------|---------|
|
|
| **403 Forbidden fra VNet** | IP firewall blokkerer | Sjekk firewall rules, default action må være Deny med eksplisitt Allow-regel |
|
|
| **DNS resolves til public IP fra VNet** | Private DNS Zone ikke linket | Link Private DNS Zone til VNet, verifiser A-record |
|
|
| **Connection timeout** | NSG blokkerer port 443 | Sjekk NSG-regler på subnet, tillat outbound 443 til `CognitiveServices` service tag |
|
|
| **Portal ikke tilgjengelig** | Service tags mangler | Legg til `AzureFrontDoor.Frontend`, `CognitiveServicesFrontEnd` i firewall/NSG |
|
|
| **Managed identity auth fails** | RBAC-rolle mangler | Tildel `Cognitive Services User` eller `Cognitive Services OpenAI User` rolle |
|
|
|
|
### 3. Design-avveininger
|
|
|
|
**Private Endpoints vs Service Endpoints:**
|
|
|
|
| Dimensjon | Private Endpoints | Service Endpoints |
|
|
|-----------|-------------------|-------------------|
|
|
| **Sikkerhet** | ⭐⭐⭐⭐⭐ (privat IP) | ⭐⭐⭐⭐ (public IP, VNet-regler) |
|
|
| **Kompleksitet** | Høy (DNS, subnets) | Lav (enable på subnet) |
|
|
| **Kostnad** | ~40 NOK/måned per endpoint | Gratis |
|
|
| **Latency** | Lavest (direkte) | Lavt (optimalisert) |
|
|
| **Compliance** | Best (Zero Trust) | Godt (nettverksisolasjon) |
|
|
| **On-prem access** | VPN/ExpressRoute | VPN/ExpressRoute |
|
|
|
|
**Anbefaling:**
|
|
- **Prod + høy sikkerhet:** Private Endpoints + Disabled Public Access
|
|
- **Prod + kostnadsfokus:** Service Endpoints + IP Firewall
|
|
- **Dev/Test:** IP Firewall kun (akseptabel risiko)
|
|
|
|
### 4. Common Pitfalls (å unngå!)
|
|
|
|
**❌ Aktivere "Disable public access" før private endpoint fungerer:**
|
|
- Resultat: Fullstendig tap av tilgang (inkludert Azure Portal)
|
|
- Fix: Test private endpoint grundig først, bruk "Selected networks" som mellomsteg
|
|
|
|
**❌ Glemme custom subdomain:**
|
|
- Resultat: Private endpoint creation feiler eller DNS resolution fungerer ikke
|
|
- Fix: Custom subdomain må settes ved opprettelse av AI Services-ressurs
|
|
|
|
**❌ Private DNS Zone ikke linket til alle relevante VNets:**
|
|
- Resultat: DNS resolves til public IP fra peered VNets
|
|
- Fix: Link Private DNS Zone til alle VNets som trenger tilgang (hub og spokes)
|
|
|
|
**❌ Bruke `*.privatelink.openai.azure.com` som endpoint URL:**
|
|
- Resultat: API-kall feiler med HTTPS-feil
|
|
- Fix: Bruk alltid custom subdomain (`myaccount.openai.azure.com`), DNS håndterer ruting
|
|
|
|
**❌ Managed identity uten RBAC-rolle:**
|
|
- Resultat: 403 Forbidden selv om nettverkstilgang er OK
|
|
- Fix: Tildel minst `Cognitive Services User` rolle på AI Services-ressursen
|
|
|
|
### 5. Production Readiness Checklist
|
|
|
|
**Sikkerhet:**
|
|
- [ ] Private endpoints aktivert for alle AI Services
|
|
- [ ] Public network access disabled (eller IP-baserte firewall-regler)
|
|
- [ ] Managed identity aktivert (eliminerer API-nøkler i kode)
|
|
- [ ] RBAC-roller tildelt med least privilege
|
|
- [ ] NSG-regler konfigurert (least privilege)
|
|
- [ ] Azure Firewall / WAF for outbound/inbound trafikk (enterprise)
|
|
|
|
**Overvåkning:**
|
|
- [ ] Diagnostic settings aktivert (send logs til Log Analytics)
|
|
- [ ] Network Watcher flowlogger aktivert (NSG)
|
|
- [ ] Azure Monitor alerts for nettverksfeil (429, 403, connection timeout)
|
|
- [ ] Private Link metrics overvåket (bytes in/out, connection count)
|
|
|
|
**Disaster Recovery:**
|
|
- [ ] Multi-region deployment vurdert (private endpoints per region)
|
|
- [ ] VNet peering konfigurert for failover
|
|
- [ ] DNS failover-strategi dokumentert
|
|
- [ ] Backup-plan for public access (emergency access)
|
|
|
|
**Dokumentasjon:**
|
|
- [ ] Nettverksdiagram (logical + physical)
|
|
- [ ] IP-adressering dokumentert (subnets, private endpoint IPs)
|
|
- [ ] DNS-konfigurasjon dokumentert (zones, records, forwarders)
|
|
- [ ] RBAC-roller og service principals dokumentert
|
|
- [ ] Runbook for troubleshooting
|
|
|
|
### 6. Spør kunden dette (før design)
|
|
|
|
1. **Sikkerhetsnivå:**
|
|
- "Har dere compliance-krav som krever zero internett-eksponering?" → private endpoints
|
|
- "Hva er risikovurdering av data lekkasje?" → akseptabelt nivå for kostnad
|
|
|
|
2. **Eksisterende nettverk:**
|
|
- "Har dere eksisterende hub-spoke arkitektur?" → integrering vs ny VNet
|
|
- "Bruker dere on-premises DNS-servere?" → conditional forwarders trengs
|
|
|
|
3. **On-premises tilkobling:**
|
|
- "Trenger brukere on-premises tilgang til AI Services?" → VPN Gateway/ExpressRoute
|
|
- "Har dere eksisterende ExpressRoute?" → reuse eller ny
|
|
|
|
4. **Multi-region:**
|
|
- "Trenger dere DR i annen region?" → private endpoints per region
|
|
- "Hva er akseptabel RTO/RPO?" → påvirker arkitektur
|
|
|
|
5. **Kostnadsbudsjett:**
|
|
- "Hva er månedlig budsjett for nettverksinfrastruktur?" → private endpoints (~40 NOK/stk) vs service endpoints (gratis)
|
|
- "Er data egress-volum relevant?" → intra-region vs inter-region trafikk
|
|
|
|
### 7. Quick Reference - Azure CLI/PowerShell
|
|
|
|
**Opprett Private Endpoint (Azure CLI):**
|
|
```bash
|
|
# Hent ressurs-ID for AI Services
|
|
csResourceId=$(az cognitiveservices account show \
|
|
--resource-group myRG \
|
|
--name myAIAccount \
|
|
--query id --output tsv)
|
|
|
|
# Opprett private endpoint
|
|
az network private-endpoint create \
|
|
--resource-group myRG \
|
|
--name myAIPrivateEndpoint \
|
|
--location norwayeast \
|
|
--vnet-name myVNet \
|
|
--subnet privateEndpointSubnet \
|
|
--private-connection-resource-id $csResourceId \
|
|
--group-id account \
|
|
--connection-name myConnection
|
|
|
|
# Opprett DNS zone group (automatisk A-record)
|
|
az network private-endpoint dns-zone-group create \
|
|
--resource-group myRG \
|
|
--endpoint-name myAIPrivateEndpoint \
|
|
--name myDNSZoneGroup \
|
|
--private-dns-zone privatelink.cognitiveservices.azure.com \
|
|
--zone-name cognitiveservices
|
|
```
|
|
|
|
**Disable Public Access (Azure CLI):**
|
|
```bash
|
|
az cognitiveservices account update \
|
|
--resource-group myRG \
|
|
--name myAIAccount \
|
|
--set properties.publicNetworkAccess=Disabled
|
|
```
|
|
|
|
**Aktiver Managed Identity (Azure CLI):**
|
|
```bash
|
|
az cognitiveservices account identity assign \
|
|
--resource-group myRG \
|
|
--name myAIAccount
|
|
```
|
|
|
|
**Test DNS Resolution (PowerShell):**
|
|
```powershell
|
|
# Fra VNet VM - skal returnere privat IP
|
|
nslookup myaccount.cognitiveservices.azure.com
|
|
|
|
# Test port 443
|
|
Test-NetConnection -ComputerName 10.0.2.5 -Port 443
|
|
```
|
|
|
|
---
|
|
|
|
## Kilder og verifisering
|
|
|
|
**Verified (MCP microsoft-learn, 2026-02):**
|
|
- [Configure Foundry Tools virtual networks](https://learn.microsoft.com/en-us/azure/ai-services/cognitive-services-virtual-networks) - Hovedkilde for VNet-konfigurasjon, service endpoints, IP-regler, private endpoints
|
|
- [Configure secure networking for Azure AI platform services](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/ai/platform/networking) - Arkitektur-guide fra Cloud Adoption Framework
|
|
- [Configure Azure OpenAI networking](https://learn.microsoft.com/en-us/azure/foundry-classic/openai/how-to/network) - Private endpoint oppsett for Azure OpenAI
|
|
- [Network and access configuration for Azure OpenAI On Your Data](https://learn.microsoft.com/en-us/azure/foundry-classic/openai/how-to/on-your-data-configuration) - Trusted services bypass, managed identity setup
|
|
- [Azure security baseline for Azure AI services](https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/cognitive-services-security-baseline) - NSG-støtte (ikke støttet), private link (støttet), disable public access
|
|
- [Create a private endpoint for a secure connection to Azure AI Search](https://learn.microsoft.com/en-us/azure/search/service-create-private-endpoint) - Shared private link-mønster
|
|
|
|
**Baseline (modellkunnskap, januar 2025):**
|
|
- Azure Private Link pricing: ca. 40 NOK/måned per endpoint (basert på USD-priser og valutakurs)
|
|
- Custom subdomain-krav for private endpoints (dokumentert i flere Microsoft-kilder)
|
|
- NSG-støtte ikke tilgjengelig for AI Services (bekreftet via security baseline)
|
|
- Trusted services bypass med `networkAcls.bypass: "AzureServices"` (REST API-konfigurasjon)
|
|
|
|
**Sist verifisert:** 2026-06-19
|
|
**MCP calls:** 7 (microsoft_docs_search, microsoft_docs_fetch, microsoft_code_sample_search)
|
|
**Kilder:** 10 unike Microsoft Learn URLs
|