Megosztás a következőn keresztül:


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

Az Azure AI Search nem biztosít natív dokumentumszintű engedélyeket, és felhasználói engedélyek alapján nem tudja eltérni az ugyanazon indexen belüli keresési eredményeket. Á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ésekkel rendelkező 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

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

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, azt tapasztalja, hogy a szűrők megfelelnek az igényeiknek.

Az Azure AI Searchben a biztonsági szűrő egy rendszeres OData-szűrő, amely egy biztonsági tagból álló sztring alapján tartalmaz vagy kizár egy keresési eredményt. 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

  • 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)

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

  3. Állítsa a mező attribútumát retrievable false úgy, hogy az ne legyen visszaadva a keresési kérelem 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. Az Azure AI Search szolgáltatásban indexelt dokumentumoknak az összes mezőhöz értékeket kell használniuk, beleértve a "group_ids" értéket is. A "secured_file_b" nevű dokumentum file_name esetében 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.

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

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 Search 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 Searchben 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 leküldéses vagy lekéréses 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=2024-07-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 merge mergeOrUpload 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, é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=2024-07-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 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.

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