Konfigurace klíčů spravovaných zákazníkem pro šifrování dat ve službě Azure AI Search

Azure AI Search automaticky šifruje neaktivní uložená data pomocí klíčů spravovaných službou. Pokud potřebujete další ochranu, můžete doplnit výchozí šifrování jinou vrstvou šifrování pomocí klíčů, které vytvoříte a spravujete ve službě Azure Key Vault.

Tento článek vás provede postupem nastavení klíče spravovaného zákazníkem (CMK) nebo "přineste si vlastní klíč" (BYOK). Tady je několik bodů, které je potřeba mít na paměti:

  • Šifrování CMK se provádí u jednotlivých objektů. Pokud potřebujete klíč CMK ve vyhledávací službě, nastavte zásadu vynucení.

  • Šifrování CMK závisí na službě Azure Key Vault. Můžete vytvořit vlastní šifrovací klíče a uložit je do trezoru klíčů, nebo můžete k vygenerování šifrovacích klíčů použít rozhraní API služby Azure Key Vault. Azure Key Vault musí být ve stejném předplatném a tenantovi jako Azure AI Search. Azure AI Search načte spravovaný klíč připojením prostřednictvím systémové nebo uživatelem spravované identity. Toto chování vyžaduje, aby obě služby sdílely stejného tenanta.

  • Šifrování CMK se stane funkčním při vytváření objektu. Objekty, které už existují, není možné šifrovat. K šifrování CMK dochází při každém uložení objektu na disk, a to buď neaktivní uložená data pro dlouhodobé ukládání, nebo dočasná data pro krátkodobé úložiště. S CMK disk nikdy neuvidí nešifrovaná data.

Poznámka:

Pokud je index zašifrovaný, je přístupný pouze v případě, že má vyhledávací služba přístup ke klíči. Pokud je přístup odvolán, index je nepoužitelný a služba se nedá škálovat, dokud se index neodstraní nebo se neobnoví přístup ke klíči.

Šifrované objekty CMK

Mezi objekty, které je možné zašifrovat, patří indexy, seznamy synonym, indexery, zdroje dat a sady dovedností. Šifrování je výpočetně nákladné k dešifrování, takže se šifruje jenom citlivý obsah.

Šifrování se provádí přes následující obsah:

  • Veškerý obsah v indexech a seznamech synonym, včetně popisů.

  • U indexerů, zdrojů dat a sad dovedností se šifrují jenom pole, která ukládají připojovací řetězec, popisy, klíče a uživatelské vstupy. Sady dovedností mají například klíče služeb Azure AI a některé dovednosti přijímají vstupy uživatelů, jako jsou vlastní entity. V obou případech se klíče a vstupy uživatelů do dovedností šifrují.

Úplné dvojité šifrování

Když zavádíte šifrování CMK, šifrujete obsah dvakrát. U objektů a polí uvedených v předchozí části se obsah nejprve zašifruje pomocí klíče spravovaného Microsoftem. Obsah se na datových discích pro dlouhodobé úložiště a na dočasných discích používaných pro krátkodobé úložiště šifruje obsah.

Povolení šifrování CMK zvyšuje velikost indexu a snižuje výkon dotazů. Na základě pozorování k datu můžete očekávat zvýšení o 30 až 60 procent v časech dotazů, i když skutečný výkon se liší v závislosti na definici indexu a typech dotazů. Vzhledem k tomu, že se snižuje výkon, doporučujeme tuto funkci povolit pouze u indexů, které ji skutečně vyžadují.

I když je teď ve všech oblastech k dispozici dvojité šifrování, podpora byla nasazena ve dvou fázích:

  • První zavedení bylo 1. srpna 2020 a zahrnovalo pět níže uvedených oblastí. Search vytvořené v následujících oblastech podporují cmk pro datové disky, ale ne dočasné disky:

    • Západní USA 2
    • USA – východ
    • Středojižní USA
    • US Gov – Virginie
    • US Gov – Arizona
  • Druhé zavedení 13. května 2021 přidalo šifrování dočasných disků a rozšířené šifrování CMK do všech podporovaných oblastí.

    Pokud používáte CMK ze služby vytvořené během prvního uvedení a chcete také šifrování CMK přes dočasné disky, musíte ve zvolené oblasti vytvořit novou vyhledávací službu a znovu nasadit obsah.

Požadavky

V tomto scénáři se používají následující nástroje a služby.

Měli byste mít klienta vyhledávání, který může vytvořit šifrovaný objekt. Do tohoto kódu odkazujete na klíč trezoru klíčů a informace o registraci aplikace. Tento kód může být funkční aplikace nebo prototypový kód, například ukázkový kód C#DotNetHowToEncryptionUsingCMK.

Tip

Pomocí klienta REST nebo Azure PowerShellu můžete vytvářet indexy a mapy synonym, které obsahují parametr šifrovacího klíče. Můžete také použít sady Azure SDK. Podpora portálu pro přidání klíče do indexů nebo map synonym se nepodporuje.

Tipy ke službě Key Vault

Pokud s Azure Key Vaultem začínáte, projděte si tento rychlý start a seznamte se se základními úlohami: Nastavte a načtěte tajný kód ze služby Azure Key Vault pomocí PowerShellu. Tady je několik tipů pro používání služby Key Vault:

  • Používejte tolik trezorů klíčů, kolik potřebujete. Spravované klíče můžou být v různých trezorech klíčů. Vyhledávací služba může mít více šifrovaných objektů, z nichž každý je šifrovaný pomocí jiného šifrovacího klíče spravovaného zákazníkem, který je uložený v různých trezorech klíčů.

  • Povolte protokolování ve službě Key Vault, abyste mohli monitorovat využití klíčů.

  • Nezapomeňte dodržovat přísné postupy během rutinního obměny klíčů trezoru klíčů a tajných kódů aplikací služby Active Directory a registrace. Před odstraněním starých tajných kódů vždy aktualizujte veškerý šifrovaný obsah tak, aby používal nové tajné kódy a klíče. Pokud tento krok vynecháte, obsah se nedá dešifrovat.

1 . Povolení ochrany před vyprázdněním

V prvním kroku se ujistěte, že je v trezoru klíčů povolená ochrana proti obnovitelnému odstranění a vymazání . Vzhledem k povaze šifrování pomocí klíčů spravovaných zákazníkem nikdo nemůže načíst vaše data, pokud se klíč služby Azure Key Vault odstraní.

Aby se zabránilo ztrátě dat způsobeným náhodným odstraněním klíčů služby Key Vault, musí být v trezoru klíčů povolená ochrana proti obnovitelnému odstranění a vymazání. Obnovitelné odstranění je ve výchozím nastavení povolené, takže narazíte na problémy jenom v případě, že jste ho záměrně zakázali. Ochrana před vymazáním není ve výchozím nastavení povolená, ale vyžaduje se pro šifrování klíčů spravovaných zákazníkem ve službě Azure AI Search.

Obě vlastnosti můžete nastavit pomocí portálu, PowerShellu nebo příkazů Azure CLI.

  1. Přihlaste se k webu Azure Portal a otevřete stránku přehledu trezoru klíčů.

  2. Na stránce Přehled v části Základy povolte ochranu obnovitelného odstranění a vyprázdnění.

2. Vytvoření klíče ve službě Key Vault

Pokud už máte klíč ve službě Azure Key Vault, který chcete použít, přeskočte generování klíčů, ale shromážděte identifikátor klíče. Tyto informace potřebujete při vytváření šifrovaného objektu.

  1. Přihlaste se k webu Azure Portal a otevřete stránku přehledu trezoru klíčů.

  2. Na levé straně vyberte Klíče a pak vyberte + Generovat/Importovat.

  3. V podokně Vytvořit klíč v seznamu Možností zvolte metodu, kterou chcete použít k vytvoření klíče. Můžete vygenerovat nový klíč, nahrát existující klíč nebo pomocí funkce Obnovit zálohu klíče vybrat.

  4. Zadejte název klíče a volitelně vyberte další vlastnosti klíče.

  5. Vyberte Vytvořit a spusťte nasazení.

  6. Vyberte klíč, vyberte aktuální verzi a poznamenejte si identifikátor klíče. Skládá se z identifikátoru URI hodnoty klíče, názvu klíče a verze klíče. K definování šifrovaného indexu ve službě Azure AI Search potřebujete identifikátor.

    Vytvoření nového klíče trezoru klíčů

3. Vytvoření objektu zabezpečení

Máte několik možností pro přístup k šifrovacímu klíči za běhu. Nejjednodušším přístupem je načíst klíč pomocí spravované identity a oprávnění vyhledávací služby. Můžete použít systémovou nebo uživatelem spravovanou identitu. Tímto způsobem můžete vynechat kroky pro registraci aplikace a tajné kódy aplikací a zjednodušuje definici šifrovacího klíče.

Alternativně můžete vytvořit a zaregistrovat aplikaci Microsoft Entra. Vyhledávací služba poskytuje ID aplikace pro požadavky.

Spravovaná identita umožňuje službě Search ověřovat se ve službě Azure Key Vault bez uložení přihlašovacích údajů (ApplicationID nebo ApplicationSecret) v kódu. Životní cyklus tohoto typu spravované identity je svázaný s životním cyklem vyhledávací služby, který může mít jenom jednu spravovanou identitu. Další informace o tom, jak spravované identity fungují, najdete v tématu Co jsou spravované identity pro prostředky Azure.

  1. Nastavte vyhledávací službu jako důvěryhodnou službu.

    Zapnutí spravované identity přiřazené systémem

Mezi podmínky, které brání přijetí tohoto přístupu, patří:

  • Nemůžete přímo udělit přístupová oprávnění vyhledávací služby trezoru klíčů (například pokud je vyhledávací služba v jiném tenantovi Microsoft Entra ID než Azure Key Vault).

  • Jedna vyhledávací služba se vyžaduje k hostování více šifrovaných indexů nebo map synonym, z nichž každý používá jiný klíč z jiného trezoru klíčů, kde každý trezor klíčů musí pro ověřování používat jinou identitu . Vzhledem k tomu, že vyhledávací služba může mít jenom jednu spravovanou identitu, požadavek na více identit vytyčí zjednodušený přístup pro váš scénář.

4. Udělení oprávnění

V tomto kroku vytvoříte zásadu přístupu ve službě Key Vault. Tato zásada poskytuje aplikaci, kterou jste zaregistrovali v Microsoft Entra ID, oprávnění k používání klíče spravovaného zákazníkem.

Přístupová oprávnění je možné kdykoli odvolat. Po odvolání se všechny indexy vyhledávací služby nebo mapa synonym, které používají tento trezor klíčů, stanou nepoužitelnými. Obnovení přístupových oprávnění trezoru klíčů později obnoví přístup k indexu a mapování synonym. Další informace najdete v tématu Zabezpečení přístupu k trezoru klíčů.

  1. Na webu Azure Portal otevřete stránku Přehled trezoru klíčů.

  2. Vyberte zásady přístupu na levé straně a výběrem + Vytvořit spusťte Průvodce vytvořením zásad přístupu.

    Vytvořte zásadu přístupu.

  3. Na stránce Oprávnění vyberte Získatoprávnění ke klíči, oprávnění k tajným klíčům a oprávnění certifikátu. Vyberte Rozbalit klíč a zabalit klíč pro kryptografické operace s klíčem **.

    Na stránce Oprávnění vyberte oprávnění.

  4. Vyberte Další.

  5. Na stránce Princip vyhledejte a vyberte objekt zabezpečení používaný vyhledávací službou pro přístup k šifrovacímu klíči. Toto bude identita vyhledávací služby spravovaná systémem nebo spravovaná uživatelem nebo registrovaná aplikace.

  6. Vyberte Další a Vytvořit.

Důležité

Šifrovaný obsah ve službě Azure AI Search je nakonfigurovaný tak, aby používal konkrétní klíč služby Azure Key Vault s konkrétní verzí. Pokud změníte klíč nebo verzi, musí se index nebo mapa synonym aktualizovat, aby ho používaly před odstraněním předchozího. Pokud to neuděláte, vykreslí index nebo mapu synonym nepoužitelné. Pokud dojde ke ztrátě klíče, nebudete moct dešifrovat obsah.

5. Šifrování obsahu

Šifrovací klíče se při vytváření objektu přidají. Pokud chcete přidat klíč spravovaný zákazníkem do indexu, mapování synonym, indexeru, zdroje dat nebo sady dovedností, použijte rozhraní REST API služby Search nebo sadu Azure SDK k vytvoření objektu s povoleným šifrováním. Portál nepovoluje vlastnosti šifrování při vytváření objektu.

  1. Voláním rozhraní API pro vytvoření zadejte vlastnost encryptionKey :

  2. Vložte konstruktor encryptionKey do definice objektu. Tato vlastnost je vlastnost první úrovně na stejné úrovni jako název a popis. Následující příklady REST ukazují umístění vlastností. Pokud používáte stejný trezor, klíč a verzi, můžete do každé definice objektu vložit stejný konstruktor encryptionKey.

    První příklad ukazuje "encryptionKey" pro vyhledávací službu, která se připojuje pomocí spravované identity:

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660"
      }
    }
    

    Druhý příklad obsahuje "accessCredentials", pokud jste zaregistrovali aplikaci v Microsoft Entra ID:

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "accessCredentials": {
          "applicationId": "00000000-0000-0000-0000-000000000000",
          "applicationSecret": "myApplicationSecret"
        }
      }
    }
    

Jakmile ve vyhledávací službě vytvoříte šifrovaný objekt, můžete ho použít stejně jako jakýkoli jiný objekt jeho typu. Šifrování je pro uživatele a vývojáře transparentní.

Poznámka:

Žádný z těchto podrobností trezoru klíčů se nepovažuje za tajný klíč a je možné ho snadno načíst tak, že na webu Azure Portal přejdete na příslušnou stránku služby Azure Key Vault.

6. Nastavení zásad

Zásady Azure pomáhají vynucovat standardy organizace a vyhodnocovat dodržování předpisů ve velkém měřítku. Azure AI Search má volitelnou integrovanou zásadu pro vynucení cmk pro celou službu.

V této části nastavíte zásadu, která definuje standard CMK pro vaši vyhledávací službu. Pak nastavíte vyhledávací službu tak, aby tuto zásadu vynucuje.

  1. Přejděte do předdefinovaných zásad ve webovém prohlížeči. Vyberte Přiřadit.

    Snímek obrazovky s přiřazením předdefinovaných zásad CMK

  2. Nastavte obor zásad. V části Parametry zrušte zaškrtnutí políčka Zobrazit pouze parametry... a nastavte Efekt na Odepřít.

    Během vyhodnocení žádosti se žádost, která odpovídá definici zásady zamítnutí, označí jako nevyhovující. Za předpokladu, že standardem pro vaši službu je šifrování CMK, znamená to, že požadavky, které nezadávají šifrování CMK, nedodržují předpisy.

    Snímek obrazovky se změnou předdefinovaných efektů zásad CMK na odepření

  3. Dokončete vytváření zásad.

  4. Volání služeb – Aktualizace rozhraní API pro povolení vynucení zásad CMK na úrovni služby

PATCH https://management.azure.com/subscriptions/[subscriptionId]/resourceGroups/[resourceGroupName]/providers/Microsoft.Search/searchServices/[serviceName]?api-version=2022-11-01

{
    "properties": {
        "encryptionWithCmk": {
            "enforcement": "Enabled",
            "encryptionComplianceStatus": "Compliant"
        }
    }
}

Příklady REST

Tato část ukazuje JSON pro několik objektů, abyste viděli, kde najít "encryptionKey" v definici objektu.

Šifrování indexu

Podrobnosti o vytvoření nového indexu prostřednictvím rozhraní REST API najdete na adrese Create Index (REST API), kde jediným rozdílem je zadání podrobností šifrovacího klíče jako součásti definice indexu:

{
 "name": "hotels",
 "fields": [
  {"name": "HotelId", "type": "Edm.String", "key": true, "filterable": true},
  {"name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false},
  {"name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene"},
  {"name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene"},
  {"name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
  {"name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true},
  {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true},
  {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true}
 ],
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Teď můžete odeslat požadavek na vytvoření indexu a pak začít index normálně používat.

Šifrování mapování synonym

Vytvořte zašifrovanou mapu synonym pomocí rozhraní REST API služby Azure AI Search Map pro vytvoření mapy synonym. Pomocí vlastnosti encryptionKey určete, který šifrovací klíč se má použít.

{
  "name" : "synonymmap1",
  "format" : "solr",
  "synonyms" : "United States, United States of America, USA\n
  Washington, Wash. => WA",
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Teď můžete odeslat žádost o vytvoření mapy synonym a začít ji normálně používat.

Šifrování zdroje dat

Vytvořte šifrovaný zdroj dat pomocí rozhraní REST API (Create Data Source). Pomocí vlastnosti encryptionKey určete, který šifrovací klíč se má použít.

{
  "name" : "datasource1",
  "type" : "azureblob",
  "credentials" :
  { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=datasource;AccountKey=accountkey;EndpointSuffix=core.windows.net"
  },
  "container" : { "name" : "containername" },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Teď můžete odeslat žádost o vytvoření zdroje dat a pak ji začít normálně používat.

Šifrování sady dovedností

Vytvořte šifrovanou sadu dovedností pomocí rozhraní REST API pro vytvoření sady dovedností. Pomocí vlastnosti encryptionKey určete, který šifrovací klíč se má použít.

{
    "name": "skillset1",
    "skills":  [ omitted for brevity ],
    "cognitiveServices": { omitted for brevity },
      "knowledgeStore":  { omitted for brevity  },
    "encryptionKey": (optional) { 
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "accessCredentials": {
            "applicationId": "00000000-0000-0000-0000-000000000000",
            "applicationSecret": "myApplicationSecret"}
    }
}

Teď můžete odeslat žádost o vytvoření sady dovedností a začít ji normálně používat.

Šifrování indexeru

Vytvořte šifrovaný indexer pomocí rozhraní REST API pro vytvoření indexeru. Pomocí vlastnosti encryptionKey určete, který šifrovací klíč se má použít.

{
  "name": "indexer1",
  "dataSourceName": "datasource1",
  "skillsetName": "skillset1",
  "parameters": {
      "configuration": {
          "imageAction": "generateNormalizedImages"
      }
  },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Teď můžete odeslat žádost o vytvoření indexeru a začít ji normálně používat.

Důležité

I když se "encryptionKey" nedá přidat do existujících indexů vyhledávání nebo map synonym, může se aktualizovat poskytnutím různých hodnot pro kterýkoli ze tří podrobností trezoru klíčů (například aktualizací verze klíče). Při změně na nový klíč služby Key Vault nebo novou verzi klíče je nutné před odstraněním předchozího klíče aktualizovat jakýkoli index vyhledávání nebo mapu synonym, která tento klíč používá, aby používala nový klíč\verze. Pokud to neuděláte, vykreslí index nebo mapu synonym nepoužitelné, protože po ztrátě přístupu ke klíči nebude možné obsah dešifrovat. I když obnovení přístupových oprávnění trezoru klíčů později obnoví přístup k obsahu.

Práce s šifrovaným obsahem

Díky šifrování klíčů spravovaných zákazníkem si můžete všimnout latence indexování i dotazů kvůli nadbytečné práci šifrování/dešifrování. Azure AI Search neprovádí aktivitu šifrování protokolů, ale přístup ke klíči můžete monitorovat prostřednictvím protokolování trezoru klíčů. Doporučujeme povolit protokolování jako součást konfigurace trezoru klíčů.

Očekává se, že bude probíhat obměně klíčů v průběhu času. Pokaždé, když otočíte klíče, je důležité postupovat podle této sekvence:

  1. Určete klíč používaný indexem nebo mapou synonym.
  2. Vytvořte nový klíč v trezoru klíčů, ale ponechte původní klíč k dispozici.
  3. Aktualizujte vlastnosti encryptionKey v indexu nebo mapování synonym tak, aby používaly nové hodnoty. Pouze objekty, které byly původně vytvořeny s touto vlastností, lze aktualizovat tak, aby používaly jinou hodnotu.
  4. Zakažte nebo odstraňte předchozí klíč v trezoru klíčů. Monitorujte přístup ke klíči a ověřte, že se nový klíč používá.

Z důvodů výkonu vyhledávací služba klíč ukládá do mezipaměti až několik hodin. Pokud klíč zakážete nebo odstraníte bez zadání nového klíče, budou dotazy dál fungovat dočasně, dokud nevyprší platnost mezipaměti. Jakmile ale vyhledávací služba už nemůže dešifrovat obsah, zobrazí se tato zpráva: "Přístup zakázáno. Použitý klíč dotazu byl pravděpodobně odvolán . Zkuste to prosím znovu."

Další kroky

Pokud neznáte architekturu zabezpečení Azure, projděte si dokumentaci k zabezpečení Azure a zejména tento článek: