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.
Biztonsági mező hozzáadása .
Collection(Edm.String)
Győződjön meg arról, hogy rendelkezik olyanfilterable
attribútummaltrue
, amely a felhasználó hozzáférése alapján szűri a keresési eredményeket. Ha például "group_ids
secured_file_b" értékrefile_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
retrievable
false
úgy, hogy az ne legyen visszaadva a keresési kérelem részeként.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 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:
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.