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.
568 lines
No EOL
23 KiB
Markdown
568 lines
No EOL
23 KiB
Markdown
# RAG Security - RBAC, Filtering, and Access Control
|
|
|
|
**Last updated:** 2026-06-19 | Verified: MCP 2026-06-19
|
|
**Status:** Preview (native ACL/RBAC), GA (security filters)
|
|
**Category:** RAG Architecture & Semantic Search
|
|
**Type:** reference
|
|
**Source:** https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Kjernekomponenter](#kjernekomponenter)
|
|
- [Arkitekturmønstre](#arkitekturmønstre)
|
|
- [Beslutningsveiledning](#beslutningsveiledning)
|
|
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
|
|
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
|
|
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
|
|
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
|
|
- [Kilder og verifisering](#kilder-og-verifisering)
|
|
|
|
## 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:**
|
|
1. Index-schema opprettes med permission filters (preview API)
|
|
2. Indexer eller Push API henter ACL-metadata fra data source
|
|
3. Query-tid: `x-ms-query-source-authorization` header inneholder Microsoft Entra token
|
|
4. 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):
|
|
|
|
1. **Index-nivå**: Validerer at applikasjonen har **Search Index Data Reader** rolle
|
|
2. **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:**
|
|
```json
|
|
// 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: `2026-05-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:**
|
|
1. Route queries til riktig tenant-store
|
|
2. Enforce custom security trimming logic
|
|
3. Bruke riktig identity for platform-basert authorization
|
|
4. 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:**
|
|
1. Konfigurer security filters i Azure AI Search index
|
|
2. Azure OpenAI On Your Data bruker filters automatisk
|
|
3. Pass user token via `filter` parameter i API request
|
|
|
|
```json
|
|
{
|
|
"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:**
|
|
```http
|
|
GET https://graph.microsoft.com/v1.0/me/memberOf
|
|
Authorization: Bearer <user-token>
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"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
|
|
|
|
1. **Cache group membership**: Reduser Graph API calls med Redis/Azure Cache
|
|
2. **Bruk group-based access**: Unngå per-user ACLs (dårlig ytelse)
|
|
3. **Security filter over native ACL**: For high-volume scenarios (lavere latency)
|
|
4. **Batch ACL refresh**: Ikke sync ACLs på hver indexing-operasjon
|
|
5. **Monitor query latency**: Preview features kan ha variabel ytelse
|
|
|
|
## For arkitekten (Cosmo)
|
|
|
|
### Spørsmål å stille kunden
|
|
|
|
1. **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)?
|
|
|
|
2. **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?
|
|
|
|
3. **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)
|
|
|
|
4. **Skalerbarhet:**
|
|
- Forventet antall brukere? Queries per sekund?
|
|
- Hvor mange grupper per bruker i gjennomsnitt?
|
|
- Endres ACLer ofte? (real-time sync vs. batch refresh)
|
|
|
|
5. **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)
|
|
|
|
6. **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?
|
|
|
|
7. **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)
|
|
|
|
8. **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: false` på 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)
|
|
|
|
1. **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)
|
|
|
|
2. **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
|
|
|
|
3. **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
|
|
|
|
4. **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
|
|
|
|
5. **Azure OpenAI On Your Data - Document-level access control**
|
|
- URL: https://learn.microsoft.com/en-us/azure/foundry-classic/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
|
|
|
|
6. **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
|
|
|
|
7. **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
|
|
|
|
8. **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
|
|
|
|
9. **Retrieval augmented generation (RAG) and indexes (AI Foundry)**
|
|
- URL: https://learn.microsoft.com/en-us/azure/foundry/concepts/retrieval-augmented-generation?view=foundry-classic
|
|
- Confidence: **Verified** (MCP-search 2026-02)
|
|
- Dekning: Security considerations, access control at retrieval time
|
|
|
|
10. **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)
|
|
|
|
11. **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-06-19 (via microsoft-learn MCP server)
|
|
|
|
**Preview API-versjon:** 2026-05-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. |