Sdílet prostřednictvím


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

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

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

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.

  • Citlivý obsah v indexerech, zdrojích dat, sadách dovedností a vektorizátorech. Tento obsah se skládá pouze z polí, která ukládají připojovací řetězec, popisy, identity, klíče a vstupy uživatelů. 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í. Všechny odkazy na externí prostředky (například zdroje dat Azure nebo modely Azure OpenAI) jsou také šifrované.

Ú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 objektů, 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. Pokud chcete zjistit datum vytvoření služby, přečtěte si, jak zkontrolovat datum vytvoření služby.

Požadavky

Omezení

  • Žádná podpora pro model hardwarového zabezpečení spravovaného ve službě Azure Key Vault (HSM).

  • Na webu Azure Portal není podporováno přidávání šifrovacích klíčů.

  • Žádná podpora mezi předplatnými Azure Key Vault a Azure AI Search musí být ve stejném předplatném.

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íčů.

  • Použijte stejného tenanta, abyste mohli načíst 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. Další informace o vytvoření tenanta najdete v tématu Nastavení nového tenanta.

  • Povolte ochranu před vymazáním a obnovitelné odstraně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 ho záměrně zakážete. 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.

  • Povolte protokolování trezoru klíčů, abyste mohli monitorovat využití klíčů.

  • Povolte automatické zotavování klíčů nebo během rutinního obměny klíčů trezoru klíčů a tajných kódů aplikací a registrace postupujte podle striktních postupů. 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.

Krok 1: 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.

Než klíč přidáte, ujistěte se, že jste si přiřadili roli kryptografického důstojníka služby Key Vault.

Šifrování Azure AI Search podporuje klíče RSA velikosti 2048, 3072 a 4096. Další informace o podporovaných typech klíčů najdete v tématu O klíčích.

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

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

  3. V podokně Vytvořit klíč v seznamu možností zvolte Vygenerovat a vytvořte nový klíč.

  4. Zadejte název klíče a přijměte výchozí hodnoty pro jiné vlastnosti klíče.

  5. Volitelně můžete nastavit zásadu obměně klíčů, která povolí automatické obměně.

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

  7. 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íčů

Krok 2: Vytvoření objektu zabezpečení

Máte několik možností nastavení přístupu azure AI Search k šifrovacímu klíči za běhu. Nejjednodušším přístupem je načíst klíč pomocí spravované identity vyhledávací služby. Můžete použít systémovou nebo uživatelem spravovanou identitu. Tímto způsobem můžete vynechat kroky registrace aplikace a tajných kódů aplikací. Alternativně můžete vytvořit a zaregistrovat aplikaci Microsoft Entra a nechat vyhledávací službu poskytnout ID aplikace na žádost.

Doporučujeme použít spravovanou identitu. 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 vaší vyhledávací služby, který může mít přiřazenou jenom jednu spravovanou identitu přiřazenou systémem. Další informace o tom, jak spravované identity fungují, najdete v tématu Co jsou spravované identity pro prostředky Azure.

Povolte spravovanou identitu přiřazenou systémem pro vaši vyhledávací službu.

Snímek obrazovky se zapnutím spravované identity přiřazené systémem

Krok 3: Udělení oprávnění

Azure Key Vault podporuje autorizaci pomocí řízení přístupu na základě role. Tento přístup doporučujeme použít u zásad přístupu trezoru klíčů. Další informace najdete v tématu Poskytnutí přístupu ke klíčům, certifikátům a tajným kódům služby Key Vault pomocí rolí Azure.

V tomto kroku přiřaďte roli uživatele šifrování šifrovací služby Key Vault k vyhledávací službě. Pokud testujete místně, přiřaďte tuto roli také sobě.

  1. Přihlaste se k webu Azure Portal a vyhledejte svůj trezor klíčů.

  2. Vyberte Řízení přístupu (IAM) a vyberte Přidat přiřazení role.

  3. Vyberte uživatele šifrování šifrovací služby Key Vault a pak vyberte Další.

  4. Vyberte spravované identity, vyberte členy a pak vyberte spravovanou identitu vaší vyhledávací služby.

  5. Vyberte Zkontrolovat + přiřadit.

Počkejte několik minut, než se přiřazení role zprovozní.

Krok 4: Š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. Pokud chcete přidat šifrování pomocí sady Azure SDK, projděte si příklad Pythonu v tomto článku.

  1. Volání rozhraní API pro vytváření k určení vlastnosti encryptionKey :

  2. Vložte konstruktor encryptionKey do definice objektu. Tato vlastnost je vlastnost první úrovně na stejné úrovni jako název a popis. 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 šifrovací klíč pro vyhledávací službu, která se připojuje pomocí spravované identity:

    {
      "encryptionKey": {
        "keyVaultUri": "<YOUR-KEY-VAULT-URI>",
        "keyVaultKeyName": "<YOUR-ENCRYPTION-KEY-NAME>",
        "keyVaultKeyVersion": "<YOUR-ENCRYPTION-KEY-VERSION>"
      }
    }
    

    Druhý příklad obsahuje accessCredentials, které jsou nezbytné v případě, že jste zaregistrovali aplikaci v MICROSOFT Entra ID:

    {
      "encryptionKey": {
        "keyVaultUri": "<YOUR-KEY-VAULT-URI>",
        "keyVaultKeyName": "<YOUR-ENCRYPTION-KEY-NAME>",
        "keyVaultKeyVersion": "<YOUR-ENCRYPTION-KEY-VERSION>",
        "accessCredentials": {
          "applicationId": "<YOUR-APPLICATION-ID>",
          "applicationSecret": "<YOUR-APPLICATION-SECRET>"
        }
      }
    }
    
  3. Ověřte, že šifrovací klíč existuje, a to tak, že v objektu vydáte get.

  4. Ověřte, že je objekt funkční, provedením úlohy, například dotazem na index, který je zašifrovaný.

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

Žá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.

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í být objekt před odstraněním předchozího klíče aktualizován tak, aby ho používal. Pokud to neuděláte, vykreslí objekt nepoužitelný. Pokud dojde ke ztrátě klíče, nebudete moct dešifrovat obsah.

Krok 5: Testování šifrování

Pokud chcete ověřit, že šifrování funguje, odvolejte šifrovací klíč, zadejte dotaz na index (měl by být nepoužitelný) a potom obnovte šifrovací klíč.

Pro tuto úlohu použijte web Azure Portal.

  1. Na stránce Azure Key Vault vyberte Klíče objektů>.

  2. Vyberte klíč, který jste právě vytvořili, a pak vyberte Odstranit.

  3. Na stránce Azure AI Search vyberte Indexy správy>vyhledávání.

  4. Vyberte index a pomocí Průzkumníka služby Search spusťte dotaz. Měla by se zobrazit chyba.

  5. Vraťte se na stránku Klíče objektů>služby Azure Key Vault.

  6. Vyberte Spravovat odstraněné klíče.

  7. Vyberte svůj klíč a pak vyberte Obnovit.

  8. Vraťte se do indexu ve službě Azure AI Search a spusťte dotaz znovu. Měly by se zobrazit výsledky hledání. Pokud se nezobrazí okamžité výsledky, počkejte minutu a zkuste to znovu.

Nastavení zásad pro vynucení dodržování předpisů cmk

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/<your-subscription-Id>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Search/searchServices/<your-search-service-name>?api-version=2023-11-01

{
    "properties": {
        "encryptionWithCmk": {
            "enforcement": "Enabled"
        }
    }
}

Obměna nebo aktualizace šifrovacích klíčů

Doporučujeme používat funkce automatického zotavování služby Azure Key Vault, ale klíče můžete otáčet také ručně.

Při změně klíče nebo jeho verze je nutné před odstraněním starých hodnot nejprve aktualizovat všechny objekty, které tento klíč používají, aby používaly nové hodnoty. V opačném případě se objekt stane nepoužitelným, protože ho nejde dešifrovat.

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

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íčů.

  1. Vytvořte pracovní prostor služby Log Analytics.

  2. Přidejte nastavení diagnostiky v trezoru klíčů, které používá pracovní prostor pro uchovávání dat.

  3. Vyberte audit nebo allLogs pro kategorii, zadejte název nastavení diagnostiky a pak ho uložte.

Příklad konfigurace šifrovacího klíče v Pythonu

Tato část ukazuje reprezentaci Pythonu encryptionKey v definici objektu. Stejná definice platí pro indexy, zdroje dat, dovednosti, indexery a mapy synonym. Pokud chcete vyzkoušet tento příklad ve vyhledávací službě a trezoru klíčů, stáhněte si poznámkový blok z azure-search-python-samples.

Nainstalujte některé balíčky.

! pip install python-dotenv
! pip install azure-core
! pip install azure-search-documents==11.5.1
! pip install azure-identity

Vytvořte index, který má šifrovací klíč.

from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
    SimpleField,
    SearchFieldDataType,
    SearchableField,
    SearchIndex,
    SearchResourceEncryptionKey
)
from azure.identity import DefaultAzureCredential

endpoint="<PUT YOUR AZURE SEARCH SERVICE ENDPOINT HERE>"
credential = DefaultAzureCredential()

index_name = "test-cmk-index"
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)  
fields = [
        SimpleField(name="Id", type=SearchFieldDataType.String, key=True),
        SearchableField(name="Description", type=SearchFieldDataType.String)
    ]

scoring_profiles = []
suggester = []
encryption_key = SearchResourceEncryptionKey(
    key_name="<PUT YOUR KEY VAULT NAME HERE>",
    key_version="<PUT YOUR ALPHANUMERIC KEY VERSION HERE>",
    vault_uri="<PUT YOUR KEY VAULT ENDPOINT HERE>"
)

index = SearchIndex(name=index_name, fields=fields, encryption_key=encryption_key)
result = index_client.create_or_update_index(index)
print(f' {result.name} created')

Získejte definici indexu, abyste ověřili, že existuje konfigurace šifrovacího klíče.

index_name = "test-cmk-index-qs"
index_client = SearchIndexClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential)  

result = index_client.get_index(index_name)  
print(f"{result}")  

Načtěte index s několika dokumenty. Veškerý obsah pole se považuje za citlivý a zašifruje se na disku pomocí klíče spravovaného zákazníkem.

from azure.search.documents import SearchClient

# Create a documents payload
documents = [
    {
    "@search.action": "upload",
    "Id": "1",
    "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities."
    },
    {
    "@search.action": "upload",
    "Id": "2",
    "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts."
    },
    {
    "@search.action": "upload",
    "Id": "3",
    "Description": "The hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel's restaurant services."
    },
    {
    "@search.action": "upload",
    "Id": "4",
    "Description": "The hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace."
    }
]

search_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, index_name=index_name, credential=credential)
try:
    result = search_client.upload_documents(documents=documents)
    print("Upload of new document succeeded: {}".format(result[0].succeeded))
except Exception as ex:
    print (ex.message)

    index_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential)

Spuštěním dotazu ověřte, že je index funkční.

from azure.search.documents import SearchClient

query = "historic"  

search_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential, index_name=index_name)
  
results = search_client.search(  
    query_type='simple',
    search_text=query, 
    select=["Id", "Description"],
    include_total_count=True
    )
  
for result in results:  
    print(f"Score: {result['@search.score']}")
    print(f"Id: {result['Id']}")
    print(f"Description: {result['Description']}")

Výstup z dotazu by měl mít výsledky podobné následujícímu příkladu.

Score: 0.6130029
Id: 4
Description: The hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.
Score: 0.26286605
Id: 1
Description: The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.

Vzhledem k tomu, že se šifrovaný obsah před aktualizací dat nebo dotazy dešifruje, neuvidíte vizuální důkazy o šifrování. Pokud chcete ověřit, že šifrování funguje, zkontrolujte protokoly prostředků.

Další kroky

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