Biztonsági szűrők az Eredmények vágásához az Azure AI Keresésben

Note

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

Az olyan keresési megoldások esetében, amelyek nem tudják használni a beépített hozzáférés-vezérlési listát (ACL) a dokumentumszintű engedélyezéshez, az Azure AI Keresés támogatja egy olyan szűrő létrehozását, amely csoport- vagy felhasználói identitást tartalmazó sztring alapján vágja le a keresési eredményeket.

Ez a cikk a következő lépésekkel rendelkező biztonsági szűrési mintát ismerteti:

  • Forrásdokumentumok összeállítása a szükséges tartalommal, beleértve egy identitás tárolására szolgáló sztringet
  • A keresési indexben hozzon létre egy mezőt a főbb azonosítók számára.
  • Dokumentumok leküldése a keresési indexbe indexelés céljából
  • Az index lekérdezése a search.in szűrőfüggvénnyel

A gyakorlati tanulást biztosító bemutatókra és példákra mutató hivatkozásokkal zárul. Javasoljuk, hogy először tekintse át ezt a cikket a minta megértéséhez.

Tudnivalók a biztonsági szűrő mintájáról

A biztonsági szűrőminta egy normál OData-szűrő használatával szimulálja a dokumentumszintű engedélyezést, amely egy biztonsági tagból álló sztringen alapuló keresési eredményt tartalmaz vagy kizár. Nincs hitelesítés vagy engedélyezés a biztonsági tagon keresztül. Az alapelve csak egy karakterlánc, amelyet egy szűrőkifejezésben használnak, hogy belefoglaljon vagy kizárjon egy dokumentumot a keresési eredmények közül.

A biztonsági szűrés többféleképpen is megvalósítható. Ennek egyik módja az egyenlőségi kifejezések bonyolult diszjunkciója: például Id eq 'id1' or Id eq 'id2', és így tovább. Ez a megközelítés hibalehetőséget jelent, nehezen tartható fenn, és ha a lista több száz vagy több ezer értéket tartalmaz, akkor a lekérdezés válaszideje néhány másodperccel lelassul.

Jobb megoldás a függvény használata a search.in biztonsági szűrőkhöz, a cikkben leírtak szerint. Ha egyenlőségi kifejezés helyett használ search.in(Id, 'id1, id2, ...') , az alszekundumos válaszidőkre számíthat.

Előfeltételek

  • Egy csoport- vagy felhasználói identitást, például Microsoft Entra objektumazonosítót tartalmazó sztringmező.

  • Az ugyanazon dokumentum más mezőinek meg kell adniuk az adott csoport vagy felhasználó számára elérhető tartalmat. A következő JSON-dokumentumokban a "security_id" mezők egy biztonsági szűrőben használt identitásokat tartalmaznak, és a név, a fizetés és a családi állapot szerepel, ha a hívó identitása megegyezik a dokumentum "security_id" értékével.

    {  
        "Employee-1": {  
            "employee_id": "100-1000-10-1-10000-1",
            "name": "Abram",   
            "salary": 75000,   
            "married": true,
            "security_id": "alphanumeric-object-id-for-employee-1"
        },
        "Employee-2": {  
            "employee_id": "200-2000-20-2-20000-2",
            "name": "Adams",   
            "salary": 75000,   
            "married": true,
            "security_id": "alphanumeric-object-id-for-employee-2"
        } 
    }  
    

Biztonsági mező létrehozása

A keresési indexben a mezők gyűjteményében egy olyan mezőre van szüksége, amely tartalmazza a csoportot vagy a felhasználói identitást, hasonlóan az előző példában szereplő fiktív "security_id" mezőhöz.

  1. Biztonsági mező hozzáadása Collection(Edm.String)-ként.

  2. Állítsa be a mező filterable attribútumát a következőre true: .

  3. Állítsa be a mező attribútumát retrievablefalse úgy, hogy az ne legyen visszaadva a keresési válasz részeként.

  4. Az indexekhez dokumentumkulcs szükséges. A "file_id" mező megfelel ennek a követelménynek.

  5. Az indexnek kereshető és lekérdezhető tartalmakat is tartalmaznia kell. A példában a "file_name" és a "file_description" mezők jelölik ezt.

    Az alábbi indexséma megfelel a mezőkövetelményeknek. A Azure AI Keresés indexelt dokumentumoknak az összes ilyen mező értékével kell rendelkezniük, beleértve a group_ids. A lekérdezés visszaadja a dokumentumot file_namesecured_file_b , ha a biztonsági szűrő tartalmazza group_id1 vagy group_id2.

    POST https://[search service].search.windows.net/indexes/securedfiles/docs/index?api-version=2026-04-01
    {
         "name": "securedfiles",  
         "fields": [
             {"name": "file_id", "type": "Edm.String", "key": true, "searchable": false },
             {"name": "file_name", "type": "Edm.String", "searchable": true },
             {"name": "file_description", "type": "Edm.String", "searchable": true },
             {"name": "group_ids", "type": "Collection(Edm.String)", "filterable": true, "retrievable": false }
         ]
     }
    

Note

A(z) retrievablegroup_ids értékre állítása megakadályozza, hogy a(z) false egy dokumentum részeként megjelenjen a keresési eredményekben. Ez nem tartalomfedés vagy mezőszintű biztonsági mechanizmus. Ebben a mintában a dokumentumszintű engedélyezést a rendszer úgy kényszeríti ki, hogy minden lekérdezésre alkalmazza a biztonsági szűrőt. Ne támaszkodjon retrievable egyedül a bizalmas információk védelmére az összes lekérdezési funkcióval vagy válaszformátumgal szemben.

Adatok leküldése az indexbe a REST API használatával

Töltse fel a keresési indexet olyan dokumentumokkal, amelyek a mezőgyűjtemény minden mezőjéhez tartalmaznak értékeket, beleértve a biztonsági mező értékeit is. Az Azure AI Keresés nem biztosít API-kat vagy funkciókat a biztonsági mező feltöltéséhez. A cikk végén felsorolt példák közül azonban számos a mező feltöltési technikáit ismerteti.

Az Azure AI Keresésben az adatok betöltésének megközelítései a következők:

  • Egyetlen leküldéses vagy lekéréses (indexelő) művelet, amely az összes mezővel kitöltött dokumentumokat importálja
  • Több feltöltési vagy letöltési művelet. Ha a másodlagos importálási műveletek a megfelelő dokumentumazonosítót célják, a mezőket egyenként is betöltheti több importálással.

Az alábbi példa egyetlen HTTP POST-kérést mutat be az index URL-végpontjának dokumentumgyűjteményéhez (lásd : Dokumentumok – Index). A HTTP-kérés törzse az indexelendő dokumentumok JSON-renderelése:

POST https://[search service].search.windows.net/indexes/securedfiles/docs/index?api-version=2026-04-01
{
    "value": [
        {
            "@search.action": "upload",
            "file_id": "1",
            "file_name": "secured_file_a",
            "file_description": "File access is restricted to Human Resources.",
            "group_ids": ["group_id1"]
        },
        {
            "@search.action": "upload",
            "file_id": "2",
            "file_name": "secured_file_b",
            "file_description": "File access is restricted to Human Resources and Recruiting.",
            "group_ids": ["group_id1", "group_id2"]
        },
        {
            "@search.action": "upload",
            "file_id": "3",
            "file_name": "secured_file_c",
            "file_description": "File access is restricted to Operations and Logistics.",
            "group_ids": ["group_id5", "group_id6"]
        }
    ]
}

Ha frissítenie kell egy meglévő dokumentumot a csoportok listájával, használhatja a mergemergeOrUpload következő műveletet:

{
    "value": [
        {
            "@search.action": "mergeOrUpload",
            "file_id": "3",
            "group_ids": ["group_id7", "group_id8", "group_id9"]
        }
    ]
}

A biztonsági szűrő alkalmazása a lekérdezésben

A dokumentumok hozzáférés group_ids alapján történő vágásához le kell futtatnia egy keresési lekérdezést egy group_ids/any(g:search.in(g, 'group_id1, group_id2,...')) szűrővel, ahol a "group_id1, group_id2,..." azok a csoportok, amelyekhez a keresési kérelem kiállítója tartozik.

Ez a szűrő megfelel azoknak a dokumentumoknak, amelyeknél a group_ids mező az egyik megadott azonosítót tartalmazza. Az Azure AI Keresés használatával végzett dokumentumok keresésével kapcsolatos részletes információkért olvassa el a Dokumentumok keresése című cikket.

Ez a minta bemutatja, hogyan állíthat be lekérdezést POST-kéréssel.

Adja ki a HTTP POST kérést, és adja meg a szűrőt a kérelem törzsében:

POST https://[service name].search.windows.net/indexes/securedfiles/docs/search?api-version=2026-04-01

{
   "filter":"group_ids/any(g:search.in(g, 'group_id1, group_id2'))"  
}

Vissza kell szereznie a dokumentumokat, ahol group_ids a "group_id1" vagy a "group_id2" szerepel. Más szóval lekérheti azokat a dokumentumokat, amelyekhez a kérelem kiállítója olvasási hozzáféréssel rendelkezik.

{
 [
   {
    "@search.score":1.0,
     "file_id":"1",
     "file_name":"secured_file_a",
   },
   {
     "@search.score":1.0,
     "file_id":"2",
     "file_name":"secured_file_b"
   }
 ]
}

Következő lépések

Ez a cikk a felhasználói identitás és a függvény alapján az eredmények szűrésének search.in() mintáját ismerteti. Ezzel a függvénnyel kérésként átadhatja a fő azonosítókat a felhasználó számára, hogy azok illeszkedjenek az egyes céldokumentumokhoz kapcsolt fő azonosítókhoz. Amikor egy keresési kérés kerül feldolgozásra, a search.in függvény kiszűri azokat a keresési eredményeket, amelyekhez a felhasználó egyik jogosultsága sem rendelkezik olvasási hozzáféréssel. Az egyszerű azonosítók például biztonsági csoportokat, szerepköröket vagy akár a felhasználó saját identitását is jelölhetik.

További példák, bemutatók és videók: