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


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.

  1. Az Azure Portalon keresse meg az Azure Active Directory-bérlőt.

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

  3. 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.

  4. Válassza ki a pénztárgépet.

  5. 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.

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

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

  8. Válassza a Microsoft Graphot , majd válassza a Delegált engedélyek lehetőséget.

  9. 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.

  10. 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.