{"id":16042,"date":"2024-07-24T13:54:13","date_gmt":"2024-07-24T20:54:13","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=16042"},"modified":"2024-07-30T11:05:08","modified_gmt":"2024-07-30T18:05:08","slug":"privacy-requirements-without-the-headache","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/privacy-requirements-without-the-headache\/","title":{"rendered":"Requisitos de privacidad sin quebraderos de cabeza"},"content":{"rendered":"<p>Cualquier aplicaci\u00f3n web moderna que interact\u00fae con usuarios de distintas localidades debe hacer frente a distintos requisitos de privacidad y directrices de consentimiento de datos de los usuarios. Esto puede resultar abrumador para cualquier equipo de ingenieros, tanto si se trata de un equipo de cincuenta personas como de uno solo.<\/p>\n<p>\u00bfC\u00f3mo simplificar el proceso para eliminar las complicaciones y reducir la probabilidad de incumplimiento?<\/p>\n<p>En esta gu\u00eda, recorreremos una implementaci\u00f3n que aprovecha los servicios de AWS que trabajan en conjunto con Couchbase para desinfectar los datos antes de que lleguen a un almac\u00e9n de datos. Esta implementaci\u00f3n simplificada se puede utilizar en cualquier contexto y se puede ampliar para adaptarla al caso de uso que est\u00e9 creando.<\/p>\n<p><i>tl;dr \u00bfTe interesa ver s\u00f3lo el c\u00f3digo junto con un L\u00c9AME que contiene instrucciones de despliegue? Encuentra todo lo que necesitas en <\/i><a href=\"https:\/\/github.com\/hummusonrails\/anonymize-data-aws-couchbase-example\"><i>GitHub<\/i><\/a><i>.<\/i><\/p>\n<h2>Visi\u00f3n general<\/h2>\n<h3>Ejemplo<\/h3>\n<p>Imagine una peque\u00f1a plataforma de comercio electr\u00f3nico que vende artesan\u00eda \u00fanica hecha a mano. Este sitio funciona con un modelo de compra \u00fanica, lo que significa que los usuarios no tienen que crear cuentas ni iniciar sesi\u00f3n. Los compradores simplemente navegan por el cat\u00e1logo, seleccionan los art\u00edculos que desean comprar y pasan por caja. Durante el proceso de compra, proporcionan informaci\u00f3n esencial como nombre completo, direcci\u00f3n postal, direcci\u00f3n de facturaci\u00f3n, informaci\u00f3n de pago, n\u00famero de tel\u00e9fono y direcci\u00f3n de correo electr\u00f3nico. Esta informaci\u00f3n personal es necesaria para completar la compra y garantizar que el art\u00edculo se env\u00eda a la direcci\u00f3n correcta.<\/p>\n<p>Una vez realizado el pedido, los datos viajan a trav\u00e9s de varios microservicios. El servicio de procesamiento de pedidos valida los detalles y comprueba el inventario, el servicio de pago gestiona de forma segura la informaci\u00f3n de facturaci\u00f3n para procesar las transacciones y el servicio de env\u00edo utiliza la direcci\u00f3n postal facilitada para organizar la entrega.<\/p>\n<p>El sitio est\u00e1 dise\u00f1ado para ofrecer a los usuarios una experiencia de compra fluida y sencilla. No hay cuentas. No es necesario pasar por un largo proceso de registro. Basta con elegir el art\u00edculo que se quiere comprar, realizar el pago junto con la informaci\u00f3n de env\u00edo y listo. Sin embargo, mientras que el cliente ha tenido una experiencia de compra sin fricciones, sus datos personales no pueden tener la misma experiencia sin fricciones en su aplicaci\u00f3n. Para mantener la privacidad y cumplir la normativa, esta IIP debe ser desinfectada antes de ser almacenada en la base de datos del historial de compras a largo plazo.<\/p>\n<p>Aunque este escenario pueda parecer \u00fanico, en realidad es una situaci\u00f3n que puede darse en nuestras aplicaciones todo el tiempo. Toda aplicaci\u00f3n que recopile cualquier aspecto de la informaci\u00f3n de un usuario debe garantizar un consentimiento riguroso y cumplir las leyes y normativas de cada localidad en la que opere en todo el mundo. Esto puede suponer un enorme reto, y conlleva graves ramificaciones si no se hace correctamente.<\/p>\n<h3>Flujo de trabajo de la soluci\u00f3n<\/h3>\n<p>Para gestionar eficazmente los requisitos de privacidad de los datos en tiempo real, tendremos que aprovechar las capacidades de datos en tiempo real de AWS y Couchbase para transformar los datos en cuanto se crean. Es un reto legal almacenar datos privados incluso durante un momento en una base de datos de acuerdo con la normativa GDPR. Como tal, no solo es una buena pr\u00e1ctica de datos a\u00f1adir los datos solo despu\u00e9s de que se hayan desinfectado, sino que incluso puede ser un requisito legal.<\/p>\n<p>La soluci\u00f3n que estamos creando aprovechar\u00e1 AWS Simple Queue Service (SQS), Elastic Container Registry (ECR) y una funci\u00f3n Lambda que trabaja en asociaci\u00f3n con Couchbase Capella, la base de datos como servicio (DBaaS) totalmente administrada. Este flujo de trabajo se puede implementar con cualquier remitente de mensajes al servicio de cola, que iniciar\u00e1 el proceso de saneamiento de datos. En otras palabras, es plug and play.<\/p>\n<p>El siguiente flujo de trabajo demuestra visualmente c\u00f3mo funciona la soluci\u00f3n.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image1-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-16043\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image1-3-1024x383.png\" alt=\"\" width=\"900\" height=\"337\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3-1024x383.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3-300x112.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3-768x287.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3-1536x574.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3-1320x493.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image1-3.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p>En primer lugar, cualquier emisor de mensajes env\u00eda datos al servicio de cola. Esto activa la funci\u00f3n Lambda con el mensaje. La funci\u00f3n Lambda procesa y transforma los datos eliminando toda la IIP del mensaje. Finalmente, los datos desinfectados se env\u00edan a Couchbase para ser a\u00f1adidos de forma segura al almac\u00e9n de datos.<\/p>\n<p>Ahora que entendemos el flujo de trabajo, \u00a1construy\u00e1moslo!<\/p>\n<h2>Aplicaci\u00f3n<\/h2>\n<h3>Configuraci\u00f3n de Couchbase Capella<\/h3>\n<p>Registrarse y probar Couchbase Capella es gratuito y, si a\u00fan no lo ha hecho, puede hacerlo accediendo a <a href=\"https:\/\/cloud.couchbase.com\/\">nube.couchbase.com<\/a> y creando una cuenta con tus credenciales de GitHub o Google, o creando una cuenta nueva con una combinaci\u00f3n de direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image4-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16044 alignleft\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image4-1-406x1024.png\" alt=\"\" width=\"147\" height=\"371\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image4-1-406x1024.png 406w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image4-1-119x300.png 119w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image4-1-300x756.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image4-1.png 562w\" sizes=\"auto, (max-width: 147px) 100vw, 147px\" \/><\/a>Una vez que lo haya hecho, desde su panel de control de Capella, crear\u00e1 su primera base de datos. Para los fines de este tutorial, vamos a llamarla <i>anonimizar_datos_ejemplo<\/i>.<\/p>\n<p>El resumen de su nueva base de datos se presentar\u00e1 en la parte izquierda del panel de control. Capella es multi-nube y puede trabajar con AWS, Google Cloud o Azure. En este ejemplo, se desplegar\u00e1 en AWS.<\/p>\n<p>Una vez creada la base de datos, es necesario crear un archivo <i>cubo<\/i>. A <i>cubo<\/i> en Couchbase es el contenedor donde se almacenan los datos. Cada elemento de datos, conocido como <i>documento<\/i>se guarda en JSON, lo que hace que su sintaxis resulte familiar a la mayor\u00eda de los desarrolladores. Puedes nombrar tu cubo como quieras. Sin embargo, para los prop\u00f3sitos de este tutorial, vamos a llamar a este cubo <i>datos_anonimizados_ejemplo<\/i>.<\/p>\n<p>Ahora que has creado tanto tu base de datos como tu bucket, est\u00e1s listo para crear tus credenciales de acceso a la base de datos y obtener tu URL de conexi\u00f3n que usar\u00e1s en tu funci\u00f3n Lambda.<\/p>\n<p>Navegue hasta el <i>Conectar<\/i> en el cuadro de mandos de Capella y tome nota de la secci\u00f3n <i>Cadena de conexi\u00f3n<\/i>.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image2-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-16045\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image2-2-1024x583.png\" alt=\"\" width=\"900\" height=\"512\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2-1024x583.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2-300x171.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2-768x438.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2-1536x875.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2-1320x752.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image2-2.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p>A continuaci\u00f3n, haga clic en el bot\u00f3n <i>Acceso a bases de datos<\/i> en la secci\u00f3n dos. En esa secci\u00f3n, crear\u00e1 credenciales (un nombre de usuario y una contrase\u00f1a) que su funci\u00f3n Lambda utilizar\u00e1 para autenticarse con la base de datos. Puedes limitar las credenciales al bucket espec\u00edfico que has creado o darle permiso para todos los buckets y bases de datos de tu cuenta. En cualquier caso, debes asegurarte de que tiene acceso de lectura y escritura.<\/p>\n<p>En este punto, ya est\u00e1s listo para crear la funci\u00f3n Lambda que se invocar\u00e1 cada vez que el servicio de cola reciba un mensaje.<\/p>\n<h3>Creaci\u00f3n de la funci\u00f3n lambda<\/h3>\n<p>Cada aplicaci\u00f3n tendr\u00e1 diferente IIP que pueda recoger, y dependiendo de las localidades en las que la aplicaci\u00f3n est\u00e9 operando, tambi\u00e9n puede tener diferentes requisitos de lo que debe eliminar antes de guardar los datos. En este ejemplo, eliminaremos la direcci\u00f3n IP y el apellido de cada mensaje antes de enviarlo a Couchbase.<\/p>\n<p>La funci\u00f3n para limpiar los datos es bastante sencilla:<\/p>\n<pre class=\"nums:false lang:js decode:true\">function anonymizeData(data) {\r\n\u00a0\u00a0\u00a0\u00a0data.user.last_name = '';\r\n\u00a0\u00a0\u00a0\u00a0delete data.user.ip_address;\r\n\u00a0\u00a0\u00a0\u00a0return data;\r\n}<\/pre>\n<p>Esta funci\u00f3n, <code>anonimizarDatos<\/code>se invocar\u00e1 en el <code>manipulador<\/code> del c\u00f3digo. Si no est\u00e1 familiarizado con un <code>manipulador<\/code> es utilizada por AWS Lambda para procesar los mensajes entrantes de la cola SQS, transformar los datos y almacenarlos en Couchbase. Tu c\u00f3digo ejecutable principal debe comenzar con un <code>exports.handler<\/code>.<\/p>\n<p>En <code>manipulador<\/code> obtiene las credenciales de Couchbase y la cadena de conexi\u00f3n de las variables de entorno establecidas en la configuraci\u00f3n de la funci\u00f3n Lambda. Puedes encontrar instrucciones detalladas sobre la configuraci\u00f3n de variables de entorno para una funci\u00f3n Lambda en la secci\u00f3n <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/configuration-envvars.html\">Documentaci\u00f3n de AWS<\/a>. A continuaci\u00f3n, la funci\u00f3n analiza el mensaje recibido de SQS y llama a la funci\u00f3n <code>anonimizarDatos<\/code> en \u00e9l. Por \u00faltimo <i>upserts<\/i> los datos en el bucket de Couchbase.<\/p>\n<pre class=\"nums:false lang:js decode:true\">exports.handler = async (event) =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0console.log('Starting Lambda function');\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0if (!event.Records || !Array.isArray(event.Records)) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw new TypeError('event.Records is not iterable');\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0const connectionString = process.env.COUCHBASE_CONNECTION_STRING;\r\n\u00a0\u00a0\u00a0\u00a0const username = process.env.COUCHBASE_USERNAME;\r\n\u00a0\u00a0\u00a0\u00a0const password = process.env.COUCHBASE_PASSWORD;\r\n\u00a0\u00a0\u00a0\u00a0const bucketName = process.env.COUCHBASE_BUCKET_NAME;\r\n\r\n\u00a0\u00a0\u00a0\u00a0try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const cluster = await couchbase.connect(connectionString, {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0username: username,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0password: password\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log('Connected to Couchbase cluster');\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const bucket = cluster.bucket(bucketName);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const collection = bucket.defaultCollection();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (const record of event.Records) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log('Processing record:', record);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const payload = JSON.parse(record.body);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const transformedData = anonymizeData(payload);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log('Transformed data:', transformedData);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await collection.upsert(transformedData.record_id, transformedData);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log('Data upserted:', transformedData.record_id);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0} catch (error) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.error('Error during processing:', error);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw error;\r\n\u00a0\u00a0\u00a0\u00a0}\r\n};<\/pre>\n<p>Para configurar la funci\u00f3n Lambda utilizando la CLI de AWS, necesitas crear una nueva funci\u00f3n Lambda y especificar el rol IAM y el manejador necesarios. A continuaci\u00f3n te mostramos c\u00f3mo puedes hacerlo:<\/p>\n<pre class=\"nums:false wrap:true lang:sh decode:true\">aws lambda create-function --function-name AnonymizeDataExampleFunction \\\r\n  --package-type Image \\\r\n  --code ImageUri=&lt;your-account-id&gt;.dkr.ecr.&lt;your-region&gt;.amazonaws.com\/anonymize_data_example_image:latest \\\r\n  --role arn:aws:iam::&lt;your-account-id&gt;:role\/&lt;your-lambda-execution-role&gt;\r\n\r\n<\/pre>\n<p>Aseg\u00farese de sustituir <em><code>&lt;your-account-id&gt;<\/code><\/em>, <code>&lt;your-region&gt;<\/code>y <code>&lt;your-lambda-execution-role&gt;<\/code> con tu ID de cuenta de AWS real, la regi\u00f3n y el ARN del rol de IAM que creaste para la funci\u00f3n de Lambda. Este comando configura la funci\u00f3n de Lambda para utilizar la imagen de Docker que publicar\u00e1 en AWS ECR.<\/p>\n<p>La funci\u00f3n Lambda ya est\u00e1 lista para empaquetarse en una imagen Docker y publicarse en el servicio ECR de AWS.<\/p>\n<h3>Despliegue de la imagen Docker en ECR<\/h3>\n<p>Para implementar la imagen de Docker en AWS ECR, comenzamos por crear la imagen de Docker para la plataforma linux\/amd64. Esto asegura la compatibilidad con la arquitectura x86_64 de nuestra funci\u00f3n Lambda. Utilizamos un <i>Dockerfile<\/i> que instala las herramientas y dependencias necesarias, establece el directorio de trabajo, copia los archivos necesarios, instala las dependencias y copia el c\u00f3digo de la funci\u00f3n Lambda. La p\u00e1gina <i>Dockerfile<\/i> tambi\u00e9n especifica el comando para ejecutar la funci\u00f3n Lambda.<\/p>\n<p>Aqu\u00ed est\u00e1 el <i>Dockerfile<\/i>:<\/p>\n<pre class=\"nums:false lang:default decode:true\">FROM public.ecr.aws\/lambda\/nodejs:18\r\n\r\n# Install necessary tools and dependencies\r\nRUN yum -y install gcc-c++ tar gzip findutils\r\n\r\n# Set the working directory\r\nWORKDIR \/var\/task\r\n\r\n# Copy package.json and package-lock.json\r\nCOPY package*.json .\/\r\n\r\n# Install dependencies\r\nRUN npm install\r\n\r\n# Copy the function code\r\nCOPY index.js .\/\r\n\r\n# Command to run the Lambda function\r\nCMD [ \"index.handler\" ]\r\n<\/pre>\n<p>Una vez que el Dockerfile est\u00e1 listo, construimos la imagen Docker con la plataforma especificada:<\/p>\n<pre class=\"nums:false lang:default decode:true\">docker build --platform linux\/amd64 -t anonymize_data_example_image .\r\n<\/pre>\n<p>Despu\u00e9s de construir la imagen, la etiquetamos adecuadamente para el repositorio ECR de AWS:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">docker tag anonymize_data_example_image:latest &lt;your-account-id&gt;.dkr.ecr.&lt;your-region&gt;.amazonaws.com\/anonymize_data_example_image:latest<\/pre>\n<p>Para enviar la imagen Docker a ECR, primero iniciamos sesi\u00f3n en el registro de ECR utilizando la CLI de AWS para obtener las credenciales de inicio de sesi\u00f3n:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws ecr get-login-password --region &lt;your-region&gt; | docker login --username AWS --password-stdin &lt;your-account-id&gt;.dkr.ecr.&lt;your-region&gt;.amazonaws.com<\/pre>\n<p>Con las credenciales en su lugar, empujamos la imagen Docker al repositorio ECR:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">docker push &lt;your-account-id&gt;.dkr.ecr.&lt;your-region&gt;.amazonaws.com\/anonymize_data_example_image:latest<\/pre>\n<p>Por \u00faltimo, actualizamos la funci\u00f3n lambda denominada <code>AnonymizeDataExampleFunction<\/code> para utilizar la nueva imagen Docker de ECR. Esto implica especificar la URI de la imagen y asegurarse de que la funci\u00f3n Lambda est\u00e1 configurada para ejecutar el c\u00f3digo de la imagen Docker reci\u00e9n empujada:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws lambda update-function-code --function-name AnonymizeDataExampleFunction --image-uri &lt;your-account-id&gt;.dkr.ecr.&lt;your-region&gt;.amazonaws.com\/anonymize_data_example_image:latest<\/pre>\n<p>Siguiendo estos pasos, la imagen de Docker se implementa correctamente en AWS ECR y la funci\u00f3n de Lambda se actualiza para utilizar la nueva imagen, lo que permite a la aplicaci\u00f3n desinfectar la informaci\u00f3n de identificaci\u00f3n personal antes de almacenarla en Couchbase. Esta configuraci\u00f3n garantiza que el procesamiento de datos cumple los requisitos de privacidad al tiempo que aprovecha la potencia de AWS y Couchbase.<\/p>\n<h3>Configuraci\u00f3n del servicio SQS<\/h3>\n<p>Para facilitar el flujo de datos entre el remitente del mensaje y la funci\u00f3n de Lambda, necesitamos configurar una cola de Amazon SQS. La cola de SQS actuar\u00e1 como un b\u00fafer que recibe y almacena mensajes hasta que la funci\u00f3n de Lambda los procesa. A continuaci\u00f3n se explica c\u00f3mo configurar una cola SQS y convertirla en un activador de la funci\u00f3n de Lambda mediante la CLI de AWS.<\/p>\n<p>En primer lugar, cree una nueva cola SQS. Esta cola recibir\u00e1 mensajes con datos de usuario del remitente del mensaje, que es la aplicaci\u00f3n.<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws sqs create-queue --queue-name AnonymizeDataExampleQueue<\/pre>\n<p>Despu\u00e9s de crear la cola, recibir\u00e1 una URL para la cola. Esta URL es necesaria para enviar mensajes a la cola y configurarla como activador de la funci\u00f3n Lambda.<\/p>\n<p>A continuaci\u00f3n, necesitamos obtener el ARN de la cola SQS, que es necesario para configurar permisos y disparadores. Utilice el siguiente comando para recuperar el ARN:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws sqs get-queue-attributes --queue-url https:\/\/sqs.&lt;your-region&gt;.amazonaws.com\/&lt;your-account-id&gt;\/AnonymizeDataExampleQueue --attribute-names QueueArn<\/pre>\n<p>Sustituir <code>&lt;your-region&gt;<\/code> y <code>&lt;your-account-id&gt;<\/code> con su regi\u00f3n AWS real y su ID de cuenta.<\/p>\n<p>El resultado incluir\u00e1 <i>ColaArn<\/i>que se parece a esto:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">{\r\n\u00a0\u00a0\u00a0\u00a0\"Attributes\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"QueueArn\": \"arn:aws:sqs:&lt;your-region&gt;:&lt;your-account-id&gt;:AnonymizeDataExampleQueue\"\r\n\u00a0\u00a0\u00a0\u00a0}\r\n}<\/pre>\n<p>Ahora, tenemos que conceder a la funci\u00f3n Lambda permiso para leer mensajes de la cola SQS. Crea un archivo de pol\u00edtica llamado <i>lambda-sqs-policy.json<\/i> con el siguiente contenido:<\/p>\n<pre class=\"nums:false lang:default decode:true\">{\r\n\u00a0\u00a0\"Version\": \"2012-10-17\",\r\n\u00a0\u00a0\"Statement\": [\r\n\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Effect\": \"Allow\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Action\": \"sqs:ReceiveMessage\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Resource\": \"arn:aws:sqs:&lt;your-region&gt;:&lt;your-account-id&gt;:AnonymizeDataExampleQueue\"\r\n\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Effect\": \"Allow\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Action\": \"sqs:DeleteMessage\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Resource\": \"arn:aws:sqs:&lt;your-region&gt;:&lt;your-account-id&gt;:AnonymizeDataExampleQueue\"\r\n\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Effect\": \"Allow\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Action\": \"sqs:GetQueueAttributes\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Resource\": \"arn:aws:sqs:&lt;your-region&gt;:&lt;your-account-id&gt;:AnonymizeDataExampleQueue\"\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0]\r\n}<\/pre>\n<p>Aplique esta pol\u00edtica al rol de ejecuci\u00f3n Lambda:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws iam put-role-policy --role-name &lt;your-lambda-execution-role&gt; --policy-name LambdaSQSPolicy --policy-document file:\/\/lambda-sqs-policy.json<\/pre>\n<p>A continuaci\u00f3n, a\u00f1ada la cola SQS como activador de la funci\u00f3n Lambda:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws lambda create-event-source-mapping --function-name AnonymizeDataExampleFunction --batch-size 10 --event-source-arn arn:aws:sqs:&lt;your-region&gt;:&lt;your-account-id&gt;:AnonymizeDataExampleQueue<\/pre>\n<p>Este comando configura la funci\u00f3n Lambda para que se active cuando lleguen mensajes a la cola SQS.<\/p>\n<p>Ahora, su funci\u00f3n Lambda est\u00e1 configurada para recibir cada mensaje enviado al servicio de cola. El flujo de trabajo est\u00e1 completo. Esta configuraci\u00f3n garantiza una gesti\u00f3n eficiente de los datos de los usuarios al tiempo que mantiene el cumplimiento de los requisitos de privacidad.<\/p>\n<h3>Probar la aplicaci\u00f3n localmente<\/h3>\n<p>Para asegurarse de que todo funciona como se espera, puede probar el flujo de trabajo enviando directamente un mensaje a la cola. Desde la l\u00ednea de comandos ejecute lo siguiente:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">aws sqs send-message --queue-url https:\/\/sqs.&lt;your-region&gt;.amazonaws.com\/&lt;your-account-id&gt;\/AnonymizeDataExampleQueue --message-body \"{\\\"record_id\\\": \\\"purchase_002\\\", \\\"item\\\": \\\"item_1\\\", \\\"user\\\": {\\\"first_name\\\": \\\"John\\\", \\\"last_name\\\": \\\"Doe\\\", \\\"ip_address\\\": \\\"192.168.1.1\\\"}, \\\"timestamp\\\": \\\"2024-07-01T12:34:56Z\\\"}\"<\/pre>\n<p>El mensaje activar\u00e1 la funci\u00f3n Lambda, que a su vez a\u00f1adir\u00e1 los datos a tu bucket de Couchbase despu\u00e9s de desinfectarlos. Puede ver los datos de muestra que envi\u00f3 en el mensaje iniciando sesi\u00f3n en el panel de Capella o en su archivo <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=Couchbase.vscode-couchbase\">VSCode<\/a> o <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/22131-couchbase\">Jetbrains<\/a> IDE directamente usando su respectiva extensi\u00f3n de Couchbase.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>El trabajo de construir, desplegar y mantener cualquier aplicaci\u00f3n moderna hoy en d\u00eda es una tarea enorme. En la medida de lo posible, las partes de esa tarea que no est\u00e1n directamente relacionadas con la actividad principal de la aplicaci\u00f3n deben simplificarse y abstraerse para reducir la carga cognitiva de los ingenieros, los SRE y todos los dem\u00e1s implicados. La normativa sobre privacidad es un elemento importante que debe cumplirse estrictamente y que no debe causar grandes quebraderos de cabeza ni aumentar la carga de trabajo.<\/p>\n<p>La creaci\u00f3n de un flujo de trabajo plug and play automatizado que pueda ubicarse f\u00e1cilmente entre cualquier aplicaci\u00f3n que interact\u00fae con informaci\u00f3n de identificaci\u00f3n personal y la base de datos en la que se almacenan los datos aliviar\u00e1 significativamente la carga cognitiva, reducir\u00e1 la carga y agilizar\u00e1 el proceso de desarrollo. Con el aprovechamiento conjunto de AWS y Couchbase, puede hacerlo posible para sus necesidades de saneamiento de datos en tiempo real, garantizando as\u00ed tanto la integridad del usuario como la productividad de ingenier\u00eda.<\/p>","protected":false},"excerpt":{"rendered":"<p>Any modern web application that interacts with users in different localities must contend with varying privacy requirements and user data consent guidelines. These can be overwhelming for any engineering team to handle, regardless whether the team is just you or [&hellip;]<\/p>","protected":false},"author":85356,"featured_media":16046,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2225,1816,1813],"tags":[9445,2135,9997],"ppma_author":[9985],"class_list":["post-16042","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-cloud","category-couchbase-server","category-security","tag-data-privacy","tag-gdpr","tag-pii"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Privacy Requirements Without the Headache - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Every application that collects any aspect of a user\u2019s information must ensure rigorous consent and be in compliance with the laws and regulations of every locality it operates in across the globe.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/privacy-requirements-without-the-headache\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Privacy Requirements Without the Headache\" \/>\n<meta property=\"og:description\" content=\"Every application that collects any aspect of a user\u2019s information must ensure rigorous consent and be in compliance with the laws and regulations of every locality it operates in across the globe.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/privacy-requirements-without-the-headache\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-24T20:54:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-30T18:05:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image3-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/\"},\"author\":{\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d\"},\"headline\":\"Privacy Requirements Without the Headache\",\"datePublished\":\"2024-07-24T20:54:13+00:00\",\"dateModified\":\"2024-07-30T18:05:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/\"},\"wordCount\":1989,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png\",\"keywords\":[\"data privacy\",\"gdpr\",\"pii\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Capella\",\"Couchbase Server\",\"Security\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/\",\"name\":\"Privacy Requirements Without the Headache - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png\",\"datePublished\":\"2024-07-24T20:54:13+00:00\",\"dateModified\":\"2024-07-30T18:05:08+00:00\",\"description\":\"Every application that collects any aspect of a user\u2019s information must ensure rigorous consent and be in compliance with the laws and regulations of every locality it operates in across the globe.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png\",\"width\":1200,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Privacy Requirements Without the Headache\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d\",\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"caption\":\"Ben Greenberg, Senior Developer Evangelist\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/bengreenberg\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Privacy Requirements Without the Headache - The Couchbase Blog","description":"Toda aplicaci\u00f3n que recopile cualquier aspecto de la informaci\u00f3n de un usuario debe garantizar un consentimiento riguroso y cumplir las leyes y normativas de cada localidad en la que opere en todo el mundo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/privacy-requirements-without-the-headache\/","og_locale":"es_MX","og_type":"article","og_title":"Privacy Requirements Without the Headache","og_description":"Every application that collects any aspect of a user\u2019s information must ensure rigorous consent and be in compliance with the laws and regulations of every locality it operates in across the globe.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/privacy-requirements-without-the-headache\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-07-24T20:54:13+00:00","article_modified_time":"2024-07-30T18:05:08+00:00","og_image":[{"width":1200,"height":640,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/07\/image3-2.png","type":"image\/png"}],"author":"Ben Greenberg, Senior Developer Evangelist","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ben Greenberg, Senior Developer Evangelist","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/"},"author":{"name":"Ben Greenberg, Senior Developer Evangelist","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d"},"headline":"Privacy Requirements Without the Headache","datePublished":"2024-07-24T20:54:13+00:00","dateModified":"2024-07-30T18:05:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/"},"wordCount":1989,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png","keywords":["data privacy","gdpr","pii"],"articleSection":["Best Practices and Tutorials","Couchbase Capella","Couchbase Server","Security"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/","url":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/","name":"Privacy Requirements Without the Headache - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png","datePublished":"2024-07-24T20:54:13+00:00","dateModified":"2024-07-30T18:05:08+00:00","description":"Toda aplicaci\u00f3n que recopile cualquier aspecto de la informaci\u00f3n de un usuario debe garantizar un consentimiento riguroso y cumplir las leyes y normativas de cada localidad en la que opere en todo el mundo.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/07\/image3-2.png","width":1200,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/privacy-requirements-without-the-headache\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Privacy Requirements Without the Headache"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d","name":"Ben Greenberg, Desarrollador Evangelista Senior","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","caption":"Ben Greenberg, Senior Developer Evangelist"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/bengreenberg\/"}]}},"authors":[{"term_id":9985,"user_id":85356,"is_guest":0,"slug":"bengreenberg","display_name":"Ben Greenberg, Senior Developer Evangelist","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg"},"author_category":"","last_name":"Greenberg, Senior Developer Evangelist","first_name":"Ben","job_title":"Senior Developer Evangelist","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/16042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=16042"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/16042\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/16046"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=16042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=16042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=16042"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=16042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}