Configuración de claves administradas por el cliente entre inquilinos para la cuenta de Azure Cosmos DB con Azure Key Vault

SE APLICA A: NoSQL MongoDB Cassandra Gremlin Table

Los datos almacenados en la cuenta de Azure Cosmos DB se cifran de forma automática y sin problemas con claves administradas por el servicio administradas por Microsoft. Sin embargo, puede optar por agregar una segunda capa de cifrado con claves administradas por usted. Estas claves se conocen como claves administradas por el cliente (o CMK). Las claves administradas por el cliente se almacenan en una instancia de Azure Key Vault.

En este artículo, se describe cómo configurar el cifrado con claves administradas por el cliente en el momento en el que se crea una cuenta de Azure Cosmos DB. En este escenario entre inquilinos de ejemplo, la cuenta de Azure Cosmos DB reside en un inquilino administrado por un proveedor de software independiente (ISV) al que se hace referencia como el proveedor de servicios. La clave usada para el cifrado de la cuenta de Azure Cosmos DB reside en un almacén de claves de otro inquilino que es administrado por el cliente.

Información sobre las claves administradas por el cliente entre inquilinos

Muchos proveedores de servicios que crean ofertas de software como servicio (SaaS) en Azure quieren ofrecer a sus clientes la opción de administrar sus propias claves de cifrado. Las claves administradas por el cliente permiten a un proveedor de servicios cifrar los datos del cliente mediante una clave de cifrado administrada por el cliente del proveedor de servicios y a la que no puede acceder el proveedor de servicios. En Azure, el cliente del proveedor de servicios puede usar Azure Key Vault para administrar sus claves de cifrado en su propio inquilino y suscripción de Microsoft Entra.

Los servicios y recursos de la plataforma Azure que pertenecen al proveedor de servicios y que residen en el inquilino del proveedor de servicios requieren acceso a la clave del inquilino del cliente para realizar las operaciones de cifrado y descifrado.

En la imagen siguiente se muestra un cifrado de datos en reposo con identidad federada en un flujo de trabajo de CMK entre inquilinos que abarca un proveedor de servicios y su cliente.

Screenshot showing a cross-tenant CMK with a federated identity.

En el ejemplo anterior, hay dos inquilinos de Microsoft Entra: el inquilino de un proveedor de servicios independiente (Inquilino 1) y el inquilino de un cliente (Inquilino 2). Inquilino 1 hospeda los servicios de la plataforma Azure y Inquilino 2 hospeda el almacén de claves del cliente.

El proveedor de servicios crea un registro de aplicación multiinquilino en el Inquilino 1. El proveedor de servicios configura una credencial de identidad federada en esta aplicación mediante una identidad administrada asignada por el usuario. A continuación, el nombre y el identificador de la aplicación se comparten con el cliente.

Un usuario con los permisos adecuados instala la aplicación del proveedor de servicios en el inquilino del cliente Inquilino 2. A continuación, un usuario concede a la entidad de servicio asociada a la aplicación instalada acceso al almacén de claves del cliente. El cliente también almacena la clave de cifrado, o la clave administrada por el cliente, en el almacén de claves. El cliente comparte la ubicación de la clave (la dirección URL de la clave) con el proveedor de servicios.

El proveedor de servicios ahora tiene lo siguiente:

  • Un identificador de aplicación de una aplicación multiinquilino instalada en el inquilino del cliente, a la que se le ha concedido acceso a la clave administrada por el cliente.
  • Una identidad administrada configurada como credencial en la aplicación multiinquilino.
  • La ubicación de la clave en el almacén de claves del cliente.

Con estos tres parámetros, el proveedor de servicios aprovisiona recursos de Azure en Inquilino 1 que se pueden cifrar con la clave administrada por el cliente en Inquilino 2.

Vamos a dividir la solución de un extremo a otro anterior en tres fases:

  1. El proveedor de servicios configura identidades.
  2. El cliente concede a la aplicación multiinquilino del proveedor de servicios acceso a una clave de cifrado en Azure Key Vault.
  3. El proveedor de servicios cifra los datos de un recurso de Azure mediante la CMK.

Las operaciones de la fase 1 serán una configuración única para la mayoría de las aplicaciones del proveedor de servicios. Las operaciones de las fases 2 y 3 se repetirán para cada cliente.

Fase 1: El proveedor de servicios configura una aplicación de Microsoft Entra

Paso Descripción Rol mínimo en RBAC de Azure Rol mínimo en RBAC de Microsoft Entra
1. Cree un nuevo registro de aplicación multiinquilino de Microsoft Entra o comience con un registro de aplicación existente. Anote el id. de la aplicación (id. de cliente) del registro de la aplicación mediante Azure Portal, Microsoft Graph API, Azure PowerShell o la CLI de Azure. None Desarrollador de aplicaciones
2. Cree una identidad administrada asignada por el usuario (que se usará como credencial de identidad federada).
Azure Portal / CLI de Azure / Azure PowerShell/ Plantillas de Azure Resource Manager
Colaborador de identidad administrada Ninguno
3. Configure la identidad administrada asignada por el usuario como credencial de identidad federada en la aplicación para que pueda suplantar la identidad de la aplicación.
Referencia de Graph API / Azure Portal/ CLI de Azure/ Azure PowerShell
None Propietario de la aplicación
4. Comparta el nombre y el id. de la aplicación con el cliente para que pueda instalar y autorizar la aplicación. None None

Consideraciones para proveedores de servicio

  • No se recomiendan las plantillas de Azure Resource Manager (ARM) para crear aplicaciones de Microsoft Entra.
  • Se puede usar la misma aplicación multiinquilino para acceder a las claves en diversos inquilinos, como Inquilino 2, Inquilino 3, Inquilino 4, etc. En cada inquilino, se crea una instancia independiente de la aplicación que tiene el mismo id. de aplicación, pero un id. de objeto diferente. Por lo tanto, cada instancia de esta aplicación se autoriza de forma independiente. Tenga en cuenta cómo se usa el objeto de aplicación para esta característica a fin de crear particiones de la aplicación en todos los clientes.
  • En raras ocasiones, un proveedor de servicios puede utilizar un único objeto de aplicación por cliente, pero esto requiere importantes costos de mantenimiento para administrar las aplicaciones a gran escala en todos los clientes.
  • En el inquilino del proveedor de servicios, no es posible automatizar la comprobación del publicador.

Fase 2: el cliente autoriza el acceso al almacén de claves

Paso Descripción Roles de RBAC de Azure con privilegios mínimos Roles de Microsoft Entra con privilegios mínimos
1.
  • Recomendado: envíe al usuario para iniciar sesión en la aplicación. Si el usuario puede iniciar sesión, existe una entidad de servicio para la aplicación en su inquilino.
  • Use Microsoft Graph, Microsoft Graph PowerShell, Azure PowerShell o la CLI de Azure para crear la entidad de servicio.
  • Construya una dirección URL de consentimiento del administrador y conceda consentimiento para todo el inquilino para crear la entidad de servicio mediante el id. de aplicación.
  • None Usuarios con permisos para instalar aplicaciones
    2. Cree una instancia de Azure Key Vault y una clave usada como clave administrada por el cliente. Se debe asignar a un usuario el rol Colaborador de Key Vault para crear el almacén de claves

    Se debe asignar a un usuario el rol Agente criptográfico de Key Vault para agregar una clave al almacén de claves.
    None
    3. Conceda a la identidad de la aplicación consentida acceso al almacén de claves de Azure mediante la asignación del rol Usuario del cifrado del servicio de cifrado de Key Vault. Para asignar el rol Usuario del cifrado del servicio de cifrado de Key Vault a la aplicación, debe tener asignado el rol Administrador de acceso de usuario. None
    4. Copie la dirección URL del almacén de claves y el nombre de la clave en la configuración de claves administradas por el cliente de la oferta de SaaS. None None

    Nota

    Para autorizar el acceso al HSM administrado para el cifrado mediante CMK, consulte el ejemplo de la Cuenta de almacenamiento aquí. Para más información sobre cómo administrar claves con HSM administrado, consulte Administración de un HSM administrado mediante la CLI de Azure.

    Consideraciones para clientes de proveedores de servicios

    • En el inquilino del cliente Inquilino 2 un administrador puede establecer directivas para impedir que los usuarios que no sean administradores instalen aplicaciones. Estas directivas pueden impedir que los usuarios que no sean administradores creen entidades de servicio. Si se configura una directiva de este tipo, los usuarios con permisos para crear entidades de servicio deberán participar.
    • El acceso a Azure Key Vault se puede autorizar mediante directivas de acceso o RBAC de Azure. Al conceder acceso a un almacén de claves, asegúrese de usar el mecanismo activo para el almacén de claves.
    • Un registro de aplicación de Microsoft Entra tiene un id. de aplicación (id. de cliente). Cuando la aplicación se instala en el inquilino, se crea una entidad de servicio. La entidad de servicio comparte el mismo id. de aplicación que el registro de la aplicación, pero genera su propio id. de objeto. Al autorizar a la aplicación el acceso a los recursos, es posible que tenga que usar la entidad de servicio Name o la propiedad ObjectID.

    Fase 3: el proveedor de servicios cifra los datos de un recurso de Azure mediante la clave administrada por el cliente

    Una vez completadas las fases 1 y 2, el proveedor de servicios puede configurar el cifrado en el recurso de Azure con la clave y el almacén de claves del inquilino del cliente y el recurso de Azure del inquilino del ISV. El proveedor de servicios puede configurar claves administradas por el cliente entre inquilinos con las herramientas del cliente compatibles con ese recurso de Azure, con una plantilla de ARM o con la API REST.

    Configuración de claves administradas por el cliente entre inquilinos

    En esta sección se describe cómo configurar una clave administrada por el cliente (CMK) entre inquilinos y cifrar los datos de los clientes. Obtendrá información sobre cómo cifrar los datos de los clientes en un recurso de Tenant1 mediante una CMK almacenada en un almacén de claves en Tenant2. Puede usar Azure Portal, Azure PowerShell o la CLI de Azure.

    Inicie sesión en Azure Portal y siga los pasos siguientes.

    El proveedor de servicios configura identidades.

    El proveedor de servicios realiza los pasos siguientes en el inquilino Tenant1 del proveedor de servicios.

    El proveedor de servicios crea un registro de aplicaciones multiinquilino

    Puede crear un nuevo registro de aplicación multiinquilino de Microsoft Entra o comenzar con un registro de aplicación multiinquilino existente. Si comienza con un registro de aplicación existente, anote el id. de aplicación (id. de cliente) de la aplicación.

    Para crear un nuevo registro, siga estos pasos:

    1. Busque Microsoft Entra ID en el cuadro de búsqueda. Busque y seleccione la extensión Microsoft Entra ID.

    2. Seleccione Administrar > Registros de aplicaciones en el panel izquierdo.

    3. Seleccione + Nuevo registro.

    4. Proporcione el nombre del registro de aplicación y seleccione Cuenta en cualquier directorio organizativo (cualquier directorio de Microsoft Entra: multiinquilino).

    5. Seleccione Registrar.

    6. Anote el valor de applicationId/ClientId de la aplicación.

      Screen shot showing how to create a new multi-tenant application registration.

    El proveedor de servicios crea una identidad administrada asignada por el usuario.

    Cree una identidad administrada asignada por el usuario que se usará como credencial de identidad federada.

    1. Busque Identidades administradas en el cuadro de búsqueda. Busque y seleccione la extensión Identidades administradas.

    2. Seleccione + Create (+ Crear).

    3. Proporcione el grupo de recursos, la región y el nombre de la identidad administrada.

    4. Seleccione Revisar + crear.

    5. Si la implementación se realiza correctamente, anote el valor de resourceId de Azure de la identidad administrada asignada por el usuario, que está disponible en Propiedades. Por ejemplo:

      /subscriptions/tttttttt-0000-tttt-0000-tttt0000tttt/resourcegroups/XTCMKDemo/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ConsotoCMKDemoUA

      Screen shot showing how to create a resource group and a user-assigned managed identity.

    El proveedor de servicios configura la identidad administrada asignada por el usuario como una credencial federada en la aplicación.

    Configure una identidad administrada asignada por el usuario como credencial de identidad federada en la aplicación para que pueda suplantar la identidad de la aplicación.

    1. Vaya a Microsoft Entra ID > Registros de aplicaciones > su aplicación.

    2. Seleccione Certificados y secretos.

    3. Seleccione Credenciales federadas.

      Screen shot showing how to navigate to Certificate and secrets.

    4. Seleccione + Agregar credencial.

    5. En Escenario de credencial federada, seleccione Claves administradas por el cliente.

    6. Haga clic en Seleccionar una identidad administrada. En el panel, seleccione la suscripción. En Identidad administrada, seleccione Identidad administrada asignada por el usuario. En el cuadro Seleccionar, busque la identidad administrada que creó anteriormente y haga clic en Seleccionar en la parte inferior del panel.

      Screen shot showing how to select a managed identity.

    7. En Detalles de la credencial, proporcione un nombre y una descripción opcional para la credencial y seleccione Agregar.

      Screen shot showing how to add a credential.

    El proveedor de servicios comparte el id. de aplicación con el cliente.

    Busque el identificador (identificador de cliente) de la aplicación multiinquilino y compártalo con el cliente.

    El cliente concede a la aplicación del proveedor de servicios acceso a la clave en el almacén de claves.

    El cliente realiza los pasos siguientes en el inquilino Tenant2 del cliente. El cliente puede usar Azure Portal, Azure PowerShell o la CLI de Azure.

    El usuario que ejecuta los pasos debe ser un administrador con un rol con privilegios, como Administrador de aplicaciones, Administrador de aplicaciones en la nube o Administrador global.

    Inicie sesión en Azure Portal y siga los pasos siguientes.

    El cliente instala la aplicación del proveedor de servicios en el inquilino del cliente

    Para instalar la aplicación registrada del proveedor de servicios en el inquilino del cliente, cree una entidad de servicio con el id. de aplicación de la aplicación registrada. Puede crear la entidad de servicio de cualquiera de las maneras siguientes:

    El cliente crea un almacén de claves

    Para crear el almacén de claves, a la cuenta del usuario se le debe asignar el rol Colaborador de Key Vault u otro rol que permita la creación de un almacén de claves.

    1. En el menú de Azure Portal o en la página principal, seleccione + Crear un recurso. En el cuadro de búsqueda, escriba Almacenes de claves. En la lista de resultados, seleccione Almacenes de claves. En la página Almacenes de claves, seleccione Crear.

    2. En la pestaña Aspectos básicos, elija una suscripción. En Grupo de recursos, seleccione Crear nuevo y escriba un nombre para el grupo de recursos.

    3. Introduzca un nombre único para el almacén de claves.

    4. Seleccione una región y un plan de tarifa.

    5. Habilite la protección de purgas para el nuevo almacén de claves.

    6. En la pestaña Directiva de acceso, seleccione Control de acceso basado en roles de Azure para Modelo de permisos.

    7. Seleccione Revisar y crear y, a continuación, Crear.

      Screen shot showing how to create a key vault.

    Anote el nombre y el identificador URI del almacén de claves. Las aplicaciones que acceden al almacén de claves deben usar este identificador URI.

    Para obtener más información, consulte Inicio rápido: Creación de un almacén de claves de Azure Key Vault con Azure Portal.

    El cliente asigna el rol de Agente criptográfico de Key Vault a una cuenta de usuario.

    Este paso garantiza que pueda crear claves de cifrado.

    1. Vaya al almacén de claves y seleccione Control de acceso (IAM) en el panel izquierdo.
    2. En Conceder acceso a este recurso seleccione Agregar asignación de rol.
    3. Busque y seleccione Agente criptográfico de Key Vault.
    4. En Miembros, seleccione Usuario, grupo o entidad de servicio.
    5. Seleccione Miembros y busque su cuenta de usuario.
    6. Seleccione Revisar y asignar.

    El cliente crea una clave de cifrado

    Para crear la clave de cifrado, a la cuenta del usuario se le debe asignar el rol Agente criptográfico de Key Vault u otro rol que permita la creación de una clave.

    1. En la página de propiedades de Key Vault, seleccione Claves.
    2. Seleccione Generar o importar.
    3. En la pantalla Crear una clave, especifique un nombre para la clave. Deje las restantes opciones con sus valores predeterminados.
    4. Seleccione Crear.
    5. Copie el URI de la clave.

    El cliente concede a la aplicación del proveedor de servicios acceso al almacén de claves.

    Asigne el rol de RBAC de Azure Usuario del cifrado del servicio de cifrado de Key Vault a la aplicación registrada del proveedor de servicios para que pueda acceder al almacén de claves.

    1. Vaya al almacén de claves y seleccione Control de acceso (IAM) en el panel izquierdo.
    2. En Conceder acceso a este recurso seleccione Agregar asignación de rol.
    3. Busque y seleccione Usuario del cifrado del servicio de cifrado de Key Vault.
    4. En Miembros, seleccione Usuario, grupo o entidad de servicio.
    5. Seleccione Miembros y busque el nombre de la aplicación que instaló desde el proveedor de servicios.
    6. Seleccione Revisar y asignar.

    Ahora puede configurar claves administradas por el cliente con el URI y la clave del almacén de claves.

    Creación de una nueva cuenta de Azure Cosmos DB cifrada con una clave de otro inquilino

    Hasta este punto, ha configurado la aplicación multiinquilino en el inquilino del proveedor de servicios. También ha instalado la aplicación en el inquilino del cliente y ha configurado el almacén de claves y la clave en el inquilino del cliente. A continuación, puede crear una cuenta de Azure Cosmos DB en el inquilino del proveedor de servicios y configurar las claves administradas por el cliente con la clave del inquilino del cliente.

    Al crear una cuenta de Azure Cosmos DB con claves administradas por el cliente, debemos asegurarnos de que esta tenga acceso a las claves que ha utilizado el cliente. En escenarios de inquilino único, asigne acceso directo al almacén de claves a la entidad de seguridad de Azure Cosmos DB o use una identidad administrada específica. En un escenario entre inquilinos, ya no podemos depender del acceso directo al almacén de claves porque está en otro inquilino administrado por el cliente. Esta restricción es la razón por la que en las secciones anteriores hemos creado una aplicación entre inquilinos y registrado una identidad administrada dentro de la aplicación para concederle acceso al almacén de claves del cliente. Esta identidad administrada, junto con el identificador de aplicación entre inquilinos, es lo que usaremos al crear la cuenta de Azure Cosmos DB con CMK entre inquilinos. Para más información, consulte la sección Fase 3: el proveedor de servicios cifra los datos de un recurso de Azure mediante la clave administrada por el cliente de este artículo.

    Cada vez que haya disponible una nueva versión de la clave en el almacén de claves, se actualizará automáticamente en la cuenta de Azure Cosmos DB.

    Uso de plantillas JSON de Azure Resource Manager

    Implemente una plantilla de ARM con los siguientes parámetros específicos:

    Nota

    Si va a volver a crear este ejemplo en una de las plantillas de Azure Resource Manager, use el valor 2022-05-15 para apiVersion.

    Parámetro Descripción Valor de ejemplo
    keyVaultKeyUri Identificador de la clave administrada por el cliente que reside en el almacén de claves del proveedor de servicios. https://my-vault.vault.azure.com/keys/my-key
    identity Objeto que especifica que la identidad administrada se debe asignar a la cuenta de Azure Cosmos DB. "identity":{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity":{}}}
    defaultIdentity Combinación del identificador de recurso de la identidad administrada y el identificador de aplicación de la aplicación multiinquilino de Microsoft Entra. UserAssignedIdentity=/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity&FederatedClientId=11111111-1111-1111-1111-111111111111

    Este es un ejemplo de un segmento de plantilla con los tres parámetros configurados:

    {
      "kind": "GlobalDocumentDB",
      "location": "East US 2",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity": {}
        }
      },
      "properties": {
        "locations": [
          {
            "locationName": "East US 2",
            "failoverPriority": 0,
            "isZoneRedundant": false
          }
        ],
        "databaseAccountOfferType": "Standard",
        "keyVaultKeyUri": "https://my-vault.vault.azure.com/keys/my-key",
        "defaultIdentity": "UserAssignedIdentity=/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity&FederatedClientId=11111111-1111-1111-1111-111111111111"
      }
    }
    

    Importante

    Esta característica aún no se admite en Azure PowerShell, la CLI de Azure ni Azure Portal.

    No se pueden configurar claves administradas por el cliente con una versión específica de la versión de clave al crear una nueva cuenta de Azure Cosmos DB. La propia clave se debe pasar sin versiones y sin barras diagonales inversas finales.

    Para revocar o deshabilitar las claves administradas por el cliente, consulte Configuración de claves administradas por el cliente para la cuenta de Azure Cosmos con Azure Key Vault.

    Consulte también