Configuración de claves administradas por el cliente para el cifrado de datos en Azure AI Search

Azure AI Search cifra automáticamente los datos en reposo con claves administradas por el servicio. Si se necesita más protección, puede complementar el cifrado predeterminado con otro nivel de cifrado mediante las claves que se crean y administran en Azure Key Vault.

En este artículo se describen los pasos necesarios para configurar el cifrado de claves administradas por el cliente (CMK) o "Bring Your Own Key" (BYOK). Estos son algunos aspectos que debe tener en cuenta:

  • El cifrado de CMK se aprueba en objetos individuales. Si necesita una CMK en el servicio de búsqueda, establezca una directiva de cumplimiento.

  • El cifrado de CMK depende de Azure Key Vault. Puede crear sus propias claves de cifrado y almacenarlas en un almacén de claves, o puede usar las API de Azure Key Vault para generar las claves de cifrado. Azure Key Vault debe estar en la misma suscripción e inquilino que la Búsqueda de Azure AI. La Búsqueda de Azure AI recupera la clave administrada mediante la conexión a través de un sistema o una identidad administrada por el usuario. Este comportamiento requiere que ambos servicios compartan el mismo inquilino.

  • El cifrado con una CMK empieza a estar operativo cuando se crea un objeto. No se pueden cifrar los objetos que ya existen. El cifrado con una CMK sucede cada vez que se guarda un objeto en disco, ya sea datos en reposo de almacenamiento a largo plazo o datos temporales de almacenamiento a corto plazo. Con una CMK, el disco nunca ve datos sin cifrar.

Nota:

Si un índice está cifrado con CMK, solo es accesible si el servicio de búsqueda tiene acceso a la clave. Si se revoca el acceso, el índice no se puede usar y el servicio no se puede escalar hasta que se elimine el índice o se restaure el acceso a la clave.

Objetos cifrados con CMK

Los objetos que se pueden cifrar incluyen índices, listas de sinónimos, indizadores, orígenes de datos y conjuntos de aptitudes. El cifrado es intensivo a nivel computacional de descifrar, por lo que solo se cifra el contenido confidencial.

El cifrado se realiza a través del siguiente contenido:

  • Todo el contenido de índices y listas de sinónimos, incluidas las descripciones.

  • Para indizadores, orígenes de datos y conjuntos de aptitudes, solo se cifran los campos en los que se almacenan cadenas de conexión, descripciones, claves y entradas de usuario. Por ejemplo, los conjuntos de aptitudes tienen las claves de los servicios de Azure AI y algunas aptitudes aceptan entradas de usuario, como entidades personalizadas. En ambos casos, se cifran las claves y las entradas de usuario en las aptitudes.

Cifrado doble completo

Al poner en marcha el cifrado con una CMK, el contenido se cifra dos veces. En el caso de los objetos y campos mencionados en la sección anterior, el contenido se cifra primero con la CMK y, en segundo lugar, con la clave administrada por Microsoft. El contenido se cifra por doble partida en discos de datos para el almacenamiento a largo plazo y en discos temporales usados para el almacenamiento a corto plazo.

La habilitación del cifrado CMK aumenta el tamaño del índice y reduce el rendimiento de las consultas. Según las observaciones hechas hasta la fecha, puede esperar un aumento de entre un 30 y un 60 por ciento en los tiempos de consultas, aunque el rendimiento real variará según la definición de los índices y los tipos de consultas. Debido a que se reduce el rendimiento, se recomienda habilitar esta característica solo en los índices que realmente la necesitan.

Aunque el cifrado doble ya está disponible en todas las regiones, la compatibilidad se implementó en dos fases:

  • La primera implementación se realizó el 1 de agosto de 2020 e incluyó las cinco regiones que figuran a continuación. Los servicios de búsqueda creados en las siguientes regiones admiten el uso de CMK en los discos de datos, pero no en los discos temporales:

    • Oeste de EE. UU. 2
    • Este de EE. UU.
    • Centro-sur de EE. UU.
    • US Gov - Virginia
    • US Gov: Arizona
  • La segunda implementación, que tuvo lugar el 13 de mayo de 2021, incorporó cifrado para discos temporales y un cifrado con CMK ampliado a todas las regiones admitidas.

    Si usa CMK desde un servicio creado durante la primera implementación y también quiere disponer de cifrado con CMK en los discos temporales, deberá crear un nuevo servicio de búsqueda en la región de su elección y volver a implementar el contenido.

Requisitos previos

En este escenario se usan los servicios y las herramientas siguientes.

Debe tener un cliente de búsqueda que pueda crear el objeto cifrado. En este código, hará referencia a una clave del almacén de claves y a la información de registro de la aplicación. Este código puede ser una aplicación de trabajo o un código de prototipo como el ejemplo de código de C# DotNetHowToEncryptionUsingCMK.

Sugerencia

Puede usar un cliente REST o Azure PowerShell para crear índices y mapas de sinónimos que incluyan un parámetro de clave de cifrado. También puede usar SDK de Azure. No se admite la compatibilidad del portal para agregar una clave a índices o mapas de sinónimos.

Sugerencias de Key Vault

Si no tiene experiencia con Azure Key Vault, revise este inicio rápido para obtener información sobre las tareas básicas: Establecimiento y recuperación de un secreto de Azure Key Vault mediante PowerShell. Estas son algunas sugerencias para usar Key Vault:

  • Use tantos almacenes de claves como necesite. Las claves administradas pueden estar en almacenes de claves diferentes. Un servicio de búsqueda puede tener varios objetos cifrados, cada uno cifrado con una clave de cifrado administrada por el cliente distinta, en almacenes de claves diferentes.

  • Habilite el registro en Key Vault para poder supervisar la utilización de las claves.

  • Asegúrese de seguir procedimientos estrictos durante el giro rutinario de las claves del almacén de claves y de los secretos y el registro de aplicaciones de Active Directory. Actualice siempre todo el contenido cifrado para usar nuevos secretos y claves antes de eliminar los antiguos. Si omite este paso, el contenido no se puede descifrar.

1 - Habilitación de la protección de purga

Como primer paso, asegúrese de que la eliminación temporal y la protección de purga están habilitadas en el almacén de claves. Debido a la naturaleza del cifrado con claves administradas por el cliente, nadie puede recuperar sus datos si se elimina la clave de Azure Key Vault.

Para evitar la pérdida de datos causada por las eliminaciones accidentales de claves de Key Vault, debe habilitar las opciones de eliminación temporal y de protección de purgas en el almacén de claves. La eliminación temporal está habilitada de manera predeterminada, por lo que solo tendrá problemas si la deshabilitó intencionadamente. La protección de purga no está habilitada de forma predeterminada, pero es necesaria para el cifrado con claves administradas por el cliente de Azure AI Search.

Puede establecer ambas propiedades mediante el portal, PowerShell o los comandos de la CLI de Azure.

  1. Inicie sesión en Azure Portal y abra la página de información general del almacén de claves.

  2. En la página Información general, en Información esencial, habilite Eliminación temporal y Protección de purga.

2\. Creación de una clave en Key Vault

Omita la generación de claves si ya tiene una clave en Azure Key Vault que quiere usar, pero recopile el identificador de clave. Necesita esta información al crear un objeto cifrado.

  1. Inicie sesión en Azure Portal y abra la página de información general del almacén de claves.

  2. Seleccione Claves a la izquierda y, luego, elija + Generate/Import (+ Generar/Importar).

  3. En el panel Crear una clave, forme la lista de Opciones y elija el método que quiera usar para crear una clave. También puede generar una nueva clave, cargar una clave existente, o usar Restaurar copia de seguridad para seleccionar una copia de seguridad de una clave.

  4. Especifique un nombre para la clave y, opcionalmente, seleccione otras propiedades clave.

  5. Seleccione Crear para iniciar la implementación.

  6. Seleccione la clave, seleccione la versión actual y tome nota del identificador de clave. Se compone del URI del valor de clave, el nombre de clave y la versión de clave. Necesita el identificador para definir un índice cifrado en Búsqueda de Azure AI.

    Crear una clave del almacén de claves

3 - Creación de una entidad de seguridad

Tiene varias opciones para acceder a la clave de cifrado en tiempo de ejecución. El enfoque más sencillo consiste en recuperar la clave mediante la identidad administrada y los permisos del servicio de búsqueda. Puede usar una identidad administrada por el usuario o por el sistema. De esta forma, se pueden omitir los pasos para el registro de aplicaciones y los secretos de aplicación, y se simplifica la definición de la clave de cifrado.

Como alternativa, puede crear y registrar una aplicación de Microsoft Entra. El servicio de búsqueda proporcionará el identificador de la aplicación en las solicitudes.

Una identidad administrada permite que el servicio de búsqueda se autentique en Azure Key Vault sin almacenar las credenciales (ApplicationID o ApplicationSecret) en el código. El ciclo de vida de este tipo de identidad administrada está ligado al ciclo de vida del servicio de búsqueda, que solo puede tener una identidad administrada. Para más información sobre cómo funcionan las identidades administradas, consulte Qué son las identidades administradas de recursos de Azure.

  1. Convierta el servicio de búsqueda en un servicio de confianza.

    Activación de la identidad administrada asignada por el sistema

Entre las condiciones que impedirán adoptar este enfoque se incluyen las siguientes:

  • No puede conceder directamente a su servicio de búsqueda permisos de acceso al almacén de claves (por ejemplo, si el servicio de búsqueda se encuentra en un inquilino de Microsoft Entra ID diferente al de Azure Key Vault).

  • Se requiere un único servicio de búsqueda para hospedar varios mapas de sinónimos o índices cifrados, cada uno de los cuales utiliza una clave diferente de un almacén de claves diferente, donde cada almacén de claves debe utilizar una identidad diferente para la autenticación. Dado que un servicio de búsqueda solo puede tener una identidad administrada, un requisito de varias identidades descarta el enfoque simplificado para su escenario.

4 - Concesión de permisos

En este paso, creará una directiva de acceso en Key Vault. Esta directiva proporciona a la aplicación que registró en Microsoft Entra ID permiso para usar la clave administrada por el cliente.

Los permisos de acceso se pueden revocar en cualquier momento. Una vez revocada, cualquier índice o mapa de sinónimos del servicio de búsqueda que utilice ese almacén de claves quedará inutilizable. La restauración de los permisos de acceso al almacén de claves en un momento posterior restaura el acceso al índice o al mapa de sinónimos. Para más información, consulte Protección del acceso a un almacén de claves.

  1. Todavía en Azure Portal, abra la página Información general del almacén de claves.

  2. Seleccione las directivas de acceso de la izquierda y seleccione + Crear para iniciar el asistente Creación de una directiva de acceso.

    Creación de una directiva de acceso.

  3. En la página Permisos, seleccione Obtener para Permisos de las claves, Permisos de los secretos y Permisos de los certificados. Seleccione Desencapsular clave y Encapsular clave para ** operaciones criptográficas en la clave.

    Seleccione los permisos en la página de permisos.

  4. Seleccione Next (Siguiente).

  5. En la página Principle, busque y seleccione la entidad de seguridad que usa el servicio de búsqueda para acceder a la clave de cifrado. Será la identidad administrada por el sistema o por el usuario del servicio de búsqueda o la aplicación registrada.

  6. Seleccione Siguiente y Crear.

Importante

El contenido cifrado de Azure AI Search está configurado para utilizar una clave específica de Azure Key Vault con una versión específica. Si cambia la clave o la versión, debe actualizar el índice o el mapa de sinónimos para utilizarla antes de eliminar la anterior. Si no lo hace, el índice o el mapa de sinónimos no se podrán usar. No podrá descifrar el contenido si se pierde la clave.

5\. Cifrado del contenido

Las claves de cifrado se agregan al crear un objeto. Para agregar una clave administrada por el cliente en un índice, un mapa de sinónimos, un indizador, un origen de datos o un conjunto de aptitudes, use la API REST Search o un SDK de Azure para crear un objeto que tenga habilitado el cifrado. El portal no admite propiedades de cifrado en la creación de objetos.

  1. Llame a las API Create para especificar la propiedad encryptionKey:

  2. Inserte la construcción encryptionKey en la definición del objeto. Es una propiedad de primer nivel, el mismo que el del nombre y la descripción. Los siguientes ejemplos de REST muestran la colocación de las propiedades. Si usa el mismo almacén, clave y versión, puede pegar la misma construcción de la propiedad "encryptionKey" en la definición de cada objeto.

    En el primer ejemplo se muestra una propiedad "encryptionKey" para un servicio de búsqueda que se conecta mediante una identidad administrada:

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

    En el segundo ejemplo se incluye la propiedad "accessCredentials", necesaria si registró una aplicación en Microsoft Entra ID:

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

Una vez que cree el objeto cifrado en el servicio de búsqueda, puede usarlo como haría con cualquier otro objeto de su tipo. El cifrado es transparente para el usuario y el desarrollador.

Nota

Ninguno de estos detalles del almacén de claves se considera secreto y se pueden recuperar fácilmente; para ello, debe ir a la página pertinente de Azure Key Vault en Azure Portal.

6 - Configuración de la directiva

Las directivas de Azure ayudan a aplicar los estándares de la organización y a evaluar el cumplimiento a gran escala. Azure AI Search tiene una directiva integrada para el cumplimiento de CMK en todo el servicio opcional.

En esta sección, establecerá la directiva que define un estándar de CMK para el servicio de búsqueda. A continuación, configurará el servicio de búsqueda para aplicar esta directiva.

  1. Vaya a la directiva integrada en el explorador web. Seleccione Asignar.

    Captura de pantalla de la asignación de la directiva de CMK integrada.

  2. Configure el ámbito de la directiva. En la sección Parámetros, desactive Mostrar solo los parámetros... y establezca Efecto en Denegar.

    Durante la evaluación de la solicitud, una solicitud que coincide con una definición de directiva de denegación se marca como no compatible. Suponiendo que el estándar del servicio es el cifrado CMK, "denegar" significa que las solicitudes que no especifican el cifrado CMK no son compatibles.

    Captura de pantalla del cambio del efecto de directiva de CMK integrada para denegar.

  3. Termine de crear la directiva.

  4. Llame a Servicios: Actualizar API para habilitar la aplicación de directivas de CMK en el nivel de servicio.

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

Ejemplos de REST

En esta sección se muestra el código JSON de varios objetos para que pueda ver dónde buscar la propiedad "encryptionKey" en la definición de un objeto.

Cifrado del índice

Los detalles de la creación de un índice a través de la API de REST se pueden encontrar en Creación de un índice (API de REST), donde la única diferencia es especificar los detalles de la clave de cifrado como parte de la definición del índice:

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

Ahora puede enviar la solicitud de creación del índice y, a continuación, empiece a usar el índice con normalidad.

Cifrado del mapa de sinónimos

Cree una asignación de sinónimos cifrada con el procedimiento de Creación de una asignación de sinónimos (API REST de Azure AI Search). Use la propiedad "encryptionKey" para especificar la clave de cifrado que se va a usar.

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

Ahora puede enviar la solicitud de creación del mapa de sinónimos y, a continuación, empiece a usarlo con normalidad.

Cifrado de origen de datos

Cree un origen de datos cifrado mediante la API REST Create Data Source (Crear origen de datos). Use la propiedad "encryptionKey" para especificar la clave de cifrado que se va a usar.

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

Ahora puede enviar la solicitud de creación del origen de datos y luego empezar a usarlo con normalidad.

Cifrado de conjunto de aptitudes

Cree un conjunto de aptitudes cifrado mediante la API REST Create Skillset (Crear conjunto de aptitudes). Use la propiedad "encryptionKey" para especificar la clave de cifrado que se va a usar.

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

Ahora puede enviar la solicitud de creación del conjunto de aptitudes y luego empezar a usarlo con normalidad.

Cifrado de indizador

Cree un indizador cifrado mediante la API REST Create Indexer (Crear indizador). Use la propiedad "encryptionKey" para especificar la clave de cifrado que se va a usar.

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

Ahora puede enviar la solicitud de creación del indizador y luego empezar a usarlo con normalidad.

Importante

Aunque la propiedad "encryptionKey" no se puede agregar a los índices de búsqueda ni a los mapas de sinónimos existentes, se puede actualizar si se proporcionan valores diferentes para cualquiera de los tres datos del almacén de claves (por ejemplo, mediante la actualización de la versión de la clave). Al cambiar a una nueva clave o versión de clave de Key Vault, cualquier asignación de índices de búsqueda o sinónimos que utilice la clave debe actualizarse primero para usar la nueva clave o versión antes de eliminar la clave o versión anteriores. Si no lo hace, el índice o el mapa de sinónimos quedarán inutilizables, ya que no podrá descifrar el contenido una vez que se pierda el acceso a la clave. No obstante, al restaurar los permisos de acceso al almacén de claves en un momento posterior, se restaurará el acceso al contenido.

Trabajo con contenido cifrado

Con el cifrado de clave administrada por el cliente, observará una latencia en la indexación y las consultas debido al trabajo adicional de cifrado o descifrado. Azure AI Search no registra la actividad de cifrado, pero puede supervisar el acceso a la clave mediante el registro del almacén de claves. Se recomienda habilitar el registro como parte de la configuración del almacén de claves.

Se espera que se produzca una rotación de claves con el tiempo. Cuando se realice la rotación de claves, es importante seguir esta secuencia:

  1. Determine la clave que usa un índice o asignación de sinónimos.
  2. Cree una nueva clave en el almacén de claves, pero deje la clave original disponible.
  3. Actualice las propiedades de encryptionKey en una asignación de sinónimo o índice para usar los nuevos valores. Solo se pueden actualizar los objetos que se crearon originalmente con esta propiedad para usar un valor diferente.
  4. Deshabilite o elimine la clave anterior en el almacén de claves. Supervise el acceso a la clave para comprobar que se está usando la nueva clave.

Por motivos de rendimiento, el servicio de búsqueda almacena la clave en la memoria caché durante varias horas. Si deshabilita o elimina la clave sin proporcionar una nueva, las consultas seguirán funcionando de manera temporal hasta que expire la caché. Sin embargo, una vez que el servicio de búsqueda ya no pueda descifrar el contenido, verá este mensaje: "Prohibido el acceso. Puede que la clave de consulta se haya revocado. Vuelva a intentarlo.”

Pasos siguientes

Si no está familiarizado con la arquitectura de seguridad de Azure, revise la documentación de Azure Security, y en particular, este artículo: