Capella es consciente de lo importante que es la seguridad de los datos para su empresa, especialmente cuando utiliza servicios en la nube. Por eso nos complace anunciar una nueva función que le permite tomar el control de la protección de sus datos: Claves de cifrado gestionadas por el cliente (CMEK).
¿Qué es la CMEK?
CMEK es una conocida práctica de seguridad en la nube que permite utilizar claves de cifrado autogestionadas para cifrar y descifrar datos en reposo. En esta práctica, la clave de cifrado se crea y reside en el entorno propiedad del cliente y es utilizada por el proveedor externo para cifrar/descifrar los datos del cliente que residen con el proveedor. El principal objetivo de esta práctica es permitir a los clientes gestionar completamente los aspectos de seguridad, como el algoritmo de cifrado y las políticas de rotación de claves.
¿Quién debe utilizar CMEK?
Un sistema de claves de cifrado gestionado por el cliente es ideal para empresas que:
-
- Manejar datos altamente sensibles sujetos a un estricto cumplimiento.
- Necesidad de cumplir normas específicas de seguridad de datos.
Primeros pasos con CMEK en Capella
La capacidad de asociar claves de cifrado gestionadas por el cliente se admite a través de la API de gestión de Capella. Hoy, esta función está disponible para todos los clústeres de AWS y GCP en Capella, donde los clientes pueden asociar el CMEK a un clúster nuevo o a uno ya existente.
Capella no tiene conocimiento del contenido de la clave y la utiliza simplemente para cifrar y descifrar datos en reposo.
Cuando se asocia una CMEK a un clúster Capella existente, el clúster se vuelve a desplegar y los volúmenes persistentes se cifran con esta clave. Esta operación también provoca un reequilibrio de intercambio en línea de los nodos para permitir que Capella cifre los datos de forma fiable.
Este blog es un tutorial en el que crearemos una nueva clave de cifrado gestionada por el cliente y la asociaremos a un clúster de Capella. A lo largo del camino, utilizaremos las API de gestión V4 para crear, asociar y rotar la clave.
Requisitos previos
Creación de una clave en el servicio de gestión de claves nativo de la nube (KMS)
En primer lugar, crearemos una nueva clave en nuestro KMS nativo de la nube. Para ello, asegúrese de que dispone de los permisos adecuados para acceder al KMS en AWS o GCP mediante programación o a través de la consola de la interfaz de usuario.
Una vez en la consola de KMS en la nube, al configurar la clave, asegúrese de que ésta sea de tipo Simétrico. Así se creará una clave única que podrá utilizarse para cifrar y descifrar.
El segundo paso importante es definir el uso de las claves para permitir Cifrar y descifrar operaciones. Esto garantizará que la clave pueda utilizarse específicamente para cifrar y descifrar datos en reposo.
AWS:
GCP:
Regionalidad de la clave
Al configurar la clave en AWS o GCP, asegúrese de que reside en la misma región que el clúster de Capella. Ambos proveedores en la nube nos permiten seleccionar la regionalidad de la clave, que puede ser Único o Multirregional.
En AWS, si la clave es multirregiónEs importante tener al menos una réplica de clave en la misma región que el clúster de Capella. A continuación, debemos asociar el ARN (Amazon Resource Name) de esta réplica de clave al clúster Capella.
En GCP, un Global El llavero garantizará la disponibilidad de la llave en cualquier ubicación de GCP. Compruebe Ubicaciones admitidas por GCP para Cloud KMS y asegúrese de que la ubicación del clúster de Capella coincide con las ubicaciones admitidas para KMS.
Configuración de la API de gestión de Capella V4
Para los siguientes pasos de este tutorial, necesitaremos acceso para ejecutar V4 Management APIs en Capella. Siga este blog para iniciarse rápidamente en las API de gestión V4.
Paso 1: Hacer la llave accesible a Capella
Ahora que tenemos una CMEK creada con éxito en nuestra cuenta de nube autogestionada, tenemos que asegurarnos de que Capella puede utilizar esta clave para cifrar/descifrar datos en reposo.
Para proporcionar este acceso, primero debemos capturar el ID de cuenta de nube correspondiente de Capella, que es único para cada organización desplegada en Capella.
Ejecute esta API V4 para obtener la información:
1 |
rizo --solicitar GET \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/cloudAccounts --header 'Autorización: Bearer ' |
Un ejemplo de respuesta será algo parecido a esto
1 2 3 4 5 |
{ "aws-capella-account": "1234567890", "azure-capella-suscripción": "cb-1234567890abcdef", "proyecto gcp-capella": "cb-1234567890abcdef" } |
Copie el ID de cuenta de nube correspondiente. Por ejemplo: si su CMEK se encuentra en AWS, copie el ID de cuenta de AWS de Capella. Esto también significa que debe crear un CMEK en el mismo proveedor de nube que el proveedor de nube de su clúster de Capella.
Actualización de la política de acceso a claves
En AWS, añada acceso a Capella actualizando la política de acceso del CMEK de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "Sid": "Permitir el uso de la llave", "Efecto": "Permitir", "Principal": { "AWS": "arn:aws:iam:::root" }, "Acción": [ "kms:DescribeKey", "kms:GenerateDataKeyWithoutPlainText", "kms:Descifrar", "kms:ReEncrypt*" ], "Recurso": "*" }, { "Sid": "Permitir adjuntar recursos persistentes", "Efecto": "Permitir", "Principal": { "AWS": "arn:aws:iam:::root" }, "Acción": "kms:CrearSubvención", "Recurso": "*", "Condición": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } |
Sustituir <capella-aws-account-id> con el valor de aws-capella-account de la respuesta de la API.
Para GCP, basta con conceder Cifrador/descifrador de criptomonedas KMS en la nube permisos a la cuenta de servicio de Capella: rc-cluster-admin@.iam.gserviceaccount.com.
Paso 2: Informar a Capella sobre la clave
En el paso 1, nos aseguramos de que Capella podía utilizar la clave para cifrar/descifrar datos en reposo. En este paso, tenemos que informar a Capella de que dicha CMEK existe y que puede ser utilizada por los clústeres.
Ahora añadiremos los metadatos CMEK a nuestra organización Capella:
1 2 3 4 5 6 7 8 9 10 11 |
rizo --solicitar POST \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/cmek \ --cabecera 'Autorización: Portador ' \ --cabecera Content-Type: application/json' \ --datos '{ "Nombre": "Clave de prueba", "Descripción": "Descripción de la Clave", "config": { "arn": "arn:aws:kms:us-east-1::key/". } }' |
Recuerde, aquí, el ARN de configuración de la clave es el ARN de la clave, como se ve en la cuenta AWS propiedad del cliente:
Para GCP, la carga útil de la API aceptará el valor resourceName de la clave KMS.
1 2 3 4 5 6 7 8 9 10 |
rizo --solicitar POST \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/cmek \ --cabecera 'Autorización: Portador ' \ --cabecera Content-Type: application/json' \ --datos '{ "Nombre": "Clave de prueba", "Descripción": "Descripción de la Clave", "config": { "resourceName": "projects//locations/global/keyRings//cryptoKeys/" }}' |
Esta API responderá con un ID de CMEK. Tenga en cuenta este ID, ya que se utilizará en las siguientes llamadas a la API.
Una vez añadida la clave a Capella, podemos realizar fácilmente operaciones de lista, lectura y eliminación de claves utilizando las API V4 en esta clave. Consulte esta especificación API para obtener más detalles.
Tenga en cuenta que Capella sólo permitirá la eliminación de la clave si no hay ningún clúster asociado activamente a la clave.
Paso 3: Asociar la clave de cifrado a un clúster
A continuación, queremos utilizar este CMEK para cifrar/descifrar los datos en uno de nuestros clústeres de Capella. Para ello, anota el ID de proyecto y el ID de clúster del clúster concreto desde la interfaz de usuario de Capella.
Utilice esta API para asociar el CMEK a dicho clúster. La dirección cmekId es el ID recibido en el paso 2 cuando se añadieron los metadatos CMEK a Capella:
1 2 3 |
rizo --solicitar POST \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/projects/{projectId}/clusters/{clusterId}/cmek/{cmekId}/associate \ --cabecera 'Autorización: Portador ' |
Una vez invocada esta API, el clúster se redistribuirá mientras Capella mueve todos los datos a nuevos volúmenes persistentes. Estos volúmenes se crearán con el CMEK proporcionado. Esta operación dará lugar a un reequilibrio de intercambio en todos los nodos del clúster, sin tiempo de inactividad. La actividad suele durar entre 5 y 10 minutos, dependiendo de los datos y del tamaño del clúster.
Por último, veremos que el clúster vuelve a un estado saludable y el CMEK asociado al clúster. Podemos encontrar esta información haciendo un API GET de detalles de clúster llamar.
Para desasociar la clave del clúster, basta con ejecutar esta API:
1 2 3 |
rizo --solicitar POST \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/projects/{projectId}/clusters/{clusterId}/cmek/{cmekId}/unassociate \ --cabecera 'Autorización: Portador ' |
Esto redistribuirá el clúster, eliminará la clave y utilizará una nueva clave de cifrado totalmente gestionada por Capella para cifrar los datos en reposo. Esta actividad también da lugar a un reequilibrio de intercambio y tarda unos minutos.
Asociar la clave a un nuevo clúster
La clave puede asociarse a un nuevo cluster ejecutando el comando crear clúster API y pasando el CMEK ID en la carga útil de la solicitud de la siguiente manera:
Paso 4: Rotación de la clave de cifrado
Un aspecto importante para mejorar la seguridad de los datos es la rotación programada de la clave de cifrado. Capella le permite informar sobre la rotación de claves, pero no puede rotar la clave en sí. El periodo de rotación puede decidirse en función de sus políticas de gobernanza de la seguridad.
Para ello, cree un nuevo CMEK en su cuenta de KMS nativo de la nube. Invoca la siguiente API para informar a Capella de que actualice el ARN clave o el nombre de recurso clave para el mismo ID de CMEK que está asociado al clúster o clústeres de Capella.
1 2 3 4 5 6 7 8 9 |
rizo --solicitar PUT \ http://cloudapi.cloud.couchbase.com/v4/organizations/{organizationId}/cmek/{cmekId} \ --cabecera 'Autorización: Portador ' \ --cabecera Content-Type: application/json' \ --datos '{ "config": { "arn": "arn:aws:kms:us-east-1::key/". } }' |
Aunque AWS y GCP nos permiten proporcionar una política de rotación para el mismo recurso de clave, debido al acceso restringido, Capella no puede detectar si la clave se ha rotado automáticamente en su(s) cuenta(s) en la nube. Por lo tanto, la API de rotación de claves anterior sólo aceptará un nombre de recurso de clave diferente del nombre de recurso de la clave original.
Una vez invocada esta API, Capella detectará automáticamente todos los clústeres que utilicen la clave con dicho ID de CMEK y realizará un redespliegue para rotar el CMEK asociado. Capella eliminará el recurso de clave antiguo y asociará el nuevo recurso de clave a los volúmenes persistentes del clúster. Esta operación también dará lugar a un reequilibrio de intercambio de los datos en todos los nodos del clúster o clústeres, de nuevo sin tiempo de inactividad.
Por último, verás que los clusters vuelven a estar en buen estado y que el nuevo recurso clave está asociado a dicho ID de CMEK.
Conclusión
Así es como puedes tomar el control de la seguridad de tus datos utilizando Claves de Encriptación Administradas por el Cliente para todos tus clusters Couchbase en Capella.
Recursos y próximos pasos
Consulte estos enlaces sobre la referencia de la API de gestión V4 y la documentación detallada para utilizar las claves de cifrado gestionadas por el cliente:
Si tiene alguna pregunta o comentario, déjelo a continuación. En Foros de Couchbase o Couchbase Discord son otro buen lugar para plantear preguntas.