Biztonsági szűrők az Azure AI Search eredményeinek a MAzure Active Directoryval történő levágásához
Ez a cikk bemutatja, hogyan használhat biztonsági identitásokat az Azure AI Search szűrőivel együtt a keresési eredmények felhasználói csoporttagság alapján történő levágásához.
Ez a cikk a következő feladatokat mutatja be:
- Csoportok és felhasználók létrehozása
- A felhasználó társítása a létrehozott csoporttal
- Az új csoportok gyorsítótárazása
- Dokumentumok indexelése társított csoportokkal
- Keresési kérelem kiállítása csoportazonosító-szűrővel
Előfeltételek
Az Azure AI Searchben az indexnek rendelkeznie kell egy biztonsági mezővel azon csoportidentitások listájának tárolásához, amelyek olvasási hozzáféréssel rendelkeznek a dokumentumhoz. Ez a használati eset feltételezi, hogy egy-az-egyhez típusú levelezés történik egy biztonságos elem (például egy magánszemély főiskolai alkalmazása) és egy olyan biztonsági mező között, amely meghatározza, hogy kinek van hozzáférése az adott elemhez (felvételi személyzet).
A felhasználók, csoportok és társítások létrehozásához bérlői rendszergazdai engedélyekkel (tulajdonos vagy rendszergazda) kell rendelkeznie.
Az alkalmazást több-bérlős alkalmazásként is regisztrálni kell az alábbi eljárásban leírtak szerint.
Alkalmazás regisztrálása az Azure Active Directoryban
Ez a lépés integrálja az alkalmazást az Azure Active Directoryval a felhasználói és csoportfiókok bejelentkezéseinek elfogadása céljából. Ha nem bérlői rendszergazda a szervezetben, előfordulhat, hogy létre kell hoznia egy új bérlőt a következő lépések végrehajtásához.
Az Azure Portalon keresse meg az Azure Active Directory-bérlőt.
A bal oldalon a Kezelés területen válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.
Adjon egy nevet a regisztrációnak, esetleg a keresőalkalmazás nevéhez hasonló nevet. Ebben a cikkben további információt talál a választható tulajdonságokról.
Válassza ki a pénztárgépet.
Az alkalmazásregisztráció létrehozása után másolja ki az alkalmazás (ügyfél) azonosítóját. Ezt a sztringet meg kell adnia az alkalmazásnak.
Ha a DotNetHowToSecurityTrimmingen lépeget, illessze be ezt az értéket az app.config fájlba.
Másolja ki a címtár (bérlő) azonosítóját.
A bal oldalon válassza az API-engedélyeket , majd az Engedély hozzáadása lehetőséget.
Válassza a Microsoft Graphot , majd válassza a Delegált engedélyek lehetőséget.
Keresse meg, majd adja hozzá a következő delegált engedélyeket:
- Directory.ReadWrite.All
- Group.ReadWrite.All
- User.ReadWrite.All
A Microsoft Graph olyan API-t biztosít, amely rest API-n keresztül teszi lehetővé az Azure Active Directory programozott elérését. Az útmutató kódmintája az engedélyekkel hívja meg a Microsoft Graph API-t csoportok, felhasználók és társítások létrehozásához. Az API-k a csoportazonosítók gyorsítótárazására is használhatók a gyorsabb szűrés érdekében.
Válassza a rendszergazdai hozzájárulás megadása a bérlő számára a hozzájárulási folyamat befejezéséhez.
Felhasználók és csoportok létrehozása
Ha egy már létrehozott alkalmazáshoz ad hozzá keresést, előfordulhat, hogy meglévő felhasználói és csoportazonosítók vannak az Azure Active Directoryban. Ebben az esetben kihagyhatja a következő három lépést.
Ha azonban nincsenek meglévő felhasználói, a Microsoft Graph API-kkal létrehozhatja a biztonsági tagokat. Az alábbi kódrészletek bemutatják, hogyan hozhat létre azonosítókat, amelyek adatértékekké válnak az Azure AI Search-index biztonsági mezőjéhez. A hipotetikus főiskolai felvételi kérelemben ez lenne a felvételi személyzet biztonsági azonosítója.
A felhasználói és csoporttagság nagyon nedves lehet, különösen a nagy szervezetekben. A felhasználói és csoportidentitásokat fejlesztő kódnak elég gyakran kell futnia ahhoz, hogy átvegye a szervezeti tagság változásait. Hasonlóképpen, az Azure AI Search-indexhez hasonló frissítési ütemezésre van szükség az engedélyezett felhasználók és erőforrások aktuális állapotának megfelelően.
1. lépés: Csoport létrehozása
private static Dictionary<Group, List<User>> CreateGroupsWithUsers(string tenant)
{
Group group = new Group()
{
DisplayName = "My First Prog Group",
SecurityEnabled = true,
MailEnabled = false,
MailNickname = "group1"
};
2. lépés: Felhasználó létrehozása
User user1 = new User()
{
GivenName = "First User",
Surname = "User1",
MailNickname = "User1",
DisplayName = "First User",
UserPrincipalName = String.Format("user1@{0}", tenant),
PasswordProfile = new PasswordProfile() { Password = "********" },
AccountEnabled = true
};
3. lépés: Felhasználó és csoport társítása
List<User> users = new List<User>() { user1, user2 };
Dictionary<Group, List<User>> groups = new Dictionary<Group, List<User>>() { { group, users } };
4. lépés: A csoportok azonosítóinak gyorsítótárazása
A hálózati késés csökkentése érdekében gyorsítótárazhatja a felhasználói csoportok társításait, hogy keresési kérések kibocsátásakor a rendszer visszaadja a csoportokat a gyorsítótárból, és mentsen egy kerekítést. A Batch API használatával egyetlen Http-kérést küldhet több felhasználóval, és létrehozhatja a gyorsítótárat.
A Microsoft Graph úgy lett kialakítva, hogy nagy mennyiségű kérelmet is kezelni tudjon. Ha túl sok kérés történik, a Microsoft Graph a 429-es HTTP-állapotkóddal meghiúsul. További információ: Microsoft Graph-szabályozás.
Dokumentum indexelése a megengedett csoportokkal
Az Azure AI Search lekérdezési műveletei egy Azure AI Search-indexen keresztül lesznek végrehajtva. Ebben a lépésben egy indexelési művelet a kereshető adatokat importálja egy indexbe, beleértve a biztonsági szűrőkként használt azonosítókat is.
Az Azure AI Search nem hitelesíti a felhasználói identitásokat, és nem biztosít logikát annak megállapításához, hogy a felhasználó mely tartalmakat tekintheti meg. A biztonsági mentés használati esete feltételezi, hogy egy bizalmas dokumentum és a dokumentumhoz hozzáféréssel rendelkező csoportazonosító közötti társítást adja meg, amelyet érintetlenül importál egy keresési indexbe.
A hipotetikus példában az Azure AI Search-indexRE vonatkozó PUT-kérés törzse tartalmazza a pályázó főiskolai esszéjét vagy átiratát, valamint azt a csoportazonosítót, amely jogosult a tartalom megtekintésére.
Az útmutató kódmintájában használt általános példában az indexművelet a következőképpen nézhet ki:
private static void IndexDocuments(string indexName, List<string> groups)
{
IndexDocumentsBatch<SecuredFiles> batch = IndexDocumentsBatch.Create(
IndexDocumentsAction.Upload(
new SecuredFiles()
{
FileId = "1",
Name = "secured_file_a",
GroupIds = new[] { groups[0] }
}),
...
};
IndexDocumentsResult result = searchClient.IndexDocuments(batch);
Keresési kérelem kiállítása
Biztonsági vágás céljából az index biztonsági mezőjének értékei statikus értékek a dokumentumok keresési eredményekbe való belefoglalásához vagy kizárásához. Ha például a Belépések csoportazonosítója "A11B22C33D44-E55F66G77-H88I99JKK", akkor az Azure AI Search-index azon dokumentumai, amelyeknél az azonosító szerepel a biztonsági mezőben, (vagy kizárva) szerepelnek a hívónak küldött keresési eredményekben.
Ha a kérést kibocsátó felhasználó csoportjai alapján szeretné szűrni a keresési eredményekben visszaadott dokumentumokat, tekintse át az alábbi lépéseket.
1. lépés: A felhasználó csoportazonosítóinak lekérése
Ha a felhasználó csoportjai még nem lettek gyorsítótárazva, vagy a gyorsítótár lejárt, adja ki a csoportok kérését.
private static async void RefreshCache(IEnumerable<User> users)
{
HttpClient client = new HttpClient();
var userGroups = await _microsoftGraphHelper.GetGroupsForUsers(client, users);
_groupsCache = new ConcurrentDictionary<string, List<string>>(userGroups);
}
2. lépés: A keresési kérelem összeállítása
Feltéve, hogy rendelkezik a felhasználó csoporttagságával, kiadhatja a keresési kérelmet a megfelelő szűrőértékekkel.
private static void SearchQueryWithFilter(string user)
{
// Using the filter below, the search result will contain all documents that their GroupIds field
// contain any one of the Ids in the groups list
string filter = String.Format("groupIds/any(p:search.in(p, '{0}'))", string.Join(",", String.Join(",", _groupsCache[user])));
SearchOptions searchOptions =
new SearchOptions()
{
Filter = filter
};
searchOptions.Select.Add("name");
SearchResults<SecuredFiles> results = searchClient.Search<SecuredFiles>("*", searchOptions);
Console.WriteLine("Results for groups '{0}' : {1}", _groupsCache[user], results.GetResults().Select(r => r.Document.Name));
}
3. lépés: Az eredmények kezelése
A válasz tartalmaz egy szűrt dokumentumlistát, amely a felhasználó által megtekintésre jogosult dokumentumokból áll. A keresési eredmények oldalának felépítésétől függően előfordulhat, hogy a szűrt eredményhalmazt tükröző vizuális jeleket is fel szeretne venni.
Legfontosabb ismeretek
Ebben az útmutatóban megtanult egy mintát, amely alapján felhasználói bejelentkezésekkel szűrheti a dokumentumokat az Azure AI Search-eredményekben, és levágta a kérésben megadott szűrővel nem egyező dokumentumok eredményeit.