Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure AI Search cifra automáticamente los datos en reposo con claves administradas por Microsoft. Si necesita otra capa de cifrado o la capacidad de revocar claves y apagar el acceso al contenido, puede usar claves que cree y administre en Azure Key Vault. En este artículo se explica cómo configurar el cifrado de claves administradas por el cliente (CMK).
Puede almacenar claves mediante Azure Key Vault o HSM administrado de Azure Key Vault (módulo de seguridad de hardware). Un HSM administrado de Azure Key Vault es un HSM validado de FIPS 140-2 de nivel 3. La compatibilidad con HSM es nueva en Azure AI Search. Para migrar a HSM, gire las claves y elija HSM administrado para el almacenamiento.
Importante
El cifrado cmK es irreversible. Puede rotar las claves y cambiar la configuración de CMK, pero el cifrado de índice dura durante la vigencia del índice. Después del cifrado CMK, solo se puede acceder a un índice si el servicio de búsqueda tiene acceso a la clave. Si revoca el acceso a la clave eliminando o cambiando la asignación de roles, 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. Si elimina o gira las claves, la clave más reciente se almacena en caché durante un máximo de 60 minutos.
Objetos cifrados con CMK
El cifrado de CMK se aplica a objetos individuales cuando se crean. Esto significa que no se pueden cifrar los objetos que ya existen. El cifrado de CMK se produce cada vez que un objeto se guarda en disco, tanto para los datos en reposo (almacenamiento a largo plazo) como para los datos almacenados en caché temporal (almacenamiento a corto plazo). Con una CMK, el disco nunca ve datos sin cifrar.
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 dentro de índices y listas de sinónimos.
Contenido confidencial en indexadores, orígenes de datos, conjuntos de aptitudes y vectorizadores. Contenido confidencial hace referencia a cadenas de conexión, descripciones, identidades, 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, las claves y las entradas de usuario se cifran. Las referencias a recursos externos (como orígenes de datos de Azure o modelos de Azure OpenAI) también se cifran.
Si necesita una CMK en el servicio de búsqueda, establezca una directiva de cumplimiento.
Requisitos previos
Azure AI Search en un nivel facturable (básico o superior, en cualquier región).
Azure Key Vault y un almacén de claves con la eliminación temporal y la protección de purga habilitadas. O bien, HSM administrado de Azure Key Vault. Este recurso puede estar en cualquier suscripción, pero debe estar en el mismo inquilino que Azure AI Search.
Capacidad de configurar permisos para el acceso a claves y asignar roles. Para crear claves, debe ser Oficial criptográfico de Key Vault en Azure Key Vault o Oficial criptográfico de HSM administrado en Azure Key Vault Managed HSM.
Para asignar roles, debe ser Propietario de la suscripción, Administrador de acceso de usuario, Administrador de control de acceso basado en roles o estar asignado a un rol personalizado con permisos Microsoft.Authorization/roleAssignments/write.
Paso 1: Crear una clave de cifrado
Utilice Azure Key Vault o Azure Key Vault Managed HSM para crear una clave. El cifrado de Búsqueda de Azure AI admite claves RSA de tamaños 2048, 3072 y 4096. Para más información sobre los tipos de clave admitidos, consulte Acerca de las claves.
Se recomienda revisar estas sugerencias antes de empezar.
Las operaciones necesarias son Wrap, Unwrap, Encrypt y Decrypt.
Puede crear un almacén de claves mediante Azure Portal, la CLI de Azure o Azure PowerShell.
Inicie sesión en Azure Portal y abra la página de información general del almacén de claves.
Seleccione Objetos>Claves a la izquierda y, a continuación, seleccione Generar e importar.
En el panel Crear una clave, en la lista de Opciones, elija Generar para crear una clave.
Escriba un Nombre para la clave y acepte los valores predeterminados para otras propiedades de clave.
Opcionalmente, establezca una directiva de rotación de claves para habilitar la rotación automática.
Seleccione Crear para iniciar la implementación.
Una vez creada la clave, obtenga su identificador de clave. Seleccione la clave, seleccione la versión actual y, a continuación, copie el 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. Recuerde que las operaciones necesarias son Wrap, Unwrap, Encrypt y Decrypt.
Paso 2: Crear una entidad de seguridad
Cree una entidad de seguridad que use el servicio de búsqueda para acceder a la clave de cifrado. Puede usar una identidad administrada y una asignación de roles, o puede registrar una aplicación y hacer que el servicio de búsqueda proporcione el identificador de aplicación en las solicitudes.
Se recomienda usar una identidad administrada y roles. Puede usar una identidad administrada por el sistema o una identidad administrada por el usuario. Una identidad administrada permite que el servicio de búsqueda se autentique a través de Microsoft Entra ID, sin almacenar 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 asignada por el sistema. Para más información sobre cómo funcionan las identidades administradas, consulte Qué son las identidades administradas de recursos de Azure.
- Identidad administrada por el sistema
- Identidad administrada por el usuario (versión preliminar)
- Registro de una aplicación
Habilite la identidad administrada asignada por el sistema para el servicio de búsqueda. Se trata de una operación de dos clics, habilitar y guardar.
Paso 3: Conceder permisos
Si configuró el servicio de búsqueda para usar una identidad administrada, asigne roles que le proporcionen acceso a la clave de cifrado.
Se recomienda el control de acceso basado en rol en el modelo de permiso de directiva de acceso. Para más información o pasos de migración, comience con el control de acceso basado en rol de Azure (RBAC de Azure) frente a las directivas de acceso (heredadas).
Inicie sesión en Azure Portal y busque el almacén de claves.
Seleccione Control de acceso (IAM) y Agregar asignación de roles.
Seleccione un rol:
- En Azure Key Vault, seleccione Usuario de cifrado del servicio criptográfico de Key Vault.
- En HSM administrado, seleccione Usuario de cifrado de servicio criptográfico de HSM administrado.
Seleccione identidades administradas, seleccione miembros y, a continuación, seleccione la identidad administrada del servicio de búsqueda. Si está probando localmente, asígnele este rol también.
Seleccione Revisar y asignar.
Espere unos minutos a que la asignación de roles sea operativa.
Paso 4: Cifrar contenido
El cifrado se produce al crear o actualizar un objeto. Puede usar Azure Portal para objetos seleccionados. Para cualquier objeto, use la API REST de Búsqueda o un SDK de Azure. Revise el ejemplo de Python de este artículo para ver cómo se cifra el contenido mediante programación.
Al crear un nuevo objeto en Azure Portal, puede especificar una clave administrada por el cliente predefinida en un almacén de claves. Azure Portal le permite habilitar el cifrado cmK para:
- Índices
- Orígenes de datos
- Indizadores
Los requisitos para usar Azure Portal son que el almacén de claves y la clave deben existir y ha completado los pasos anteriores para el acceso autorizado a la clave.
En Azure Portal, los conjuntos de aptitudes se definen en la vista JSON. Use el código JSON que se muestra en los ejemplos de la API de REST para proporcionar una clave administrada por el cliente en un conjunto de aptitudes.
Inicie sesión en Azure Portal y abra la página del servicio de búsqueda.
En Administración de búsquedas, seleccione Índices, Indexadores o Orígenes de datos.
Agregue un nuevo objeto. En la definición de objeto, seleccione Cifrado administrado por Microsoft.
Seleccione Claves administradas por el cliente y elija su suscripción, almacén, clave y versión.
Paso 5: Probar el cifrado
Para comprobar que el cifrado funciona, revoque la clave de cifrado, consulte el índice (debe ser inutilizable) y, a continuación, restablezca la clave de cifrado.
Use Azure Portal para esta tarea. Asegúrese de que tiene una asignación de rol que concede acceso de lectura a la clave.
En la página Azure Key Vault, seleccione Objetos>Claves.
Seleccione la clave que ha creado y, a continuación, seleccione Eliminar.
En la página Búsqueda de Azure AI, seleccione Buscar administración>Índices.
Seleccione el índice y use el Explorador de búsqueda para ejecutar una consulta. Debería recibir un error.
Vuelva a la página Azure Key Vault Objetos>Claves.
Seleccione Administrar claves eliminadas.
Seleccione la clave y, a continuación, seleccione Recuperar.
Vuelva al índice en Búsqueda de Azure AI y vuelva a ejecutar la consulta. Debería ver los resultados de la búsqueda. Si no ve resultados inmediatos, espere un minuto e inténtelo de nuevo.
Configurar una directiva para aplicar el cumplimiento de CMK
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 dos directivas integradas opcionales relacionadas con CMK. Estas directivas se aplican a los servicios de búsqueda nuevos y existentes.
Efecto | Efecto si está habilitado |
---|---|
AuditIfNotExists | Comprueba el cumplimiento de directivas: los objetos tienen definida una clave administrada por el cliente y es el contenido cifrado. Este efecto se aplica a los servicios existentes con contenido. Se evalúa cada vez que se crea o actualiza un objeto, o según la programación de evaluación. Más información... |
Negar | Comprueba la aplicación de directiva: el servicio de búsqueda tiene SearchEncryptionWithCmk establecido en Enabled . Este efecto solo se aplica a los nuevos servicios, que se deben crear con el cifrado habilitado. Los servicios existentes permanecen operativos, pero no se pueden actualizar a menos que revise el servicio. Ninguna de las herramientas que se usan para aprovisionar servicios expone esta propiedad, por lo que tenga en cuenta que establecer la directiva le limita a configurar mediante programación. |
Asignación de una directiva
En Azure Portal, vaya a una directiva integrada y seleccione Asignar.
Este es un ejemplo de la directiva AuditIfExists en Azure Portal:
Establezca el ámbito de directiva seleccionando la suscripción y el grupo de recursos. Excluya los servicios de búsqueda para los que no se debe aplicar la directiva.
Acepte o modifique los valores predeterminados. Seleccione Revisar y crear, seguido de Crear.
Habilitación de la aplicación de directivas de CMK
Una directiva asignada a un grupo de recursos en tu suscripción entra en vigor de inmediato. Las directivas de auditoría marcan recursos no compatibles, pero las directivas de denegación impiden la creación y actualización de servicios de búsqueda no compatibles. En esta sección se explica cómo crear un servicio de búsqueda compatible o actualizar un servicio para que sea compatible. Para poner objetos en cumplimiento, comience en el paso uno de este artículo.
Creación de un servicio de búsqueda compatible
Para los nuevos servicios de búsqueda, créelos con SearchEncryptionWithCmk establecido en Enabled
.
Ni Azure Portal ni las herramientas de línea de comandos (la CLI de Azure y Azure PowerShell) proporcionan esta propiedad de forma nativa, pero puede usar la API rest de administración para aprovisionar un servicio de búsqueda con una definición de directiva de CMK.
Este ejemplo procede de Administración del servicio Azure AI Search con las API REST, modificadas para incluir la propiedad SearchEncryptionWithCmk .
### Create a search service (provide an existing resource group)
@resource-group = my-rg
@search-service-name = my-search
PUT https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resource-group}}/providers/Microsoft.Search/searchServices/{{search-service-name}}?api-version=2023-11-01 HTTP/1.1
Content-type: application/json
Authorization: Bearer {{token}}
{
"location": "North Central US",
"sku": {
"name": "basic"
},
"properties": {
"replicaCount": 1,
"partitionCount": 1,
"hostingMode": "default",
"encryptionWithCmk": {
"enforcement": "Enabled"
}
}
}
Actualización de un servicio de búsqueda existente
Para los servicios de búsqueda existentes que ahora no son compatibles, rehícelos mediante Services - Update API o el comando az resource update de la CLI de Azure. Aplicar parches a los servicios restaura la habilidad de actualizar propiedades del servicio de búsqueda.
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"
}
}
}
Rotar o actualizar claves de cifrado
Siga estas instrucciones para rotar las claves o migrar de Azure Key Vault al modelo de seguridad de hardware (HSM).
Para la rotación de claves, se recomienda usar las funcionalidades de asignación automática de Azure Key Vault. Si usa la autorización, omita la versión de clave en las definiciones de objeto. Se usa la clave más reciente, en lugar de una versión específica.
Al cambiar una clave o su versión, cualquier objeto que use la clave primero debe actualizarse para usar los nuevos valores antes de eliminar los valores antiguos. De lo contrario, el objeto se vuelve inutilizable porque no se puede descifrar.
Recuerde que las claves se almacenan en caché durante 60 minutos. Recuerde esto al probar y rotar las claves.
Determine la clave que usa un índice o asignación de sinónimos.
Cree una nueva clave en el almacén de claves, pero deje la clave original disponible. En este paso, puede cambiar del almacén de claves a HSM.
Actualice las propiedades de la clave de cifrado en un índice o mapa de sinónimos para usar los nuevos valores. Solo se pueden actualizar los objetos que se crearon originalmente con esta propiedad para usar un valor diferente.
Deshabilite o elimine la clave anterior en la bóveda 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 puede descifrar el contenido, recibirá este mensaje: "Access forbidden. The query key used might have been revoked - please retry."
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.
Utilice tantas bóvedas 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.
Use el mismo inquilino de Azure para que pueda recuperar la clave administrada a través de asignaciones de roles y mediante la conexión a través de un sistema o una identidad administrada por el usuario. Para obtener más información sobre cómo crear un inquilino, consulte Configurar un nuevo inquilino.
Habilite la protección de purga y la eliminación temporal en un 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 deshabilita intencionadamente. La protección de purga no está habilitada de forma predeterminada, pero es necesaria para el cifrado de CMK en Azure AI Search.
Habilite el registro en el almacén de claves para poder supervisar la utilización de las claves.
Habilitar la autorización de claves o seguir procedimientos estrictos durante el giro rutinario de las claves del almacén de claves y de los secretos y el registro de aplicaciones. 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.
Trabajo con contenido cifrado
Con el cifrado CMK, es posible que observe latencia para la indexación y las consultas debido al trabajo adicional de cifrado y 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.
Agregue una configuración de diagnóstico en el almacén de claves que use el área de trabajo para la retención de datos.
Seleccione audit o allLogs para la categoría, asigne un nombre a la configuración de diagnóstico y guárdelo.
Ejemplo de Python de una configuración de clave de cifrado
En esta sección se muestra la representación de Python de un encryptionKey
en una definición de objeto. La misma definición se aplica a índices, orígenes de datos, conjuntos de aptitudes, indexadores y mapas de sinónimos. Para probar este ejemplo en el servicio de búsqueda y el almacén de claves, descargue el cuaderno de azure-search-python-samples.
Instale algunos paquetes.
! pip install python-dotenv
! pip install azure-core
! pip install azure-search-documents==11.5.1
! pip install azure-identity
Cree un índice que tenga una clave de cifrado.
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')
Obtenga la definición de índice para comprobar que existe la configuración de la clave de cifrado.
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}")
Cargue el índice con algunos documentos. Todo el contenido del campo se considera confidencial y se cifra en el disco mediante la clave administrada por el cliente.
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 Palace 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)
Ejecute una consulta para confirmar que el índice está operativo.
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']}")
La salida de la consulta debe generar resultados similares al ejemplo siguiente.
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 Palace 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.
Dado que el contenido cifrado se descifra antes de la actualización de datos o las consultas, no verá ninguna prueba visual del cifrado. Para comprobar que el cifrado funciona, compruebe los registros de recursos.
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: