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

Az Azure AI Search nem biztosít dokumentumszintű engedélyeket, és nem módosíthatja a keresési eredményeket ugyanazon indexen belül felhasználói engedélyek szerint. Áthidaló megoldásként létrehozhat egy szűrőt, amely egy 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éseket tartalmazó biztonsági szűrési mintát ismerteti:

  • Forrásdokumentumok összeállítása a szükséges tartalommal
  • Mező létrehozása az egyszerű azonosítókhoz
  • 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

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

Bár az Azure AI Search nem integrálható biztonsági alrendszerekkel az indexen belüli tartalomhoz való hozzáférés érdekében, sok olyan ügyfél, aki dokumentumszintű biztonsági követelményekkel rendelkezik, úgy találta, hogy a szűrők megfelelnek az igényeiknek.

Az Azure AI Searchben a biztonsági szűrő egy normál OData-szűrő, amely egy egyező érték alapján tartalmaz vagy kizár egy keresési eredményt, azzal a kivételével, hogy egy biztonsági szűrőben a feltétel egy biztonsági tagból álló sztring. Nincs hitelesítés vagy engedélyezés a biztonsági tagon keresztül. Az egyszerű csak egy sztring, amelyet egy szűrőkifejezés használ, hogy belefoglaljon vagy kizárjon egy dokumentumot a keresési eredményekbő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 tiltása: 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

  • A csoport- vagy felhasználóidentitást tartalmazó mezőnek egy szűrhető attribútummal rendelkező sztringnek kell lennie. Gyűjteménynek kell lennie. Nem szabad null értékeket engedélyeznie.

  • 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 is szerepelni fog, ha a hívó identitása megegyezik a dokumentum "security_id" értékével.

    {  
        "Employee-1": {  
            "id": "100-1000-10-1-10000-1",
            "name": "Abram",   
            "salary": 75000,   
            "married": true,
            "security_id": "10011"
        },
        "Employee-2": {  
            "id": "200-2000-20-2-20000-2",
            "name": "Adams",   
            "salary": 75000,   
            "married": true,
            "security_id": "20022"
        } 
    }  
    

    Feljegyzés

    Az azure AI Search által indexelhető forrásdokumentumokba az egyszerű azonosítók lekérésének és a sztringek beszúrásának folyamatát ez a cikk nem ismerteti. Az azonosítók beszerzéséhez tekintse meg az identitásszolgáltató dokumentációját.

Biztonsági mező létrehozása

A keresési indexben a mezőgyűjteményben 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) Győződjön meg arról, hogy rendelkezik olyan filterable attribútummal true , amely a felhasználó hozzáférése alapján szűri a keresési eredményeket. Ha például "group_idssecured_file_b" értékre file_name állítja a dokumentum mezőjét["group_id1, group_id2"], akkor csak a "group_id1" vagy a "group_id2" csoportazonosítóhoz tartozó felhasználók rendelkeznek olvasási hozzáféréssel a fájlhoz.

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

  2. Az indexekhez dokumentumkulcs szükséges. A "file_id" mező megfelel ennek a követelménynek. Az indexnek kereshető tartalmat is tartalmaznia kell. A példában a "file_name" és a "file_description" mezők jelölik ezt.

    POST https://[search service].search.windows.net/indexes/securedfiles/docs/index?api-version=2023-11-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 }
         ]
     }
    

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

HTTP POST-kérés küldése 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=2023-11-01

A kérelem törzsében adja meg a dokumentumok tartalmát:

{
    "value": [
        {
            "@search.action": "upload",
            "file_id": "1",
            "file_name": "secured_file_a",
            "file_description": "File access is restricted to the 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ésen group_ids alapuló vágásához ki kell adnia egy keresési lekérdezést egy group_ids/any(g:search.in(g, 'group_id1, group_id2,...')) szűrővel, ahol "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 Search 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:

POST https://[service name].search.windows.net/indexes/securedfiles/docs/search?api-version=2020-06-30
Content-Type: application/json  
api-key: [admin or query key]

Adja meg a szűrőt a kérelem törzsében:

{
   "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 egyszerű azonosítókat adhat meg a kérelmező felhasználónak, hogy megfeleljenek az egyes céldokumentumokhoz társított egyszerű azonosítóknak. A keresési kérések kezelésekor a függvény kiszűri azokat a search.in keresési eredményeket, amelyekhez a felhasználó egyik tagjának 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.

A Microsoft Entra-azonosítón alapuló alternatív minta vagy más biztonsági funkciók újbóli megtekintéséhez tekintse meg az alábbi hivatkozásokat.