Updates across all 5 skills: ms-ai-advisor, ms-ai-engineering, ms-ai-governance, ms-ai-security, ms-ai-infrastructure. Key changes: - Language Services (Custom Text Classification, Text Analytics, QnA): retirement warning 2029-03-31, migration guides to Foundry/GPT-4o - Agentic Retrieval: 50M free reasoning tokens/month (Public Preview) - Computer Use: Claude Sonnet 4.5 (preview) + OpenAI CUA models - Agent Registry: Risks column (M365 E7), user-shared/org-published types - Declarative agents: schema v1.5 → v1.6, Store validation requirements - MLflow 3: 13 built-in LLM judges, production monitoring, Genie Code - AG-UI HITL: ApprovalRequiredAIFunction (C#) + @tool(approval_mode) (Python) - Entra ID Ignite 2025: Agent ID Admin/Developer RBAC roles, Conditional Access - Security Copilot: 400 SCU/month per 1000 M365 E5 licenses, auto-provisioned - Fast Transcription API: phrase lists, 14-language multi-lingual transcription - Azure Monitor Workbooks: Bicep support, RBAC specifics - Power Platform Copilot: data residency (Norway/Europe → EU DB, Bing → USA) - RAG security-rbac: 4-approach table (GA + 3 preview access control methods) - IaC MLOps: Well-Architected OE:05 principles, Bicep/Terraform patterns - Translator: image file batch translation Preview (JPEG/PNG/BMP/WebP) All 106 files: Last updated 2026-04 | Verified: MCP 2026-04 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 KiB
RAG Security - RBAC, Filtering, and Access Control
Last updated: 2026-04 | Verified: MCP 2026-04 Status: Preview (native ACL/RBAC), GA (security filters) Category: RAG Architecture & Semantic Search
Introduksjon
Sikkerhet i RAG-systemer (Retrieval-Augmented Generation) er kritisk for å beskytte sensitiv informasjon og overholde compliance-krav. Denne kunnskapsreferansen dekker dokumentnivå-tilgangskontroll (document-level access control), som sikrer at brukere kun kan hente og få svar basert på dokumenter de er autorisert til å se.
Azure AI Search støtter fire hovedtilnærminger til dokumentnivå-sikkerhet: security filters (GA), POSIX-like ACL/RBAC scopes (preview), Microsoft Purview sensitivity labels (preview), og SharePoint in Microsoft 365 ACLs (preview). Disse metodene lar organisasjoner bygge RAG-løsninger som respekterer eksisterende tilgangsmodeller og sikkerhetspolicyer.
Dokumentnivå-sikkerhet er spesielt viktig for RAG-applikasjoner i offentlig sektor, der ulike brukere og grupper må ha isolert tilgang til informasjon basert på rolle, organisatorisk tilhørighet, eller sikkerhetsgradert klassifisering.
Kjernekomponenter
1. Security Filters (GA)
Security filters bruker string-sammenligning for å trimme søkeresultater basert på bruker- eller gruppeidentitet.
| Egenskap | Beskrivelse |
|---|---|
| Implementasjon | OData-filter med search.in() funksjon |
| Autentisering | Ikke påkrevd (kun string matching) |
| API-kompatibilitet | Fungerer med alle versjoner/pakker |
| Ytelse | Subsekund responstid med search.in() |
| Bruksområde | Custom access models, ikke-Microsoft security frameworks |
Viktige implementasjonsdetaljer:
- Felttype:
Collection(Edm.String) - Attributter:
filterable: true,retrievable: false - Filter-syntaks:
group_ids/any(g:search.in(g, 'id1, id2, ...'))
2. Native ACL/RBAC Scope Permissions (Preview)
Native støtte basert på Microsoft Entra ID-brukere og grupper.
| Tilnærming | Data Source | Støtte-nivå |
|---|---|---|
| ADLS Gen2 ACL | Azure Data Lake Storage Gen2 | Dokumentnivå (filer + directories) |
| Azure Blob RBAC | Azure Blob Storage | Container-nivå |
| SharePoint ACL | SharePoint in Microsoft 365 | Dokumentnivå (filer + list items) |
Teknisk flyt:
- Index-schema opprettes med permission filters (preview API)
- Indexer eller Push API henter ACL-metadata fra data source
- Query-tid:
x-ms-query-source-authorizationheader inneholder Microsoft Entra token - Azure AI Search matcher token mot ACL-metadata i hvert dokument
3. Microsoft Purview Sensitivity Labels (Preview)
Integrerer Microsoft Information Protection-policyer i RAG-søkepipeline.
| Komponent | Funksjon |
|---|---|
| Data sources | Azure Blob, ADLS Gen2, SharePoint, OneLake |
| Label storage | Lagret som metadata i Azure AI Search index |
| Enforcement | Query-tid validering mot Purview policies |
| Token | Microsoft Entra token via x-ms-query-source-authorization |
4. Query-Time Access Enforcement
Azure AI Search utfører to-stegs sjekk ved query-tid (for ACL/RBAC-metoder):
- Index-nivå: Validerer at applikasjonen har Search Index Data Reader rolle
- Dokument-nivå: Matcher bruker/gruppe-token mot ACL-metadata i dokumenter
Permission sources:
| Type | Kilde |
|---|---|
userIds |
oid claim fra x-ms-query-source-authorization token |
groupIds |
Group membership fra Microsoft Graph API |
rbacScope |
Storage container-permissions (Storage Blob Data Reader rolle) |
Arkitekturmønstre
Mønster 1: Security Filter Pattern (anbefalt for custom access models)
Fordeler:
- API-agnostic (fungerer på alle versjoner)
- Ingen autentiseringskrav
- Enkel å implementere
- God ytelse med
search.in()funksjon
Ulemper:
- Krever manuell population av security-felt
- Ingen native integration med identity providers
- Kun string-sammenligning (ingen faktisk autentisering)
Når bruke:
- Custom access control models
- Ikke-Microsoft identity providers
- Legacy-systemer uten Entra ID
- Enklere sikkerhetskrav
Implementasjon:
// Index schema
{
"name": "group_ids",
"type": "Collection(Edm.String)",
"filterable": true,
"retrievable": false
}
// Query filter
{
"filter": "group_ids/any(g:search.in(g, 'group1, group2, group3'))"
}
Mønster 2: Native ACL/RBAC Pattern (anbefalt for Microsoft-stack)
Fordeler:
- Native integration med Microsoft Entra ID
- Arver permissions fra data source (ADLS Gen2, SharePoint)
- Automatisk ACL-synkronisering
- Microsoft Graph integration for nested groups
Ulempler:
- Preview-funksjon (risiko for breaking changes)
- Krever preview API/SDK
- Høyere initial kompleksitet
- Avhengighet av Microsoft-økosystem
Når bruke:
- Azure-native data sources (ADLS Gen2, Blob, SharePoint)
- Eksisterende ACL-modeller som skal preserveres
- Behov for automatic permission inheritance
- Enterprise-scenarier med Entra ID
Tekniske krav:
- Preview REST API:
2025-11-01-preview - Managed identity på Search service
- Role assignment: Storage Blob Data Reader (for ADLS Gen2/Blob)
Mønster 3: Multitenant API Layer Pattern (anbefalt for multitenancy)
Arkitektur:
User → Intelligent App → Orchestrator → API Layer → Data Stores
↓
Identity Provider
API Layer ansvar:
- Route queries til riktig tenant-store
- Enforce custom security trimming logic
- Bruke riktig identity for platform-basert authorization
- Logg access for audit purposes
Fordeler:
- Encapsulation av tenant/user access logic
- Single governance point
- Enklere testing og validering
- Separasjon av concerns
Ulempler:
- Ekstra latency (ekstra hop)
- Krever custom development
- Potensielt single point of failure
Når bruke:
- Multitenant SaaS-løsninger
- Komplekse authorization rules
- Behov for audit logging
- Custom security requirements beyond platform capabilities
Beslutningsveiledning
Beslutningstabell
| Scenario | Anbefalt tilnærming | Begrunnelse |
|---|---|---|
| Azure-native data sources med eksisterende ACLer | Native ACL/RBAC (preview) | Arver permissions automatisk, ingen manuell sync |
| Custom access models uten Entra ID | Security filters | API-agnostic, enkel implementasjon |
| Multitenant SaaS | API Layer + security filters | Full kontroll over tenant isolation |
| Microsoft 365-integrasjon | SharePoint ACL (preview) eller Purview labels | Native integration med M365 security |
| Offentlig sektor med sikkerhetsgradert info | Purview sensitivity labels + API layer | Compliance-fokusert, audit-ready |
| Legacy-systemer | Security filters | Ingen avhengighet av moderne identity providers |
Vanlige feil
| Feil | Konsekvens | Løsning |
|---|---|---|
| Security-felt er retrievable | Identiteter eksponeres i search results | Sett retrievable: false |
Bruker equality expressions (eq) for filters |
Ytelsesproblem (sekunder latency med mange grupper) | Bruk search.in() funksjon |
Glemmer å sette filterable: true |
Filter fungerer ikke | Oppdater index schema |
| Hardkoder group IDs i kode | Maintenance nightmare | Hent group membership dynamisk (Microsoft Graph) |
| Antar nested groups fungerer automatisk | Underautorisasjon (brukere mister tilgang) | Expand nested groups før query (Graph API) |
| Ignorerer ACL hierarchy (ADLS Gen2) | Feil permissions på filer | Bruk indexer med ACL support (preview API) |
Røde flagg
⚠️ Du bør vurdere alternativ hvis:
- Du ikke kan bruke preview-APIer i produksjon
- Du trenger document-level security men mangler identity management
- Du planlegger å eksponere RAG-endepunkt uten autentisering
- Du har > 1000 grupper per bruker (ytelsesutfordringer)
- Du trenger real-time ACL-synkronisering (preview har refresh-latency)
Integrasjon med Microsoft-stakken
Azure AI Search + Azure OpenAI On Your Data
Dokument-level access control:
- Konfigurer security filters i Azure AI Search index
- Azure OpenAI On Your Data bruker filters automatisk
- Pass user token via
filterparameter i API request
{
"dataSources": [{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": "<search-endpoint>",
"indexName": "<index-name>",
"filter": "group_ids/any(g:search.in(g, 'user-groups'))"
}
}]
}
Entra ID Integration
| Komponent | Rolle |
|---|---|
| Authentication | User identity via OAuth 2.0 / OpenID Connect |
| Authorization | Group membership via Microsoft Graph API |
| Token | JWT token i x-ms-query-source-authorization header |
| Nested groups | Automatic expansion via Graph API (for ACL patterns) |
Supported group types (SharePoint ACL preview):
- Microsoft Entra security groups ✅
- Microsoft 365 groups ✅
- Mail-enabled security groups ✅
- SharePoint groups ❌ (ikke støttet i preview)
Microsoft Graph API
Hent group membership:
GET https://graph.microsoft.com/v1.0/me/memberOf
Authorization: Bearer <user-token>
Response:
{
"value": [
{ "id": "group-id-1", "displayName": "HR Team" },
{ "id": "group-id-2", "displayName": "Finance Team" }
]
}
Copilot Studio + Power Platform
Power Platform DLP + RAG:
- Power Automate kan hente group membership fra Graph API
- Pass group IDs til Azure AI Search via connector
- Enforce additional DLP policies på retrieved content
Copilot Studio custom data sources:
- Bruk security filters i Azure AI Search data source configuration
- User context automatisk tilgjengelig i Copilot Studio flows
- Map user identity til Azure AI Search filter expression
Offentlig sektor (Norge)
GDPR + Datasuverenitet
| Krav | Implementasjon |
|---|---|
| Data residency | Azure AI Search i Norway East/West regions |
| Audit logging | Azure Monitor + Log Analytics for alle search queries |
| Data minimization | Security filter fields må være retrievable: false |
| Right to be forgotten | Document delete via Azure AI Search APIs |
| Consent management | Integrer consent-status i security filter logic |
Schrems II + Cloud Act
Anbefalinger:
- Bruk Azure Confidential Computing for sensitive RAG workloads
- Customer-managed keys (CMK) for encryption at rest
- Private endpoints for network isolation
- Avoid cross-region data transfer (keep data in Norway regions)
AI Act (EU)
High-risk AI system requirements:
- Human oversight: Implementer HITL (Human In The Loop) for RAG-svar på kritiske beslutninger
- Transparency: Logg hvilke dokumenter som ble retrieved og brukt i svar
- Accuracy: Test security filters med adversarial scenarios (authorization bypass attempts)
- Documentation: Vedlikehold ADR for security architecture decisions
Forvaltningsloven + Offentleglova
| Lov | Relevant for RAG |
|---|---|
| Forvaltningsloven § 18 | Taushetsplikt → dokumentnivå-sikkerhet obligatorisk |
| Offentleglova § 3 | Innsynsrett → audit trail for access requests |
| Sikkerhetsloven | Sikkerhetsgradert informasjon → Purview sensitivity labels + DLP |
Sikkerhetsgradert informasjon:
- Ugradert: Standard security filters
- Begrenset/Konfidensielt: Native ACL/RBAC + CMK
- Hemmelig/Strengt hemmelig: Ikke i Azure (krever on-premises eller Secure Cloud)
Datasuverenitet
Anbefalt stack for offentlig sektor:
- Azure AI Search (Norway East/West)
- Azure OpenAI (Sweden Central med data residency commitment)
- Private endpoint for all connections
- Managed identity (unngå API keys)
- Customer Lockbox enabled (Microsoft support-tilgang)
Kostnad og lisensiering
Prismodell-oversikt
| Komponent | Kostnadsfaktor |
|---|---|
| Azure AI Search | Tier-basert (Basic, Standard, Storage Optimized) |
| Security filters | Ingen ekstra kostnad (inkludert i search cost) |
| Native ACL/RBAC | Graph API calls (per 1000 requests) + search cost |
| Purview labels | Microsoft Purview lisensiering (per user) |
| SharePoint ACL | SharePoint lisensiering (M365 E3/E5) |
Estimert ekstra kostnad (preview features)
Native ACL/RBAC:
- Graph API: ~$0.0004 per request (group membership lookup)
- Antatt 1 lookup per query → $0.40 per 1000 queries
- Caching kan redusere Graph API calls betydelig
Purview sensitivity labels:
- Purview Information Protection: Inkludert i M365 E5 Compliance
- Uten E5: ca. $5-$12 per user/måned
Optimaliseringstips
- Cache group membership: Reduser Graph API calls med Redis/Azure Cache
- Bruk group-based access: Unngå per-user ACLs (dårlig ytelse)
- Security filter over native ACL: For high-volume scenarios (lavere latency)
- Batch ACL refresh: Ikke sync ACLs på hver indexing-operasjon
- Monitor query latency: Preview features kan ha variabel ytelse
For arkitekten (Cosmo)
Spørsmål å stille kunden
-
Identity & Access:
- Har dere Microsoft Entra ID (Azure AD)? Eller annen identity provider?
- Hvordan håndteres brukergrupper i dag? (flat structure, nested groups?)
- Finnes det eksisterende ACLer på data sources (SharePoint, ADLS Gen2)?
-
Compliance & Regulering:
- Er dataene sikkerhetsgradert (Ugradert/Begrenset/Konfidensielt/Hemmelig)?
- Hvilke compliance-krav gjelder? (GDPR, AI Act, Forvaltningsloven)
- Trenger dere audit logging av alle search queries?
-
Teknisk modenhet:
- Kan dere bruke preview-APIer i produksjon? (SLA, support-risiko)
- Har dere eksisterende Azure-infrastruktur? (VNet, Private endpoints)
- Hvilken CI/CD-modell brukes? (Terraform, Bicep, ARM templates)
-
Skalerbarhet:
- Forventet antall brukere? Queries per sekund?
- Hvor mange grupper per bruker i gjennomsnitt?
- Endres ACLer ofte? (real-time sync vs. batch refresh)
-
Datakilder:
- Hvor ligger dataene i dag? (SharePoint, ADLS Gen2, Blob, on-premises?)
- Finnes det sensitivity labels allerede? (Microsoft Purview)
- Kreves cross-source access control? (data fra flere systemer)
-
Risk appetite:
- Hva er konsekvensen av data leakage? (Kritisk, Høy, Medium, Lav)
- Akseptabelt med preview features? Eller kun GA-funksjonalitet?
- Hvor mye custom development kan teamet håndtere?
-
Integration:
- Skal RAG-løsningen integreres med eksisterende apps? (M365 Copilot, Power Platform)
- Trenger dere API layer for egen orchestration? (custom logic)
- Multitenant-behov? (delt infrastruktur for flere organisasjoner)
-
Performance & Cost:
- Hva er akseptabel latency for search queries? (subsekund, < 1 sek, < 5 sek)
- Budsjett for Azure AI Search? (Basic: ~$75/måned, Standard S1: ~$250/måned)
- Kan dere akseptere Graph API-kostnader for ACL enforcement?
Fallgruver per modenhetsnivå
Beginner (Proof of Concept / Pilot)
Vanlige feil:
- Bruker equality expressions for security filters (ytelsesproblem)
- Glemmer å sette
retrievable: falsepå security-felt - Hardkoder group IDs i stedet for dynamisk henting
- Ignorerer nested groups (underautorisasjon)
Anbefaling:
- Start med security filters (GA, enklest)
- Test med < 100 users og < 10 groups
- Bruk Azure AI Search Basic tier for kostnadsreduksjon
- Mock group membership (ingen Graph API-avhengighet)
Intermediate (Production-ready MVP)
Vanlige feil:
- Antar preview-APIer er production-ready (breaking changes-risiko)
- Mangler caching av group membership (unødvendig Graph API-trafikk)
- Ingen audit logging av access attempts (compliance-gap)
- Glemmer å teste authorization bypass scenarios
Anbefaling:
- Implementer API layer for access control logic
- Bruk Azure Monitor + Log Analytics for audit trail
- Cache group membership i Redis (TTL: 15-30 min)
- Kjør penetration testing på security filters
- Bruk managed identity (unngå API keys)
Advanced (Enterprise-scale)
Vanlige feil:
- Over-engineering med native ACL når security filters holder
- Kompleks multitenant-arkitektur uten klare tenant boundaries
- Mangel på disaster recovery plan for ACL-data
- Ingen performance benchmarking av query latency med filters
Anbefaling:
- Kombiner security filters med native ACL (hybrid approach)
- Implementer geo-redundant Azure AI Search for HA
- Bruk Application Insights for distributed tracing
- Automatiser ACL-refresh med Azure Functions (scheduled triggers)
- Dokumenter security architecture i ADR (Architecture Decision Records)
Anbefalinger per modenhetsnivå
| Nivå | Sikkerhetstilnærming | Rationale |
|---|---|---|
| Beginner | Security filters (GA) | Enklest, ingen preview-risiko, lavest kostnad |
| Intermediate | Security filters + Graph API | Dynamisk group membership, bedre maintainability |
| Advanced | Native ACL/RBAC (preview) + API layer | Automatic permission inheritance, enterprise-ready |
Kilder og verifisering
Microsoft Learn-dokumentasjon (Verified via MCP)
-
Document-level access control overview
- URL: https://learn.microsoft.com/en-us/azure/search/search-document-level-access-overview
- Confidence: Verified (MCP-fetch 2026-02)
- Dekning: Alle fire patterns (security filters, ACL/RBAC, Purview, SharePoint)
-
Security filters for trimming results
- URL: https://learn.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search
- Confidence: Verified (MCP-fetch 2026-02)
- Dekning:
search.in()funksjon, index schema, query syntax
-
Query-time ACL and RBAC enforcement
- URL: https://learn.microsoft.com/en-us/azure/search/search-query-access-control-rbac-enforcement
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Preview API, permission filter workflow, Graph API integration
-
Use ADLS Gen2 indexer for ACL ingestion
- URL: https://learn.microsoft.com/en-us/azure/search/search-indexer-access-control-lists-and-role-based-access
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Hierarchical permissions, POSIX-like ACLs, indexer configuration
-
Azure OpenAI On Your Data - Document-level access control
- URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/on-your-data-configuration#document-level-access-control
- Confidence: Verified (MCP-search 2026-02)
- Dekning: RAG integration, filter parameter, group_ids field mapping
-
Security in Azure AI Search
- URL: https://learn.microsoft.com/en-us/azure/search/search-security-overview
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Authorization, row-level security, RBAC roles
-
Design secure multitenant RAG inferencing solution
- URL: https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/secure-multitenant-rag
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Multitenant patterns, API layer architecture, filtering strategies
-
Retrieval-augmented Generation (RAG) in Azure AI Search
- URL: https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview
- Confidence: Verified (MCP-search 2026-02)
- Dekning: RAG challenges, security & governance
-
Retrieval augmented generation (RAG) and indexes (AI Foundry)
- URL: https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/retrieval-augmented-generation?view=foundry-classic
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Security considerations, access control at retrieval time
-
RAG LLM evaluation - Responsible AI & security
- URL: https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-llm-evaluation-phase#responsible-ai,-content-safety,-and-security-evaluation
- Confidence: Verified (MCP-search 2026-02)
- Dekning: Content safety, privacy, adversarial threats
Code samples (Verified via MCP)
- Security filter query example (C#)
- URL: https://learn.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search#apply-the-security-filter-in-the-query
- Confidence: Verified (MCP code sample search 2026-02)
- Language: HTTP / C#
- Dekning:
search.in()filter syntax
Konfidensnivå per seksjon
| Seksjon | Confidence | Kilde |
|---|---|---|
| Kjernekomponenter | Verified | MCP docs (1, 2, 3, 4) |
| Arkitekturmønstre | Verified | MCP docs (1, 2, 7) |
| Beslutningsveiledning | Baseline | Modellkunnskap + MCP context |
| Microsoft-stack integrasjon | Verified | MCP docs (5, 9) |
| Offentlig sektor (Norge) | Baseline | Modellkunnskap (GDPR, AI Act, norsk lov) |
| Kostnad og lisensiering | Baseline | Estimater basert på Azure pricing (ikke direkte MCP-verified) |
| For arkitekten (Cosmo) | Baseline | Best practices + erfaring |
Sist verifisert mot Microsoft Learn: 2026-02-03 (via microsoft-learn MCP server)
Preview API-versjon: 2025-11-01-preview (ACL/RBAC, Purview labels, SharePoint ACL)
GA features: Security filters (alle API-versjoner)
Note: Preview features kan endre seg. Konsulter alltid nyeste dokumentasjon før produksjon.
Dokumentnivå-tilgangskontroll — oppdatering 2026-04
4 tilnærminger (oppdatert):
| Tilnærming | Status | Beskrivelse |
|---|---|---|
| Security filters | GA | String-sammenligning med search.in() — API-agnostisk |
| POSIX-like ACL/RBAC scopes | Preview | Microsoft Entra ID-autentisering mot dokument-ACLer (ADLS Gen2) |
| Microsoft Purview sensitivity labels | Preview | Entra-token + Purview policy enforced ved query-tid |
| SharePoint M365 ACLs | Preview | SharePoint-tilganger ekstraheres av indexer og håndheves ved søk |
ADLS Gen2 ACL/RBAC (preview):
- RBAC: container-nivå (grov tilgangskontroll for alle dokumenter i container)
- ACL: fil/mappe-nivå (finkornet per-dokument tilgangskontroll)
- ABAC: ikke støttet i Azure AI Search
- Tilgangsevaluering: RBAC sjekkes først, deretter ACL. Tilgang gis om én av dem tillater det
- Permissions synkroniseres ved: første full indexer-kjøring, nye dokumenter, eller manuell trigger via
/resync(preview)
Query-enforcement: x-ms-query-source-authorization-header med Entra-token aktiverer automatisk trimming.