Python için sohbet belgesi güvenliğini kullanmaya başlama

Kendi verilerinizle Alma Artırılmış Oluşturma (RAG) desenini kullanarak bir sohbet uygulaması oluşturduğunuzda, her kullanıcının izinlerine göre bir yanıt aldığından emin olun. Sohbet uygulamanıza belge erişim denetimi eklemek için bu makaledeki işlemi izleyin.

  • Yetkili kullanıcı: Bu kişinin sohbet uygulamasının belgelerinde yer alan yanıtlara erişimi olmalıdır.

    Gerekli kimlik doğrulaması erişimine sahip bir yanıt içeren sohbet uygulamasını gösteren ekran görüntüsü.

  • Yetkisiz kullanıcı: Bu kişinin, görme yetkisi olmayan güvenli belgelerden gelen yanıtlara erişimi olmamalıdır.

    Kullanıcının verilere erişimi olmadığını belirten bir yanıt içeren sohbet uygulamasını gösteren ekran görüntüsü.

Uyarı

Bu makalede, makaledeki örnekler ve kılavuzlar için temel olarak bir veya daha fazla yapay zeka uygulaması şablonu kullanılır. Yapay zeka uygulama şablonları, dağıtımı kolay ve iyi bakımlı referans uygulamaları sağlar. Yapay zeka uygulamalarınız için yüksek kaliteli bir başlangıç noktası sağlamaya yardımcı olur.

Mimariye genel bakış

Belge güvenliği özelliği olmadan kurumsal sohbet uygulaması, Microsoft Foundry'de Azure Yapay Zeka Arama ve Azure OpenAI Modellerini kullanarak basit bir mimariye sahiptir. Belgelerin depolandığı Azure Yapay Zeka Arama sorgularından bir yanıt, Azure OpenAI GPT modelinden alınan yanıtla birlikte belirlenir. Bu basit akışta kullanıcı kimlik doğrulaması kullanılmaz.

Azure Yapay Zeka Arama'in depolanan belgelerden nasıl yanıt bulduğunu ve bunları Azure OpenAI'den gelen bir yanıtla nasıl birleştirdiğini gösteren mimari diyagram.

Belgelere güvenlik eklemek için kurumsal sohbet uygulamasını güncelleştirmeniz gerekir:

  • Microsoft Entra ile sohbet uygulamasına istemci kimlik doğrulaması ekleyin.
  • Arama dizinini kullanıcı ve grup erişimiyle doldurmak için sunucu tarafı mantığı ekleyin.

Kullanıcının Microsoft Entra Id ile kimlik doğrulamasını ve ardından bu kimlik doğrulamasını Azure Yapay Zeka Arama'e geçirmesini gösteren mimari diyagram.

Azure Yapay Zeka Arama yerel belge düzeyi izinleri sağlamaz ve kullanıcı izinlerine göre bir dizinin içinden arama sonuçlarını değiştiremez. Bunun yerine, uygulamanız bir belgenin belirli bir kullanıcı veya belirli bir grup tarafından erişilebilir olmasını sağlamak için arama filtrelerini kullanabilir. Arama dizininizde, her belgenin kullanıcı veya grup kimliği bilgilerini depolayan filtrelenebilir bir alanı olmalıdır.

Azure Yapay Zeka Arama'teki her belgenin arama sonuçlarında görünen kullanıcı kimlik doğrulamasına sahip olduğunu gösteren mimari diyagram.

Yetkilendirme Azure Yapay Zeka Arama'te yerel olarak bulunmadığından, kullanıcı veya grup bilgilerini barındırmak için bir alan eklemeniz ve ardından eşleşmeyen belgeleri filtrelemeniz gerekir. Bu tekniği uygulamak için şunları yapmanız gerekir:

  • Dizininizde, belge erişimi olan kullanıcıların veya grupların ayrıntılarını depolamak için ayrılmış bir belge erişim denetimi alanı oluşturun.
  • Belgenin erişim denetimi alanını ilgili kullanıcı veya grup ayrıntılarıyla doldurun.
  • Kullanıcı veya grup erişim izinlerinde değişiklik olduğunda bu erişim denetimi alanını güncelleştirin.

Dizin güncelleştirmeleriniz bir dizin oluşturucuyla zamanlanmışsa, değişiklikler sonraki dizin oluşturucu çalışmasında alınır. Dizin oluşturucu kullanmıyorsanız el ile yeniden dizin oluşturmanız gerekir.

Bu makalede, Azure Yapay Zeka Arama'teki belgelerin güvenliğini sağlama işlemi, arama yöneticisi olarak çalıştıracağınız örnek betiklerle mümkün hale getiriliyor. Betikler tek bir belgeyi tek bir kullanıcı kimliğiyle ilişkilendirir. Bu betikleri alabilir ve gereksinimlerinize göre ölçeklendirmek için kendi güvenlik ve üretim gereksinimlerinizi uygulayabilirsiniz.

Güvenlik yapılandırmasını belirleme

Çözüm, bu örnekte belge güvenliği için gerekli olan özellikleri açmak için Boole ortam değişkenleri sağlar.

Parametre Amaç
AZURE_USE_AUTHENTICATION olarak trueayarlandığında, kullanıcının sohbet uygulamasında oturum açmasını ve Azure App Service kimlik doğrulamasını etkinleştirir. Sohbet uygulaması Use oid security filter etkinleştirir.
AZURE_ENFORCE_ACCESS_CONTROL olarak trueayarlandığında, herhangi bir belge erişimi için kimlik doğrulaması gerektirir. Kullanıcı arabiriminden devre dışı bırakılmaması için nesne kimliği (OID) ve grup güvenliği için Geliştirici ayarları açılır ve devre dışı bırakılır.
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS olarak ayarlandığında true, bu ayar kimliği doğrulanmış kullanıcıların erişim denetimi gerektiğinde bile erişim denetimi atanmamış belgelerde arama yapmasına olanak tanır. Bu parametre yalnızca etkinleştirildiğinde AZURE_ENFORCE_ACCESS_CONTROL kullanılmalıdır.
AZURE_ENABLE_UNAUTHENTICATED_ACCESS olarak ayarlandığında true, bu ayar kimliği doğrulanmamış kullanıcıların erişim denetimi uygulandığında bile uygulamayı kullanmasına izin verir. Bu parametre yalnızca etkinleştirildiğinde AZURE_ENFORCE_ACCESS_CONTROL kullanılmalıdır.

Bu örnekte desteklenen güvenlik profillerini anlamak için aşağıdaki bölümleri kullanın. Bu makalede Kurumsal profil yapılandırılır.

Kurumsal: Gerekli hesap + belge filtresi

Sitenin her kullanıcısı oturum açmalıdır . Site, tüm kullanıcılar için ortak olan içerik içerir. Belge düzeyi güvenlik filtresi tüm isteklere uygulanır.

Ortam değişkenleri:

  • AZURE_USE_AUTHENTICATION=true
  • AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
  • AZURE_ENFORCE_ACCESS_CONTROL=true

Karma kullanım: İsteğe bağlı hesap + belge filtresi

Sitenin her kullanıcısı oturum açabilir . Site, tüm kullanıcılar için ortak olan içerik içerir. Belge düzeyi güvenlik filtresi tüm isteklere uygulanır.

Ortam değişkenleri:

  • AZURE_USE_AUTHENTICATION=true
  • AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
  • AZURE_ENFORCE_ACCESS_CONTROL=true
  • AZURE_ENABLE_UNAUTHENTICATED_ACCESS=true

Önkoşullar

Bu makaleyi tamamlamak için gereken tüm bağımlılıklarla birlikte bir geliştirme kapsayıcısı ortamı sağlanır. Geliştirme kapsayıcısını GitHub Codespaces'ta (tarayıcıda) veya Visual Studio Code kullanarak yerel olarak çalıştırabilirsiniz.

Bu makaleyi kullanmak için aşağıdaki önkoşullara ihtiyacınız vardır:

Tercih ettiğiniz geliştirme ortamına bağlı olarak daha fazla önkoşula ihtiyacınız vardır.

Geliştirme ortamı açma

Bu makaleyi tamamlamak için gerekli tüm bağımlılıkları içeren önceden yapılandırılmış bir geliştirme ortamı dağıtmak için aşağıdaki yönergeleri kullanın.

GitHub Codespaces, Web için Visual Studio Code'u kullanıcı arabirimi olarak kullanarak GitHub tarafından yönetilen bir geliştirme kapsayıcısını çalıştırır. En basit geliştirme ortamı için GitHub Codespaces'ı kullanarak bu makaleyi tamamlamak için doğru geliştirici araçlarını ve bağımlılıklarını önceden yüklemiş olursunuz.

Önemli

Tüm GitHub hesapları, iki çekirdek örneğiyle her ay 60 saate kadar ücretsiz gitHub Codespaces kullanabilir. Daha fazla bilgi için bkz. GitHub Codespaces aylık olarak dahil edilen depolama ve çekirdek çalışma saatleri.

  1. main GitHub deposunun dalında yeni bir GitHub kod alanı oluşturma işlemini başlatın.

  2. Aşağıdaki düğmeye sağ tıklayın ve Bağlantıyı yeni pencerede aç seçeneğini seçerek geliştirme ortamı ve belgelerin aynı anda kullanılabilir olmasını sağlayın.

    GitHub Codespaces'ta aç.

  3. Codespace oluştur sayfasında codespace yapılandırma ayarlarını gözden geçirin, ardından Yeni kod alanı oluştur'u seçin.

    Yeni bir kod alanı oluşturmadan önce onay ekranını gösteren ekran görüntüsü.

  4. Kod alanının başlamasını bekleyin. Bu başlatma işlemi birkaç dakika sürebilir.

  5. Ekranın alt kısmındaki terminalde Azure Geliştirici CLI'sı ile Azure'da oturum açın.

    azd auth login
    
  6. Kimlik doğrulama işlemini tamamlayın.

  7. Bu makalede kalan görevler, bu geliştirme konteyneri bağlamında gerçekleşir.

Azure CLI ile gerekli bilgileri alma

Aşağıdaki Azure CLI komutuyla abonelik kimliğinizi ve kiracı kimliğinizi alın. Değerini, değeriniz AZURE_TENANT_ID olarak kullanmak üzere kopyalayın.

az account list --query "[].{subscription_id:id, name:name, tenantId:tenantId}" -o table

Kiracınızın koşullu erişim ilkesiyle ilgili bir hata alırsanız, koşullu erişim ilkesi olmayan ikinci bir kiracıya ihtiyacınız vardır.

  • Kullanıcı hesabınızla ilişkili ilk kiracı hesabınız, için ortam değişkeni AZURE_TENANT_ID kullanılır.
  • Koşullu erişim olmadan, ikinci kiracınız, ortam değişkeninin Microsoft Graph'a erişmesi için kullanılır. Koşullu erişim ilkesi olan kiracılar için, koşullu erişim ilkesi olmayan ikinci bir kiracının kimliğini bulun veya yeni bir kiracı oluşturun.

Ortam değişkenlerini belirleme

  1. Uygulamayı Kurumsal profil için yapılandırmak için aşağıdaki komutları çalıştırın.

    azd env set AZURE_USE_AUTHENTICATION true
    azd env set AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS true
    azd env set AZURE_ENFORCE_ACCESS_CONTROL true
    
  2. Kiracıyı ayarlamak için aşağıdaki komutu çalıştırın. Bu komut, kullanıcının barındırılan uygulama ortamında oturum açmasına izin verdi. <YOUR_TENANT_ID> ifadesini kiracı kimliğiyle değiştirin.

    azd env set AZURE_TENANT_ID <YOUR_TENANT_ID>
    

Uyarı

Kullanıcı kiracınızda koşullu erişim ilkeniz varsa , bir kimlik doğrulama kiracısı belirtmeniz gerekir.

Sohbet uygulamasını Azure'a dağıtma

Dağıtım aşağıdaki adımlardan oluşur:

  • Azure kaynaklarını oluşturun.
  • Belgeleri karşıya yükleyin.
  • Microsoft Entra kimlik uygulamalarını (istemci ve sunucu) oluşturun.
  • Barındırma kaynağı için kimlik doğrulamayı etkinleştirin.
  1. Azure kaynaklarını sağlayın ve kaynak kodunu dağıtın.

    azd up
    
  2. Aşağıdaki tabloyu kullanarak AZD dağıtım sorgularını yanıtlayın.

    Uyarı Cevap
    Ortam adı Takma adınız ve uygulamanız gibi tanımlayıcı bilgilerle kısa bir ad kullanın. Ve örnek: tjones-secure-chat.
    Abonelik Kaynakların oluşturulacağı aboneliği seçin.
    Azure kaynaklarının konumu Size yakın bir konum seçin.
    Konum: documentIntelligentResourceGroupLocation Size yakın bir konum seçin.
    Konum: openAIResourceGroupLocation Size yakın bir konum seçin.

    Uygulamanın başlatılmasına izin vermek için uygulama dağıtıldıktan sonra 5 veya 10 dakika bekleyin.

  3. Uygulama başarıyla dağıtıldıktan sonra terminalde bir URL görüntülenir.

  4. Sohbet uygulamasını tarayıcıda açmak için etiketli (✓) Done: Deploying service webapp URL'yi seçin.

    Bir tarayıcıdaki sohbet uygulamasının ekran görüntüsü; sohbet önerileri ve sohbet metin kutusu.

  5. Uygulamanın kimlik doğrulama açılır penceresini kabul edin.

  6. Sohbet uygulaması görüntülendiğinde, sağ üst köşedeki kullanıcınızın oturum açtığına dikkat edin.

  7. Geliştirici ayarlarını açın ve değişiklik için aşağıdaki seçeneklerin ikisinin de seçili ve devre dışı olduğuna dikkat edin:

    • Oid güvenlik filtresi kullanma
    • Grup güvenlik filtrelerini kullanma
  8. Ürün yöneticisi ne yapar? kartını seçin.

  9. Şunun gibi bir yanıt alırsınız: Sağlanan kaynaklar Contoso Electronics'te Bir Ürün Yöneticisi'nin rolü hakkında belirli bilgiler içermiyor.

    Tarayıcıda yanıtın döndürülemadığını gösteren sohbet uygulamasını gösteren ekran görüntüsü.

Kullanıcı için belgeye erişimi açma

Yanıtı alabilmek için tam belge için izinlerinizi açın. Birkaç bilgiye ihtiyacınız vardır:

  • Azure Depolama
    • Hesap adı
    • Konteyner adı
    • Blob/belge URL'si için role_library.pdf
  • Microsoft Entra Id'de kullanıcı kimliği

Bu bilgiler bilindiğinde, belge için Azure Yapay Zeka Arama dizin oids alanını güncelleştirin role_library.pdf .

Depolamadaki bir belgenin URL'sini alma

  1. .azure Projenin kökündeki klasörde ortam dizinini bulun ve dosyayı bu dizinle açın.env.

  2. Girdiyi AZURE_STORAGE_ACCOUNT arayın ve değerini kopyalayın.

  3. Kapsayıcıdaki blobun URL'sini role_library.pdfcontent almak için aşağıdaki Azure CLI komutlarını kullanın.

    az storage blob url \
        --account-name <REPLACE_WITH_AZURE_STORAGE_ACCOUNT \
        --container-name 'content' \
        --name 'role_library.pdf' 
    
    Parametre Amaç
    --account-name Azure Depolama hesabı adı.
    --container-name Bu örnekteki kapsayıcı adı şeklindedir content.
    --ad Bu adımda blob adı şeklindedir role_library.pdf.
  4. Blob URL'sini daha sonra kullanmak üzere kopyalayın.

Kullanıcı kimliğinizi alma

  1. Sohbet uygulamasında Geliştirici ayarları'nı seçin.
  2. Kimlik Belirteci talepleri bölümünde parametrenizi objectidentifier kopyalayın. Bu parametre sonraki bölümde olarak USER_OBJECT_IDbilinir.
  1. Azure Yapay Zeka Arama'teki oids alanını role_library.pdf için, erişiminiz olacak şekilde değiştirmek üzere aşağıdaki betiği kullanın.

    python ./scripts/manageacl.py --acl-type oids --acl-action add --acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
    
    Parametre Amaç
    -v Ayrıntılı çıkış.
    --acl-type Grup veya kullanıcı OID'leri: oids.
    --acl-action Arama dizini alanına ekleyin. Diğer seçenekler arasında enable_acls, remove, remove_allve viewbulunur.
    --Acl Grup veya kullanıcı USER_OBJECT_ID.
    --URL Dosyanın Azure Depolama'daki konumu, örneğin https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf. CLI komutunda URL'yi tırnak işaretleri ile çevrelemeyin.
  2. Bu komutun konsol çıkışı şöyle görünür:

    Loading azd .env file from current environment...
    Creating Python virtual environment "app/backend/.venv"...
    Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)...
    Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action add --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf
    Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf
    Adding acl 00000000-0000-0000-0000-000000000000 to 58 search documents
    
  3. İsteğe bağlı olarak, Azure Yapay Zeka Arama'te dosya için izninizin listelendiğini doğrulamak için aşağıdaki komutu kullanın.

    python ./scripts/manageacl.py -v --acl-type groups --acl-action view --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
    
    Parametre Amaç
    -v Ayrıntılı çıkış.
    --acl-type Grup veya kullanıcı OID'leri: oids.
    --acl-action Arama dizini alanını oidsgörüntüleyin. Diğer seçenekler arasında enable_acls, remove, remove_allve addbulunur.
    --URL Dosyanın bulunduğu konumun gösterildiği yer, örneğin https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf. CLI komutunda URL'yi tırnak işaretleri ile çevrelemeyin.
  4. Bu komutun konsol çıkışı şöyle görünür:

    Loading azd .env file from current environment...
    Creating Python virtual environment "app/backend/.venv"...
    Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)...
    Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action view --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf
    Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf
    [00000000-0000-0000-0000-000000000000]
    

    Çıktının sonundaki dizi parametrenizi USER_OBJECT_ID içerir ve belgenin Azure OpenAI ile yanıtta kullanılıp kullanılmadığını belirlemek için kullanılır.

Azure Yapay Zeka Arama'in USER_OBJECT_ID içerdiğini doğrulayın

  1. Azure portalını açın ve için AI Searcharama yapın.

  2. Listeden arama kaynağınızı seçin.

  3. Arama yönetimi>Dizinlerini seçin.

  4. gptkbindex'i seçin.

  5. JSON görünümünü> seçin.

  6. JSON değerini aşağıdaki JSON ile değiştirin:

    {
      "search": "*",
      "select": "sourcefile, oids",
      "filter": "oids/any()"
    }
    

    Bu JSON, oids alanının herhangi bir değere sahip olduğu tüm belgeleri arar ve sourcefile ve oids alanlarını döndürür.

  7. role_library.pdf OID'niz yoksa Azure Search'te bir belgeye kullanıcı erişimi sağlama bölümüne dönün ve adımları tamamlayın.

Belgeye kullanıcı erişimini doğrulama

Adımları tamamladıysanız ancak doğru yanıtı görmediyseniz, USER_OBJECT_ID için Azure Yapay Zeka Arama'te role_library.pdf parametrenizin doğru şekilde ayarlandığını doğrulayın.

  1. Sohbet uygulamasına dönün. Yeniden oturum açmanız gerekebilir.

  2. İçeriğin Azure OpenAI yanıtında kullanılması için role_library aynı sorguyu girin: What does a product manager do?.

  3. Şimdi rol kitaplığı belgesinden uygun yanıtı içeren sonucu görüntüleyin.

    Tarayıcıda yanıtın döndürüldüğünü gösteren sohbet uygulamasını gösteren ekran görüntüsü.

Kaynakları temizle

Aşağıdaki adımlar, kullandığınız kaynakları temizleme işleminde size yol gösterir.

Azure kaynaklarını temizleme

Bu makalede oluşturulan Azure kaynakları Azure aboneliğinize faturalandırılır. Gelecekte bu kaynaklara ihtiyaç duymayı beklemiyorsanız, daha fazla ücret ödememek için bunları silin.

Azure kaynaklarını silmek ve kaynak kodu kaldırmak için aşağıdaki Azure Geliştirici CLI komutunu çalıştırın.

azd down --purge

GitHub Codespaces ve Visual Studio Code'ı temizleme

Aşağıdaki adımlar, kullandığınız kaynakları temizleme işleminde size yol gösterir.

GitHub Codespaces ortamını silmek, hesabınız için elde ettiğiniz ücretsiz çekirdek başına saat yetkilendirmesi miktarını en üst düzeye çıkarmanızı sağlar.

Önemli

GitHub hesabınızın hakları hakkında daha fazla bilgi için GitHub Codespaces aylık dahil edilen depolama ve çekirdek saatler'e bakın.

  1. GitHub Codespaces kontrol panelinegiriş yapın.

  2. Azure-Samples/azure-search-openai-demo GitHub deposundan alınan şu anda çalışan kod alanlarınızı bulun.

    Durumu ve şablonları da dahil olmak üzere çalışan tüm kod boşluklarını gösteren ekran görüntüsü.

  3. Codespace bağlam menüsünü açın ve sil'i seçin.

    Sil seçeneğinin vurgulandığı tek bir kod alanının bağlam menüsünü gösteren ekran görüntüsü.

Yardım alın

Örnek depo sorun giderme bilgileri sunar.

Sorun giderme

Bu bölüm, bu makaleye özgü sorunları gidermenize yardımcı olur.

Kimlik doğrulama ortamı sağlama

Kimlik doğrulamanız barındırma uygulamanızdan ayrı bir kiracıda olduğunda, aşağıdaki işlemle bu kimlik doğrulama kiracısını ayarlamanız gerekir.

  1. Verilen komutu yürütarak örnek uygulamayı kimlik doğrulama amacıyla ikinci bir kiracı kullanacak şekilde yapılandırın.

    azd env set AZURE_AUTH_TENANT_ID <REPLACE-WITH-YOUR-TENANT-ID>
    
    Parametre Amaç
    AZURE_AUTH_TENANT_ID Eğer AZURE_AUTH_TENANT_ID ayarlanmışsa, uygulamayı barındıran kiracı budur.
  2. Çözümü aşağıdaki komutla yeniden dağıtın:

    azd up