Konfigurera kundhanterade nycklar för datakryptering i Azure Cognitive Search

Azure Cognitive Search krypterar automatiskt vilande data med tjänsthanterade 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 密钥保管库.

Den här artikeln beskriver steg för steg hur du konfigurerar kundhanterad nyckel (CMK) eller BYOK-kryptering (Bring Your Own Key). Här följer några saker att tänka på:

  • CMK-kryptering utförs på enskilda objekt. Om du behöver cmk ensidigt i söktjänsten anger du en tvingande princip på tjänstnivå så att du kan meddelas om tjänsten inte följer standard.

  • CMK-kryptering är beroende av Azure 密钥保管库. Du kan skapa egna krypteringsnycklar och lagra dem i ett nyckelvalv, eller så kan du använda Azure 密钥保管库-API:er för att generera krypteringsnycklar.

  • CMK-kryptering sker när ett objekt skapas. Du kan inte kryptera objekt som redan finns.

Stöd för CMK-kryptering

Objekt som kan krypteras är index, synonymlistor, indexerare, datakällor och kompetensuppsättningar. Kryptering är beräkningsmässigt dyrt att dekryptera, så endast känsligt innehåll krypteras.

Kryptering utförs över följande innehåll:

  • Allt innehåll i index och synonymlistor, inklusive beskrivningar.

  • För indexerare, datakällor och kompetensuppsättningar krypteras endast de fält som lagrar anslutningssträngar, beskrivningar, nycklar och användarindata. Kompetensuppsättningar har till exempel Cognitive Services-nycklar och vissa färdigheter accepterar användarindata, till exempel anpassade entiteter. I båda fallen krypteras nycklar och användarindata till färdigheter.

Dubbel kryptering

Dubbel kryptering är en förlängning av kundhanterad nyckelkryptering (CMK). CMK-kryptering gäller för långsiktig lagring som skrivs till en datadisk. Termen dubbel kryptering avser ytterligare kryptering av kortsiktig lagring (innehåll som skrivs till tillfälliga diskar). Ingen konfiguration krävs. När du använder CMK för objekt anropas dubbel kryptering automatiskt.

Även om dubbel kryptering är tillgängligt i alla regioner distribuerades stödet i två faser. Den första distributionen var i augusti 2020 och inkluderade de fem regioner som anges nedan. Den andra distributionen 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 Datum då tjänsten skapades
USA, västra 2 Efter 1 augusti 2020
East US Efter 1 augusti 2020
USA, södra centrala Efter 1 augusti 2020
US Gov, Virginia Efter 1 augusti 2020
US Gov, Arizona Efter 1 augusti 2020
Alla andra regioner som stöds Efter den 13 maj 2021

Krav

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

Du bör ha en sökklient 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#-kodexemplet DotNetHowToEncryptionUsingCMK.

Tips

Du kan använda Postman eller Azure PowerShell för att anropa REST-API:er som skapar index och synonymmappningar som innehåller en krypteringsnyckelparameter. Du kan också använda Azure SDK:er. Portalstöd för att lägga till en nyckel i index eller synonymkartor stöds inte.

密钥保管库 tips

Om du inte har använt Azure 密钥保管库 tidigare kan du läsa den här snabbstarten om du vill veta mer om grundläggande uppgifter: Ange och hämta en hemlighet från Azure 密钥保管库 med hjälp av PowerShell. Här följer några tips för att använda 密钥保管库:

  • Använd så många nyckelvalv du behöver. Hanterade nycklar kan finnas i olika nyckelvalv. En söktjänst kan ha flera krypterade objekt, var och en krypterad med en annan kundhanterad krypteringsnyckel, lagrad i olika nyckelvalv.

  • Aktivera loggning på 密钥保管库 så att du kan övervaka nyckelanvändningen.

  • Kom ihåg att 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 ditt innehåll inte dekrypteras.

1 – Aktivera rensningsskydd

Som ett första steg kontrollerar du att mjuk borttagning och rensningsskydd är aktiverat i nyckelvalvet. På grund av krypteringens natur med kundhanterade nycklar kan ingen hämta dina data om din Azure-密钥保管库 nyckel tas bort.

För att förhindra dataförlust som orsakas av oavsiktliga 密钥保管库 nyckelborttagningar måste skydd mot mjuk borttagning och rensning vara aktiverat i nyckelvalvet. Mjuk borttagning är aktiverat som standard, så du stöter bara på problem om du avsiktligt har inaktiverat det. Rensningsskydd är inte aktiverat som standard, men det krävs för kundhanterad nyckelkryptering i Cognitive Search.

Du kan ange båda egenskaperna med hjälp av portalen, PowerShell eller Azure CLI-kommandon.

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

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

2 – Skapa en nyckel i 密钥保管库

Hoppa över nyckelgenerering om du redan har en nyckel i Azure 密钥保管库 som du vill använda, men samla in nyckelidentifieraren. Du behöver den här informationen när du skapar ett krypterat objekt.

  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 med 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 nyckeln och välj andra nyckelegenskaper om du vill.

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

  6. Välj nyckeln, välj den aktuella versionen och anteckna sedan 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 nyckel för nyckelvalv

3 – Skapa ett säkerhetsobjekt

Du har flera alternativ för att komma åt krypteringsnyckeln vid körning. Den enklaste metoden är att hämta nyckeln med hjälp av söktjänstens hanterade identitet och behörigheter. Du kan använda antingen en system- eller användarhanterad identitet. På så sätt kan du utelämna stegen för programregistrering och programhemligheter och förenkla krypteringsnyckeldefinitionen.

Du kan också skapa och registrera ett Azure Active Directory-program. Söktjänsten tillhandahåller program-ID:t för begäranden.

Med en hanterad identitet kan din söktjänst autentisera till Azure 密钥保管库 utan att lagra autentiseringsuppgifter (ApplicationID eller ApplicationSecret) i kod. Livscykeln för den här typen av hanterad identitet är kopplad till livscykeln för din söktjänst, 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 systemtilldelad hanterad identitet

Villkor som hindrar dig från att använda den här metoden är:

  • Du kan inte direkt ge söktjänsten åtkomstbehörighet till nyckelvalvet (till exempel om söktjänsten finns i en annan Active Directory-klientorganisation än Azure 密钥保管库).

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

4 – Bevilja behörigheter

I det här steget skapar du en åtkomstprincip i 密钥保管库. Den här principen ger programmet som du registrerade med Active Directory behörighet att använda din kundhanterade nyckel.

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

  1. Öppna översiktssidan för nyckelvalvet i Azure-Portal.

  2. Välj Åtkomstprinciper till vänster och välj + Skapa för att starta guiden Skapa en åtkomstprincip .

    Skapa en åtkomstprincip.

  3. På sidan Behörigheter väljer du Hämta för Nyckelbehörigheter, Hemliga behörigheter och Certifikatbehörigheter. Välj Unwrap Key and Wrap Key (Packa upp nyckel och omslut nyckel) för ** kryptografiska åtgärder på nyckeln.

    Välj behörigheter på sidan Behörigheter.

  4. Välj Nästa.

  5. På sidan Princip letar du upp och väljer det säkerhetsobjekt som används av söktjänsten för att få åtkomst till krypteringsnyckeln. Detta är antingen den systemhanterade eller användarhanterade identiteten för söktjänsten eller det registrerade programmet.

  6. Välj Nästa och Skapa.

Viktigt

Krypterat innehåll i Azure Cognitive Search är konfigurerat för att använda en specifik Azure 密钥保管库-nyckel med en specifik version. Om du ändrar nyckeln eller versionen måste index- eller synonymmappningen uppdateras så att den används innan du tar bort den tidigare. Om du inte gör det blir index- eller synonymmappningen oanvändbar. Du kan inte dekryptera innehållet om nyckeln går förlorad.

5 – Kryptera innehåll

Krypteringsnycklar läggs till när du skapar ett -objekt. Om du vill lägga till en kundhanterad nyckel i ett index, en synonymkarta, en indexerare, en datakälla eller en kompetensuppsättning använder du Rest-API:et för sökning eller en Azure SDK för att skapa ett objekt som har kryptering aktiverat. Portalen tillåter inte krypteringsegenskaper när objekt skapas.

  1. Anropa Skapa API:er för att ange egenskapen encryptionKey :

  2. Infoga encryptionKey-konstruktionen i objektdefinitionen. Den här egenskapen är en förstanivåegenskap på samma nivå som namn och beskrivning. REST-exemplen nedan visar egenskapens placering. Om du använder samma valv, nyckel och version kan du klistra in samma "encryptionKey"-konstruktion i varje objektdefinition.

    I det första exemplet visas en "encryptionKey" för en söktjänst som ansluter med en hanterad identitet:

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

    Det andra exemplet innehåller "accessCredentials" som krävs om du har registrerat ett program i Azure AD:

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

När du har skapat det krypterade objektet i söktjänsten kan du använda det på samma sätt som andra objekt av dess typ. Kryptering är transparent för användaren och utvecklaren.

Anteckning

Ingen av dessa nyckelvalvsdetaljer anses vara hemliga och kan enkelt hämtas genom att gå till relevant Azure 密钥保管库-sida i Azure-Portal.

REST-exempel

Det här avsnittet visar JSON för flera objekt så att du kan se var du hittar "encryptionKey" i en objektdefinition.

Indexkryptering

Information om hur du skapar ett nytt index via REST-API:et 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"
    }
  }
}

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

Mappningskryptering för synonymer

Skapa en krypterad synonymkarta med hjälp av REST-API:et Skapa synonymkarta Azure Cognitive Search. 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 synonymkartan och sedan börja använda den normalt.

Kryptering av datakälla

Skapa en krypterad datakälla med hjälp av REST-API:et (Create Data Source). 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 datakällan och sedan börja använda den normalt.

Kryptering av kompetensuppsättningar

Skapa en krypterad kompetensuppsättning med hjälp av REST-API:et Skapa kompetensuppsättning. Använd egenskapen "encryptionKey" för att ange vilken krypteringsnyckel som ska användas.

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

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

Indexerarekryptering

Skapa en krypterad indexerare med hjälp av REST API:et För att skapa indexerare. 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"
    }
  }
}

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

Viktigt

Även om "encryptionKey" inte kan läggas till i befintliga sökindex eller synonymkartor, kan det uppdateras genom att ange olika värden för någon av de tre nyckelvalvsdetaljerna (till exempel uppdatering av nyckelversionen). När du ändrar till en ny 密钥保管库 nyckel eller en ny nyckelversion måste alla sökindex eller synonymer som använder nyckeln först uppdateras för att använda den nya nyckeln\versionen innan du tar bort den tidigare nyckeln\versionen. Om du inte gör det blir index- eller synonymkartan oanvändbar eftersom den inte kan dekryptera innehållet när nyckelåtkomsten har förlorats. Även om återställning av åtkomstbehörigheter för nyckelvalv vid ett senare tillfälle återställer innehållsåtkomsten.

Arbeta med krypterat innehåll

Med kundhanterad nyckelkryptering ser du svarstider 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 loggning av nyckelvalv. Vi rekommenderar att du aktiverar loggning som en del av nyckelvalvskonfigurationen.

Nyckelrotation förväntas ske över tid. När du roterar nycklar är det viktigt att följa den här sekvensen:

  1. Fastställ nyckeln som används av ett index eller en synonymkarta.
  2. Skapa en ny nyckel i nyckelvalvet, men lämna den ursprungliga nyckeln tillgänglig.
  3. Uppdatera egenskaperna encryptionKey på en index- eller synonymkarta 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 föregående 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 längre kan dekryptera innehåll får du följande meddelande: "Åtkomst förbjuden. Den frågenyckel som används kan ha återkallats – försök igen."

Nästa steg

Om du inte känner till Azures säkerhetsarkitektur kan du läsa dokumentationen om Azure Security och i synnerhet den här artikeln: