Konfigurera kund hanterade nycklar för datakryptering i Azure Cognitive Search

Azure Cognitive Search krypterar automatiskt indexerat innehåll i vila med tjänst-hanterade nycklar. Om du behöver mer skydd kan du komplettera standardkryptering med ytterligare ett krypteringslager med hjälp av nycklar som du skapar och hanterar i Azure Key Vault. Den här artikeln går igenom stegen för att konfigurera kund hanterad nyckelkryptering.

Kund hanterad nyckelkryptering är beroende av Azure Key Vault. Du kan skapa egna krypteringsnycklar och lagra dem i ett nyckelvalv, eller använda Azure Key Vault-API:er för att generera krypteringsnycklar. Med Azure Key Vault kan du också granska nyckelanvändningen om du aktiverar loggning.

Kryptering med kund hanterade nycklar tillämpas på enskilda index eller synonymmappningar när dessa objekt skapas och anges inte på själva söktjänstnivån. Endast nya objekt kan krypteras. Du kan inte kryptera innehåll som redan finns.

Alla nycklar behöver inte finnas i samma nyckelvalv. En enda söktjänst kan vara värd för flera krypterade index eller synonymmappningar, var och en krypterad med sina egna kund hanterade krypteringsnycklar, som lagras i olika nyckelvalv. Du kan också ha index och synonymmappningar i samma tjänst som inte är krypterade med kund hanterade nycklar.

Viktigt

Om du implementerar kund hanterade nycklar måste du följa strikta procedurer under rutinmässig rotation av nyckelvalvsnycklar och Active Directory-programhemligheter och registrering. Uppdatera alltid allt krypterat innehåll så att nya hemligheter och nycklar används innan du tar bort de gamla. Om du missar det här steget kan innehållet inte dekrypteras.

Dubbel kryptering

Dubbel kryptering är en utökning av kund hanterade nycklar (CMK). Det tolkas som tvådelig kryptering (en gång med CMK och igen av tjänstbaserade nycklar) och omfattande i omfånget, som omfattar långsiktig lagring som skrivs till en datadisk, samt kortsiktig lagring som skrivs till temporära diskar. Det krävs ingen konfiguration. När du tillämpar CMK på objekt anropas dubbel kryptering automatiskt.

Även om dubbel kryptering är tillgängligt i alla regioner, distribuerades stödet i två faser. Den första utrullningen gjordes i augusti 2020 och innehöll de fem regioner som anges nedan. Den andra utrullningen i maj 2021 utökade dubbel kryptering till alla återstående regioner. Om du använder CMK på en äldre tjänst och vill ha dubbel kryptering måste du skapa en ny söktjänst i valfri region.

Region Skapandedatum för tjänsten
USA, västra 2 Efter den 1 augusti 2020
East US Efter den 1 augusti 2020
USA, södra centrala Efter den 1 augusti 2020
US Gov, Virginia Efter den 1 augusti 2020
US Gov, Arizona Efter den 1 augusti 2020
Alla andra regioner som stöds Efter den 13 maj 2021

Förutsättningar

Följande verktyg och tjänster används i det här scenariot.

Du bör ha ett sökprogram som kan skapa det krypterade objektet. I den här koden refererar du till en nyckelvalvsnyckel och Active Directory-registreringsinformation. Den här koden kan vara en fungerande app eller prototypkod, till exempel C#-kodexempel DotNetHowToEncryptionUsingCMK.

Tips

Du kan använda Postman, Visual Studio Codeeller Azure PowerShellför att anropa REST API:er som skapar index och synonymmappningar som innehåller en krypteringsnyckelparameter. Det finns inget portalstöd för att lägga till en nyckel i index eller synonymmappningar just nu.

1 – Aktivera nyckelåterställning

På grund av typen av kryptering med kund hanterade nycklar kan ingen hämta dina data om din Azure Key Vault-nyckel tas bort. För att förhindra dataförlust på grund Key Vault av misstag måste skydd för mjuk borttagning och rensning aktiveras i nyckelvalvet. Mjuk borttagning är aktiverat som standard, så du kommer bara att stöta på problem om du har inaktiverat det. Rensningsskydd är inte aktiverat som standard, men det krävs för kund hanterad nyckelkryptering i Cognitive Search. Mer information finns i Översikt över mjuk borttagning och rensningsskydd.

Du kan ange båda egenskaperna med hjälp av kommandona portal, PowerShell eller Azure CLI.

Använda Azure Portal

  1. Logga in på Azure Portal och öppna översiktssidan för nyckelvalvet.

  2. På sidan Översikt under Essentials aktiverar du mjuk borttagning och rensningsskydd.

Använda PowerShell

  1. Kör Connect-AzAccount för att konfigurera dina Autentiseringsuppgifter för Azure.

  2. Kör följande kommando för att ansluta till nyckelvalvet och ersätt <vault_name> med ett giltigt namn:

    $resource = Get-AzResource -ResourceId (Get-AzKeyVault -VaultName "<vault_name>").ResourceId
    
  3. Azure Key Vault skapas med mjuk borttagning aktiverat. Om det är inaktiverat i valvet kör du följande kommando:

    $resource.Properties | Add-Member -MemberType NoteProperty -Name "enableSoftDelete" -Value 'true'
    
  4. Aktivera rensningsskydd:

    $resource.Properties | Add-Member -MemberType NoteProperty -Name "enablePurgeProtection" -Value 'true'
    
  5. Spara dina uppdateringar:

    Set-AzResource -resourceid $resource.ResourceId -Properties $resource.Properties
    

Använda Azure CLI

  • Om du har en installation av Azure CLIkan du köra följande kommando för att aktivera de nödvändiga egenskaperna.

    az keyvault update -n <vault_name> -g <resource_group> --enable-soft-delete --enable-purge-protection
    

2 – Skapa en nyckel i Key Vault

Hoppa över det här steget om du redan har en nyckel i Azure Key Vault.

  1. Logga in på Azure Portal och öppna översiktssidan för nyckelvalvet.

  2. Välj Nycklar till vänster och välj sedan + Generera/importera.

  3. I fönstret Skapa en nyckel i listan över Alternativ väljer du den metod som du vill använda för att skapa en nyckel. Du kan generera en ny nyckel, ladda upp en befintlig nyckel eller använda Återställ säkerhetskopia för att välja en säkerhetskopia av en nyckel.

  4. Ange ett Namn för din nyckel och välj eventuellt andra nyckelegenskaper.

  5. Välj Skapa för att starta distributionen.

  6. Anteckna nyckelidentifieraren – den består av nyckelvärdet URI, nyckelnamnet och nyckelversionen. Du behöver identifieraren för att definiera ett krypterat index i Azure Cognitive Search.

    Skapa en ny nyckelvalvsnyckel

3 – Registrera en app i Active Directory

  1. I Azure Portalsöker du efter Azure Active Directory resurs för din prenumeration.

  2. Till vänster under Hantera väljer du Appregistreringar och sedan Ny registrering.

  3. Ge registreringen ett namn, kanske ett namn som liknar namnet på sökprogrammet. Välj Register (Registrera).

  4. När appregistreringen har skapats kopierar du program-ID:t. Du måste ange den här strängen till ditt program.

    Om du stegar igenom DotNetHowToEncryptionUsingCMKklistrar du in det här värdet iappsettings.jspå filen.

    Program-ID i avsnittet Essentials

  5. Välj sedan Certifikat & hemligheter till vänster.

  6. Välj Ny klienthemlighet. Ge hemligheten ett visningsnamn och välj Lägg till.

  7. Kopiera programhemligheten. Om du stegar igenom exemplet klistrar du in det här värdet iappsettings.jspå filen.

    Apphemlighet

4 – Bevilja åtkomstbehörigheter för nycklar

I det här steget skapar du en åtkomstprincip i Key Vault. Den här principen ger programmet som du registrerade med Active Directory behörighet att använda din kund hanterade nyckel.

Åtkomstbehörigheter kan återkallas när som helst. När det har återkallats blir alla söktjänstindex eller synonymmappning som använder nyckelvalvet oanvändbara. Om du återställer åtkomstbehörigheter för Key Vault vid ett senare tillfälle återställs mappningsåtkomsten för index\synonymer. Mer information finns i Säker åtkomst till ett nyckelvalv.

  1. Öppna sidan Översikt Azure Portal nyckelvalvet i den här Azure Portal nyckelvalvet.

  2. Välj Åtkomstprinciper till vänster och välj + Lägg till åtkomstprincip.

    Lägga till ny åtkomstprincip för nyckelvalv

  3. Välj Välj huvudnamn och välj det program som du registrerade med Active Directory. Du kan söka efter den efter namn.

    Välj key vault access policy principal (Huvudnamn för nyckelvalvsåtkomstprincip)

  4. I Nyckelbehörigheter väljer du Hämta, Packa upp nyckel och Omsluta nyckel.

  5. I Hemliga behörigheter väljer du Hämta.

  6. I Certifikatbehörigheter väljer du Hämta.

  7. Välj Lägg till och sedan Spara.

Viktigt

Krypterat innehåll i Azure Cognitive Search har konfigurerats för att använda en Azure Key Vault nyckel med en specifik version. Om du ändrar nyckeln eller versionen måste indexet eller synonymmappningen uppdateras så att den nya nyckeln\versionen används innan du tar bort den tidigare nyckeln\versionen. Om du inte gör det renderas indexet eller synonymmappningen som oanvändbar. Då kan du inte dekryptera innehållet när nyckelåtkomsten har gått förlorad.

5 – Kryptera innehåll

Om du vill lägga till en kund hanterad nyckel i ett index, en datakälla, en kunskapsuppsättning, en indexerare eller en synonymmappning måste du använda sökfunktionen REST API eller ett SDK. Portalen exponerar inte synonymmappningar eller krypteringsegenskaper. När du använder ett giltigt API-index stöder datakällor, kunskapsuppsättningar, indexerare och synonymmappningar en krypteringsnyckelegenskap på toppnivå.

Det här exemplet använder REST API, med värden för Azure Key Vault och Azure Active Directory:

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

Anteckning

Ingen av dessa nyckelvalvsuppgifter betraktas som hemliga och kan enkelt hämtas genom att bläddra till relevant Azure Key Vault nyckelsida i Azure Portal.

Exempel: Indexkryptering

Skapa ett krypterat index med hjälp av skapa index Azure Cognitive Search REST API. Använd egenskapen encryptionKey för att ange vilken krypteringsnyckel som ska användas.

Anteckning

Ingen av dessa nyckelvalvsuppgifter betraktas som hemliga och kan enkelt hämtas genom att bläddra till relevant Azure Key Vault nyckelsida i Azure Portal.

REST-exempel

Det här avsnittet visar den fullständiga JSON-filen för ett krypterat index och en synonymmappning

Indexkryptering

Information om hur du skapar ett nytt index via REST API finns i Skapa index (REST API),där den enda skillnaden här är att ange krypteringsnyckelinformationen som en del av indexdefinitionen:

{
 "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"
    }
  }
}

Du kan nu skicka begäran om att skapa index och sedan börja använda indexet på vanligt sätt.

Kryptering av synonymmappning

Skapa en krypterad synonymmappning med hjälp av skapa synonymmappning Azure Cognitive Search REST API. Använd egenskapen encryptionKey för att ange vilken krypteringsnyckel som ska användas.

{
  "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"
    }
  }
}

Nu kan du skicka begäran om att skapa synonymmappningen och sedan börja använda den normalt.

Exempel: Kryptering av datakälla

Skapa en krypterad datakälla med hjälp av Skapa datakälla (Azure Cognitive Search REST API). Använd egenskapen encryptionKey för att ange vilken krypteringsnyckel som ska användas.

{
  "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"
    }
  }
}

Du kan nu skicka begäran om att skapa datakällan och sedan börja använda den normalt.

Exempel: Kunskapsuppsättningskryptering

Skapa en krypterad kunskapsuppsättning med hjälp av skapa kunskapsuppsättning Azure Cognitive Search REST API. Använd egenskapen encryptionKey för att ange vilken krypteringsnyckel som ska användas.

{
  "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"
    }
  }
}

Nu kan du skicka begäran om att skapa kunskapsuppsättningen och sedan börja använda den normalt.

Exempel: Indexerarkryptering

Skapa en krypterad indexerare med hjälp av skapa indexeraren Azure Cognitive Search REST API. Använd egenskapen encryptionKey för att ange vilken krypteringsnyckel som ska användas.

{
  "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"
    }
  }
}

Du kan nu skicka begäran om att skapa indexeraren och sedan börja använda den normalt.

Viktigt

Det går inte att lägga till befintliga sökindex eller synonymmappningar, men det kan uppdateras genom att ange olika värden för någon av de tre encryptionKey nyckelvalvsinformationen (t.ex. uppdatering av nyckelversionen). När du ändrar till en ny Key Vault-nyckel eller en ny nyckelversion måste alla sökindex eller synonymmappning som använder nyckeln först uppdateras för att använda den nya nyckeln\versionen innan den tidigare nyckeln\versionen tas bort. Om du inte gör det återges index- eller synonymmappningen som oanvändbar, eftersom den inte kan dekryptera innehållet när nyckelåtkomsten går förlorad. Även om du återställer åtkomstbehörigheter för Key Vault vid ett senare tillfälle återställs innehållsåtkomsten.

Enklare alternativ: Betrodd tjänst

Beroende på klientkonfiguration och autentiseringskrav kan du implementera en enklare metod för att komma åt en nyckelvalvsnyckel. I stället för att skapa och använda ett Active Directory-program kan du göra en söktjänst till en betrodd tjänst genom att aktivera en system hanterad identitet för den. Du skulle sedan använda den betrodda söktjänsten som en säkerhetsprincip i stället för ett AD-registrerat program för att få åtkomst till nyckelvalvsnyckeln.

Med den här metoden kan du utelämna stegen för programregistrering och programhemligheter och förenklar en krypteringsnyckeldefinition till bara nyckelvalvskomponenterna (URI, valvnamn, nyckelversion).

I allmänhet gör en hanterad identitet att din söktjänst kan autentisera till Azure Key Vault utan att lagra autentiseringsuppgifter (ApplicationID eller ApplicationSecret) i kod. Livscykeln för den här typen av hanterad identitet är kopplad till söktjänstens livscykel, som bara kan ha en hanterad identitet. Mer information om hur hanterade identiteter fungerar finns i Vad är hanterade identiteter för Azure-resurser.

  1. Gör söktjänsten till en betrodd tjänst. Aktivera system tilldelad hanterad identitet

  2. När du ställer in en åtkomstprincip i Azure Key Vault du den betrodda söktjänsten som princip (i stället för det AD-registrerade programmet). Tilldela samma behörigheter (flera GET,WRAP, UNWRAP) enligt anvisningarna i steget Bevilja åtkomstnyckelbehörigheter.

  3. Använd en förenklad konstruktion av encryptionKey som utelämnar Active Directory-egenskaperna.

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

Villkor som förhindrar att du använder den här förenklade metoden är:

  • Du kan inte ge söktjänsten direkt åtkomstbehörighet till nyckelvalvet (till exempel om söktjänsten finns i en annan Active Directory-klient än Azure Key Vault).

  • En enda söktjänst krävs för att vara värd för flera krypterade index\synonymmappningar, var och en med en annan nyckel från ett annat nyckelvalv, där varje nyckelvalv måste använda en annan identitet för autentisering. Eftersom en söktjänst bara kan ha en hanterad identitet diskvalificerar ett krav för flera identiteter den förenklade metoden för ditt scenario.

Arbeta med krypterat innehåll

Med kund hanterad nyckelkryptering ser du svarstiden för både indexering och frågor på grund av det extra krypterings-/dekrypteringsarbetet. Azure Cognitive Search loggar inte krypteringsaktiviteten, men du kan övervaka nyckelåtkomst via nyckelvalvsloggning. Vi rekommenderar att du aktiverar loggning som en del av konfigurationen av nyckelvalvet.

Nyckelrotation förväntas ske med tiden. När du roterar nycklar är det viktigt att du följer den här sekvensen:

  1. Fastställ nyckeln som används av ett index eller en synonymmappning.
  2. Skapa en ny nyckel i nyckelvalvet,men lämna den ursprungliga nyckeln tillgänglig.
  3. Uppdatera egenskaperna encryptionKey i ett index eller en synonymmappning för att använda de nya värdena. Endast objekt som ursprungligen skapades med den här egenskapen kan uppdateras för att använda ett annat värde.
  4. Inaktivera eller ta bort den tidigare nyckeln i nyckelvalvet. Övervaka nyckelåtkomst för att kontrollera att den nya nyckeln används.

Av prestandaskäl cachelagrar söktjänsten nyckeln i upp till flera timmar. Om du inaktiverar eller tar bort nyckeln utan att ange en ny fortsätter frågorna att fungera tillfälligt tills cachen upphör att gälla. Men när söktjänsten inte kan dekryptera innehåll får du det här meddelandet: "Åtkomst är förbjuden. Den frågenyckel som används kan ha återkallats – försök igen."

Nästa steg

Om du inte är bekant med Azure-säkerhetsarkitekturen kan du läsa dokumentationen om Azure-säkerhet,särskilt den här artikeln: