Biztonsági szűrők az Azure AI Search eredményeinek az Azure 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 ismerteti:

  • Csoportok és felhasználók létrehozása
  • A felhasználó társítása a létrehozott csoporttal
  • Gyorsítótárazd az új csoportokat
  • 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 Ön nem bérlői rendszergazdaként van jelen a szervezetben, akkor előfordulhat, hogy az alábbi lépések végrehajtásához létre kell hoznia egy új bérlőt.

  1. Az Azure portálon keresse meg az Azure Active Directory-bérlőt.

  2. A bal oldalon, a Kezelésterületen válassza az Alkalmazásregisztrációklehetőséget, majd válassza Új regisztrációslehetőséget.

  3. Adjon egy nevet a regisztrációnak, esetleg a keresőalkalmazás nevéhez hasonló nevet. Lásd ehhez a cikkhez további választható tulajdonságokról.

  4. Válassza a Regisztráláslehetőséget.

  5. Az alkalmazásregisztráció létrehozása után másolja ki az alkalmazás (ügyfél) azonosítóját. Ezt a karakterláncot meg kell adnia az alkalmazásának.

    Ha a DotNetHowToSecurityTrimmingen lépeget, illessze be ezt az értéket a app.config fájlba.

  6. Másolja ki a címtár (bérlő) azonosítóját.

  7. A bal oldalon válassza API-engedélyeket, majd válassza az Engedély hozzáadásalehetőséget.

  8. Válassza Microsoft Graph, majd válassza Delegált engedélyeklehetőséget.

  9. Keresse meg, majd adja hozzá a következő delegált engedélyeket:

    • Directory.ReadWrite.All
    • Group.ReadWrite.All
    • User.ReadWrite.All jogosultság

    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.

  10. Válassza a(z) lehetőséget, hogy rendszergazdai hozzájárulást adjon 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 biztonsági főelveket a Microsoft Graph API-k segítségével hozhatja létre. 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 változékony 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ói 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

Esetlegesen, 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 amikor keresési kérések történnek, a rendszer a csoportokat a gyorsítótárból adja vissza, ezzel minimalizálva az oda-vissza utat. Az 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 célja, hogy nagy mennyiségű kérést kezeljen. 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ókért lásd: Microsoft Graph korlátozása.

Dokumentum indexelése a kijelölt csoportjaik alapján

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 vágás használati esete azt feltételezi, hogy megadja a bizalmas dokumentum és a hozzáféréssel rendelkező csoportazonosító közötti társítást, amelyet érintetlenül importálnak a 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 csoportokat kérést.

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.

Összefoglalás

Ebben az útmutatóban megtanult egy módszert, amellyel felhasználói bejelentkezésekkel szűrheti ki a dokumentumokat az Azure AI Search találatai között, és leszűkítette azokat a dokumentumokat, amelyek nem felelnek meg a kérésben megadott szűrőnek.