Dela via


Konfigurera kundhanterade nycklar för datakryptering i Azure AI Search

Azure AI Search krypterar automatiskt vilande data med tjänsthanterade nycklar. Om du behöver mer skydd kan du komplettera standardkryptering med ett annat krypteringslager med hjälp av nycklar som du skapar och hanterar i Azure Key Vault.

Den här artikeln beskriver 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 i söktjänsten anger du en tvingande princip.

  • CMK-kryptering är beroende av Azure Key Vault. Du kan skapa egna krypteringsnycklar och lagra dem i ett nyckelvalv, eller så kan du använda Azure Key Vault-API:er för att generera krypteringsnycklar. Azure Key Vault måste finnas i samma prenumeration och klientorganisation som Azure AI Search. Azure AI Search hämtar din hanterade nyckel genom att ansluta via ett system eller en användarhanterad identitet. Det här beteendet kräver att båda tjänsterna delar samma klientorganisation.

  • CMK-kryptering används när ett objekt skapas. Du kan inte kryptera objekt som redan finns. CMK-kryptering sker när ett objekt sparas på disk, antingen data i vila för långsiktig lagring eller tillfälliga data för kortsiktig lagring. Med CMK ser disken aldrig okrypterade data.

Kommentar

Om ett index är CMK-krypterat är det endast tillgängligt om söktjänsten har åtkomst till nyckeln. Om åtkomsten återkallas är indexet oanvändbart och tjänsten kan inte skalas förrän indexet har tagits bort eller åtkomsten till nyckeln har återställts.

CMK-krypterade objekt

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äng, beskrivningar, nycklar och användarindata. Kompetensuppsättningar har till exempel Azure AI-tjänstnycklar och vissa färdigheter accepterar användarindata, till exempel anpassade entiteter. I båda fallen krypteras nycklar och användarindata till kunskaper.

Fullständig dubbelkryptering

När du introducerar CMK-kryptering krypterar du innehåll två gånger. För de objekt och fält som anges i föregående avsnitt krypteras innehållet först med din CMK, och för det andra med den Microsoft-hanterade nyckeln. Innehållet krypteras dubbelt på datadiskar för långsiktig lagring och på tillfälliga diskar som används för kortsiktig lagring.

Om du aktiverar CMK-kryptering ökar indexstorleken och försämrar frågeprestandan. Baserat på observationer hittills kan du förvänta dig en ökning med 30–60 procent i frågetider, även om den faktiska prestandan varierar beroende på indexdefinitionen och typerna av frågor. Eftersom prestandan minskar rekommenderar vi att du bara aktiverar den här funktionen på index som verkligen kräver den.

Även om dubbel kryptering nu är tillgänglig i alla regioner distribuerades stödet i två faser:

  • Den första distributionen var den 1 augusti 2020 och inkluderade de fem regioner som anges nedan. tjänsten Search som skapats i följande regioner stöds CMK för datadiskar, men inte temporära diskar:

    • Västra USA 2
    • USA, östra
    • USA, södra centrala
    • US Gov, Virginia
    • US Gov, Arizona
  • Den andra distributionen den 13 maj 2021 lade till kryptering för tillfälliga diskar och utökad CMK-kryptering till alla regioner som stöds.

    Om du använder CMK från en tjänst som skapades under den första distributionen och du också vill ha CMK-kryptering över tillfälliga diskar måste du skapa en ny söktjänst i valfri region och distribuera om innehållet.

Förutsättningar

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 nyckel för nyckelvalv och programregistreringsinformation. Den här koden kan vara en fungerande app eller prototypkod, till exempel C#-kodexemplet DotNetHowToEncryptionUsingCMK.

Dricks

Du kan använda en REST-klient eller Azure PowerShell för att skapa index och synonymkartor 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.

Key Vault-tips

Om du inte har använt Azure Key Vault tidigare läser du den här snabbstarten och lär dig mer om grundläggande uppgifter: Ange och hämta en hemlighet från Azure Key Vault med hjälp av PowerShell. Här följer några tips för att använda Key Vault:

  • Använd så många nyckelvalv som 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å Key Vault 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 för att använda nya hemligheter och nycklar innan du tar bort de gamla. Om du missar det här steget kan innehållet inte dekrypteras.

1 – Aktivera rensningsskydd

Som ett första steg kontrollerar du att skydd mot mjuk borttagning och rensning är aktiverat i nyckelvalvet. På grund av krypteringens natur med kundhanterade nycklar kan ingen hämta dina data om din Azure Key Vault-nyckel tas bort.

För att förhindra dataförlust som orsakas av oavsiktliga key vault-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 inaktiverar det. Rensningsskydd är inte aktiverat som standard, men det krävs för kundhanterad nyckelkryptering i Azure AI Search.

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

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

  2. På sidan Översikt under Essentials aktiverar du Skydd mot mjuk borttagning och rensning.

2 – Skapa en nyckel i Key Vault

Hoppa över nyckelgenerering om du redan har en nyckel i Azure Key Vault 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-portalen 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 väljer du den metod som du vill använda för att skapa en nyckel i listan med Alternativ. Du kan generera en ny nyckel, ladda upp en befintlig nyckel eller använda Återställ säkerhetskopiering för att välja en säkerhetskopia av en nyckel.

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

  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 AI 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 den hanterade identiteten och behörigheterna för söktjänsten. 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 Microsoft Entra-program. Söktjänsten tillhandahåller program-ID för begäranden.

Med en hanterad identitet kan söktjänsten 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 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 ge söktjänsten åtkomstbehörighet direkt till nyckelvalvet (till exempel om söktjänsten finns i en annan Microsoft Entra-ID-klient än Azure Key Vault).

  • En enda söktjänst krävs för att vara värd för flera krypterade index eller synonymkartor, 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 utesluter ett krav på flera identiteter den förenklade metoden för ditt scenario.

4 – Bevilja behörigheter

I det här steget skapar du en åtkomstprincip i Key Vault. Den här principen ger programmet som du registrerade med Microsoft Entra-ID 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 synonymmappning 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- och synonymkartan. Mer information finns i Säker åtkomst till ett nyckelvalv.

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

  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 Packa upp nyckel och Radbryt 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 AI Search är konfigurerat för att använda en specifik Azure Key Vault-nyckel med en specifik version. Om du ändrar nyckeln eller versionen måste index- eller synonymkartan uppdateras för att kunna använda den innan du tar bort den tidigare. Om du inte gör det blir index- eller synonymkartan oanvändbar. Du kommer inte att kunna 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, synonymkarta, indexerare, datakälla eller kompetensuppsättning använder du REST API för sökning eller en Azure SDK för att skapa ett objekt som har kryptering aktiverat. Portalen tillåter inte krypteringsegenskaper vid skapande av objekt.

  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. Följande REST-exempel visar egenskapsplacering . Om du använder samma valv, nyckel och version kan du klistra in samma "encryptionKey"-konstruktion i varje objektdefinition.

    Det första exemplet visar en "encryptionKey" för en söktjänst som ansluter med hjälp av 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 Microsoft Entra-ID:

    {
      "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. Krypteringen är transparent för användaren och utvecklaren.

Kommentar

Ingen av dessa nyckelvalvsdetaljer anses vara hemliga och kan enkelt hämtas genom att bläddra till relevant Azure Key Vault-sida i Azure-portalen.

6 – Konfigurera princip

Azure-principer bidrar till att upprätthålla organisationens standarder och utvärdera efterlevnad i stor skala. Azure AI Search har en valfri inbyggd princip för cmk-tillämpning för hela tjänsten.

I det här avsnittet anger du principen som definierar en CMK-standard för söktjänsten. Sedan konfigurerar du söktjänsten för att tillämpa den här principen.

  1. Gå till den inbyggda principen i webbläsaren. Välj Tilldela

    Skärmbild av tilldelning av inbyggd CMK-princip.

  2. Konfigurera principomfånget. I avsnittet Parametrar avmarkerar du Visa endast parametrar... och anger Effekt till Neka.

    Under utvärderingen av begäran markeras en begäran som matchar en principdefinition för nekande som inkompatibel. Förutsatt att standarden för din tjänst är CMK-kryptering innebär "neka" att begäranden som inte anger CMK-kryptering inte är kompatibla.

    Skärmbild av ändring av den inbyggda CMK-principeffekten så att den nekas.

  3. Slutför skapandet av principen.

  4. Anropa API:et Services – Update för att aktivera CMK-principframtvingande på tjänstnivå.

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

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 ä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 av synonymer

Skapa en krypterad synonymkarta med hjälp av REST-API:et Create Synonym Map Azure AI 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 Create Skillset. 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 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 Key Vault-nyckel eller en ny nyckelversion måste alla sökindex eller synonymmappningar 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 kan du märka svarstider för både indexering och frågor på grund av det extra krypterings-/dekrypteringsarbetet. Azure AI Search loggar inte krypteringsaktiviteten, men du kan övervaka nyckelåtkomst via nyckelvalvsloggning. Vi rekommenderar att du aktiverar loggning som en del av key vault-konfigurationen.

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 en index- eller synonymkarta.
  2. Skapa en ny nyckel i nyckelvalvet, men lämna den ursprungliga nyckeln tillgänglig.
  3. Uppdatera encryptionKey-egenskaperna 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 tidigare nyckeln i nyckelvalvet. Övervaka åtkomsten till nyckeln 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 cacheminnet 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 är bekant med Azure-säkerhetsarkitekturen läser du dokumentationen för Azure Security och i synnerhet den här artikeln: