Gestión de Secretos en DevOps: Uso de Vault para Proteger tus Datos Sensibles

¡Bienvenido a Guías Open Source, el lugar donde exploramos el fascinante mundo del software de código abierto! En nuestro artículo principal, "Gestión de Secretos en DevOps: Uso de Vault para Proteger tus Datos Sensibles", te sumergirás en el apasionante mundo de la protección de datos sensibles en el entorno de desarrollo y operaciones. Descubrirás cómo Vault puede ser tu aliado para garantizar la seguridad de la información en tus proyectos. ¡Prepárate para adentrarte en un tema apasionante y vital para el desarrollo de software!

Índice
  1. Introducción a la Gestión de Secretos en DevOps
    1. La importancia de proteger datos sensibles en el ciclo de vida del software
    2. ¿Qué son los "secretos" en el contexto de DevOps?
  2. Principales Desafíos en la Protección de Datos Sensibles en DevOps
    1. Riesgos de seguridad asociados a una mala gestión de secretos
    2. El cumplimiento de normativas y la gestión de secretos
  3. Descripción General de Vault: La Herramienta de Gestión de Secretos
    1. ¿Qué es Vault y cómo se integra en la automatización DevOps?
    2. Características clave de Vault para la seguridad en DevOps
  4. Implementación de Vault para Proteger Datos Sensibles en DevOps
    1. Pasos iniciales para configurar Vault en tu entorno DevOps
    2. Manejo de secretos dinámicos con Vault
  5. Mejores Prácticas al Usar Vault en la Gestión de Secretos
    1. Estrategias de autenticación segura en Vault
    2. Políticas de acceso y control de secretos
    3. Auditoría y monitoreo de actividades con Vault
  6. Estudio de Caso: Implementación de Vault en Kubernetes
    1. Integración de Vault con Kubernetes para la gestión de secretos
    2. Lecciones aprendidas de la implementación en Kubernetes
  7. Comparativa: Vault frente a Otras Herramientas de Gestión de Secretos
    1. Aspectos en los que Vault supera a competidores como AWS Secrets Manager
    2. Cuándo es preferible usar alternativas a Vault
  8. Conclusión
    1. Resumen de cómo Vault contribuye a proteger datos sensibles en DevOps
    2. Recursos adicionales y comunidades para seguir aprendiendo
  9. Preguntas frecuentes
    1. 1. ¿Qué es DevOps?
    2. 2. ¿Por qué es importante proteger datos sensibles en DevOps?
    3. 3. ¿Cómo puede Vault ayudar a proteger datos sensibles en DevOps?
    4. 4. ¿Cuáles son las mejores prácticas para la gestión de secretos en un entorno DevOps?
    5. 5. ¿Qué beneficios ofrece la protección adecuada de datos sensibles en un entorno DevOps?
  10. Reflexión final: Proteger datos sensibles en DevOps
    1. ¡Gracias por formar parte de la comunidad de Guías Open Source!

Introducción a la Gestión de Secretos en DevOps

Equipo de desarrolladores enfocados en una oficina moderna y futurista, rodeados de tecnología y líneas de código

En el contexto de DevOps, la protección de datos sensibles es de vital importancia en todas las etapas del ciclo de vida del software. La gestión adecuada de los secretos, como contraseñas, tokens de acceso y claves de API, es fundamental para garantizar la seguridad y la integridad de las aplicaciones y los datos.

La exposición accidental de credenciales o información confidencial puede resultar en vulnerabilidades significativas, comprometiendo la seguridad de toda la infraestructura y poniendo en riesgo la privacidad de los usuarios finales. Por lo tanto, implementar estrategias efectivas para proteger estos datos sensibles es un requisito fundamental en cualquier entorno de desarrollo y despliegue de software.

Además, en un entorno de DevOps, donde la automatización y la colaboración son pilares fundamentales, la gestión de secretos debe integrarse perfectamente en los flujos de trabajo, garantizando la seguridad sin obstaculizar la eficiencia y la agilidad del desarrollo.

La importancia de proteger datos sensibles en el ciclo de vida del software

La protección de datos sensibles en el ciclo de vida del software es crucial para salvaguardar la integridad, confidencialidad y disponibilidad de la información. Desde el desarrollo hasta la implementación y el mantenimiento, los datos sensibles deben ser manejados de manera segura para prevenir posibles brechas de seguridad.

En el contexto de DevOps, donde la colaboración y la automatización son esenciales, la protección de datos sensibles cobra aún más relevancia. La implementación de estrategias efectivas para la gestión de secretos garantiza que las credenciales y otros datos confidenciales estén protegidos en todo momento, sin obstaculizar el flujo de trabajo ágil y eficiente que caracteriza a las prácticas de DevOps.

Por tanto, la gestión de secretos en DevOps no es solo una medida de seguridad, sino un componente fundamental para el éxito y la integridad de los procesos de desarrollo y despliegue de software.

¿Qué son los "secretos" en el contexto de DevOps?

En el contexto de DevOps, los "secretos" se refieren a cualquier información confidencial que se utiliza en el desarrollo, la implementación o el mantenimiento de software. Esto puede incluir contraseñas, claves API, tokens de acceso, certificados SSL, entre otros. Estos datos sensibles son fundamentales para el funcionamiento de las aplicaciones, pero su exposición representa un riesgo significativo para la seguridad.

La gestión de secretos en DevOps se centra en la protección y el manejo seguro de esta información confidencial a lo largo de todo el ciclo de vida del software, asegurando que solo las entidades autorizadas tengan acceso a estos datos y que se utilicen de manera segura y controlada.

Los secretos en el contexto de DevOps representan la información confidencial necesaria para el funcionamiento de las aplicaciones y sistemas, cuya protección adecuada es esencial para prevenir posibles vulnerabilidades y brechas de seguridad.

Principales Desafíos en la Protección de Datos Sensibles en DevOps

Un centro de datos futurista y seguro con tecnología avanzada para proteger datos sensibles en DevOps

Riesgos de seguridad asociados a una mala gestión de secretos

En el contexto de DevOps, la gestión inadecuada de los secretos y datos sensibles puede dar lugar a una serie de riesgos de seguridad significativos. La exposición no autorizada de credenciales de acceso, claves de API, tokens de autenticación y otros secretos puede resultar en violaciones de seguridad, pérdida de datos confidenciales y daños a la reputación de la organización.

Los riesgos asociados con una mala gestión de secretos también incluyen la posibilidad de acceso no autorizado a sistemas y servicios críticos, así como la potencial interrupción de las operaciones comerciales. En este sentido, la implementación de prácticas sólidas para la gestión de secretos se vuelve fundamental para garantizar la seguridad y la integridad de los datos sensibles en entornos DevOps.

Es crucial comprender que la falta de control adecuado sobre los secretos en un entorno de desarrollo y despliegue continuo puede tener repercusiones significativas, lo que subraya la importancia de abordar proactivamente este aspecto en las prácticas de DevOps.

El cumplimiento de normativas y la gestión de secretos

En el contexto de DevOps, el cumplimiento de normativas y regulaciones relacionadas con la privacidad y la protección de datos se vuelve un factor crítico. La gestión de secretos desempeña un papel fundamental para asegurar que las organizaciones cumplan con los requisitos establecidos por normativas como GDPR, HIPAA, PCI-DSS, entre otras.

La implementación de un sistema efectivo para la gestión de secretos, como HashiCorp Vault, no solo contribuye a mitigar los riesgos de seguridad, sino que también facilita la demostración de conformidad con las regulaciones pertinentes. Al garantizar que los secretos estén protegidos, auditados y controlados, las organizaciones pueden mejorar su postura de cumplimiento y reducir el riesgo de sanciones o multas asociadas con el incumplimiento de normativas de protección de datos sensibles.

La gestión de secretos en entornos DevOps no solo es crucial para mitigar riesgos de seguridad, sino que también es un componente esencial para garantizar el cumplimiento de las normativas de protección de datos sensibles, lo que subraya su importancia en el contexto de las operaciones de desarrollo y despliegue continuo.

Descripción General de Vault: La Herramienta de Gestión de Secretos

Un moderno y futurista depósito de alta seguridad iluminado por una suave luz azul

¿Qué es Vault y cómo se integra en la automatización DevOps?

Vault es una herramienta de gestión de secretos desarrollada por HashiCorp, diseñada para proteger, almacenar y controlar el acceso a tokens, contraseñas, certificados y cualquier tipo de información confidencial. En el contexto de la automatización DevOps, Vault juega un papel fundamental al proporcionar un mecanismo centralizado para la gestión segura de secretos en entornos de desarrollo, pruebas y producción.

La integración de Vault en un entorno DevOps permite a los equipos de desarrollo y operaciones gestionar de manera segura los secretos requeridos por las aplicaciones y servicios, sin comprometer la seguridad. A través de su API, Vault se puede integrar perfectamente en el flujo de trabajo de CI/CD, garantizando la gestión eficiente de secretos en entornos de implementación automatizada.

Además, Vault ofrece un conjunto de herramientas y bibliotecas que facilitan su integración con diversas plataformas y frameworks utilizados en el ecosistema DevOps, lo que lo convierte en una solución versátil y adaptable a diferentes entornos y requisitos de seguridad.

Características clave de Vault para la seguridad en DevOps

La seguridad en el contexto de DevOps es un aspecto crítico, y Vault ofrece una serie de características clave que lo convierten en una solución robusta para la gestión de secretos en entornos de desarrollo y operaciones automatizadas. Entre sus características más relevantes se encuentran:

  • Almacenamiento Seguro: Vault utiliza un sistema de almacenamiento seguro que protege los secretos sensibles mediante técnicas de encriptación avanzada, garantizando su confidencialidad y protección contra accesos no autorizados.
  • Autenticación y Autorización Granular: Vault ofrece capacidades avanzadas de autenticación y autorización, permitiendo definir políticas de acceso detalladas para garantizar que solo los usuarios y servicios autorizados puedan acceder a los secretos almacenados.
  • Renovación Automática de Secretos: Vault facilita la renovación automática de secretos, lo que contribuye a mantener la seguridad de las aplicaciones al evitar la exposición prolongada de credenciales.

Estas características, junto con otras funcionalidades de Vault, lo posicionan como una herramienta integral para la protección de datos sensibles en entornos DevOps, ofreciendo una capa de seguridad fundamental en el ciclo de vida de desarrollo, pruebas e implementación de aplicaciones y servicios.

Implementación de Vault para Proteger Datos Sensibles en DevOps

Equipo de desarrolladores protegiendo datos sensibles en un entorno DevOps moderno y colaborativo, con luz natural y diseño minimalista

La gestión de secretos es fundamental en cualquier entorno de desarrollo y operaciones (DevOps), ya que permite proteger información sensible como contraseñas, tokens de acceso, claves API y otros datos críticos. En este sentido, Vault es una herramienta de código abierto desarrollada por HashiCorp que facilita la gestión centralizada, el almacenamiento seguro y la distribución controlada de secretos en entornos de DevOps.

Pasos iniciales para configurar Vault en tu entorno DevOps

El primer paso para implementar Vault en tu entorno de DevOps es descargar e instalar la herramienta. Una vez instalada, es crucial inicializar Vault y configurar el almacenamiento de los datos. Para garantizar la seguridad, es recomendable habilitar el soporte de alta disponibilidad y configurar las políticas de acceso para controlar quién puede acceder a los secretos almacenados en Vault.

Además, es importante establecer una estrategia de respaldo y recuperación para garantizar la disponibilidad de los secretos en caso de fallos. Es fundamental realizar pruebas exhaustivas para validar la configuración de Vault y su integración con el resto de las herramientas utilizadas en el entorno de DevOps.

Una vez configurado, Vault puede integrarse con sistemas de orquestación de contenedores como Kubernetes, herramientas de automatización de infraestructura como Terraform, y plataformas de gestión de configuración como Ansible, lo que permite proteger y distribuir secretos de forma segura en todo el ciclo de vida de las aplicaciones.

Manejo de secretos dinámicos con Vault

Una de las características más poderosas de Vault es la capacidad de generar secretos dinámicamente. Esto significa que Vault puede crear credenciales únicas para sistemas de bases de datos, servicios en la nube u otros recursos, y luego revocar automáticamente esas credenciales una vez que hayan expirado o ya no sean necesarias. Esto proporciona un alto nivel de seguridad al evitar la proliferación de credenciales estáticas y minimizar la exposición de los datos sensibles.

Además, Vault ofrece capacidades avanzadas de auditoría y registro, lo que permite rastrear quién accedió a qué secretos y cuándo. Esto es crucial para cumplir con los requisitos de cumplimiento y asegurar la trazabilidad de las acciones realizadas en el entorno de DevOps.

Vault es una herramienta esencial para proteger datos sensibles en entornos de DevOps, ya que proporciona un mecanismo seguro para la gestión y distribución de secretos, así como la capacidad de generar credenciales dinámicas de forma segura.

Mejores Prácticas al Usar Vault en la Gestión de Secretos

Una bóveda futurista con interfaz digital y códigos de encriptación, emitiendo un resplandor etéreo

Estrategias de autenticación segura en Vault

Una de las principales preocupaciones al trabajar con datos sensibles en entornos de DevOps es garantizar una autenticación segura para proteger el acceso no autorizado a los secretos. Vault ofrece diversas estrategias de autenticación, desde tokens y certificados hasta métodos de autenticación específicos de proveedores en la nube. La implementación de autenticación de dos factores también es una opción viable para agregar una capa adicional de seguridad.

Es fundamental evaluar las necesidades de autenticación de la organización y seleccionar la estrategia más adecuada para garantizar la protección de los secretos. La configuración y gestión adecuadas de las políticas de autenticación en Vault son esenciales para mantener la integridad y la seguridad de los datos sensibles.

Además, es crucial implementar un proceso de rotación regular de tokens y certificados para limitar la exposición de los secretos y reducir el riesgo de compromiso de la información confidencial.

Políticas de acceso y control de secretos

Las políticas de acceso en Vault desempeñan un papel fundamental en la protección de los datos sensibles. Estas políticas permiten definir quién puede acceder a qué secretos y qué operaciones están permitidas. Al establecer políticas granulares, es posible garantizar que solo los usuarios autorizados tengan acceso a la información confidencial, reduciendo así el riesgo de brechas de seguridad.

Es recomendable seguir el principio de privilegios mínimos, otorgando únicamente los permisos necesarios para llevar a cabo tareas específicas. Además, la revisión periódica de las políticas de acceso es crucial para mantener la seguridad a lo largo del tiempo, especialmente en entornos dinámicos de desarrollo y despliegue.

La implementación de controles de acceso basados en roles (RBAC) permite una gestión más eficiente de los permisos, facilitando la asignación de accesos de forma centralizada y la actualización o revocación rápida de privilegios en caso de cambios en la estructura organizativa.

Auditoría y monitoreo de actividades con Vault

La capacidad de auditar y monitorear las actividades relacionadas con la gestión de secretos es fundamental para garantizar la trazabilidad y la seguridad de los datos sensibles. Vault proporciona herramientas integradas para registrar y supervisar las interacciones con los secretos, lo que permite identificar posibles anomalías o intentos de acceso no autorizado.

El registro detallado de las actividades, combinado con alertas configuradas para eventos específicos, facilita la detección temprana de posibles amenazas a la seguridad de los secretos. Además, la integración con sistemas de gestión de eventos de seguridad (SIEM) permite centralizar la monitorización y correlacionar la información de Vault con otros eventos de seguridad en la infraestructura de TI.

La auditoría regular de los registros de actividad y su análisis detallado son prácticas recomendadas para identificar patrones de uso inusuales o intentos de acceso malintencionados, lo que contribuye a mantener la integridad y confidencialidad de los datos sensibles en entornos DevOps.

Estudio de Caso: Implementación de Vault en Kubernetes

Un moderno y seguro depósito de datos en una infraestructura futurista de Kubernetes, protegiendo datos sensibles en DevOps

Integración de Vault con Kubernetes para la gestión de secretos

La integración de Vault con Kubernetes ofrece una solución eficaz para la gestión de secretos en entornos de DevOps. Al implementar Vault en Kubernetes, se crea un entorno seguro y centralizado para almacenar y gestionar los datos sensibles de la aplicación, como contraseñas, tokens de acceso y certificados.

La integración de Vault con Kubernetes permite que los equipos de desarrollo y operaciones accedan de forma segura a los secretos necesarios para desplegar y escalar aplicaciones, sin comprometer la seguridad de la información. Esta integración también facilita la rotación automática de las credenciales, lo que contribuye a mantener un alto nivel de seguridad en el ciclo de vida de los datos sensibles.

Además, la implementación de Vault en Kubernetes simplifica la gestión de políticas de acceso, lo que garantiza que solo los usuarios autorizados puedan acceder a los secretos, reduciendo así el riesgo de exposición de datos sensibles.

Lecciones aprendidas de la implementación en Kubernetes

La implementación de Vault en Kubernetes ha proporcionado importantes lecciones para la gestión de secretos en entornos DevOps. Uno de los aspectos clave es la importancia de establecer políticas claras de acceso y uso de los secretos almacenados en Vault, lo que garantiza que solo los usuarios autorizados puedan acceder a la información confidencial.

Asimismo, se ha destacado la necesidad de realizar una gestión proactiva de las rotaciones de secretos, evitando la exposición prolongada de credenciales sensibles. La automatización de la rotación de secretos ha demostrado ser fundamental para mantener la seguridad de los datos en todo momento.

Además, la implementación en Kubernetes ha resaltado la importancia de la monitorización constante de Vault, asegurando que el sistema funcione de manera óptima y que se puedan identificar y abordar rápidamente posibles problemas de seguridad.

Comparativa: Vault frente a Otras Herramientas de Gestión de Secretos

Comparación de herramientas de gestión de secretos, resaltando la interfaz de usuario, seguridad y capacidad de integración

Aspectos en los que Vault supera a competidores como AWS Secrets Manager

HashiCorp Vault es una herramienta de gestión de secretos altamente flexible y escalable que supera a otros competidores como AWS Secrets Manager en varios aspectos clave. Una de las ventajas más destacadas de Vault es su capacidad para gestionar secretos en entornos multi-nube, lo que permite a los equipos de DevOps trabajar con una variedad de proveedores de servicios en la nube de manera eficiente.

Otro aspecto en el que Vault destaca es su arquitectura modular y su capacidad para integrarse con una amplia gama de herramientas y servicios. Esto brinda a los equipos de DevOps una gran flexibilidad para adaptar Vault a sus necesidades específicas y a la infraestructura existente en sus entornos de desarrollo y producción.

Además, Vault ofrece funciones avanzadas de cifrado y control de acceso, lo que lo convierte en una opción robusta para proteger datos sensibles en entornos de DevOps. Su capacidad para generar y revocar dinámicamente credenciales de acceso también es altamente valorada en comparación con otras soluciones de gestión de secretos.

Cuándo es preferible usar alternativas a Vault

A pesar de las numerosas ventajas de Vault, existen situaciones específicas en las que puede ser preferible considerar alternativas a esta herramienta. Por ejemplo, si una organización ya tiene una fuerte dependencia de los servicios de AWS y está plenamente integrada en su entorno, podría encontrar que el uso de AWS Secrets Manager es más coherente y simplifica su infraestructura.

Del mismo modo, si se requiere una solución de gestión de secretos que esté estrechamente integrada con otras herramientas de la plataforma de nube de un proveedor específico, puede ser más conveniente optar por la solución nativa proporcionada por dicho proveedor en lugar de implementar Vault.

Si bien Vault es una herramienta poderosa y versátil, es importante evaluar las necesidades y la infraestructura específica de cada entorno de DevOps antes de decidir si es la mejor opción para gestionar los secretos y proteger los datos sensibles de la organización.

Conclusión

Un equipo de desarrolladores protege datos sensibles en DevOps, concentrados y determinados frente a una pantalla de código, con un entorno futurista

Resumen de cómo Vault contribuye a proteger datos sensibles en DevOps

La gestión de secretos en un entorno de DevOps es crucial para proteger los datos sensibles y garantizar la seguridad de la información. Vault es una herramienta de código abierto que permite almacenar, acceder y distribuir secretos de manera segura. Utilizando técnicas de encriptación y políticas de acceso, Vault ofrece una solución robusta para la gestión de secretos en entornos de desarrollo y operaciones.

Al implementar Vault en un entorno de DevOps, las organizaciones pueden asegurar que los datos sensibles, como contraseñas, tokens de acceso y certificados, estén protegidos de manera efectiva. Además, Vault ofrece capacidades de rotación automática de secretos, auditoría detallada y integración con herramientas populares de automatización y orquestación.

Vault contribuye significativamente a proteger datos sensibles en entornos de DevOps al proporcionar una plataforma segura y escalable para la gestión de secretos, lo que permite a los equipos de desarrollo y operaciones mantener la integridad y confidencialidad de la información crítica.

Recursos adicionales y comunidades para seguir aprendiendo

Para seguir aprendiendo sobre la gestión de secretos en DevOps y el uso de Vault, existen numerosos recursos y comunidades que ofrecen información valiosa y soporte continuo. Algunas recomendaciones incluyen:

  • Documentación oficial de Vault: La documentación oficial de Vault proporciona una guía detallada sobre la instalación, configuración y mejores prácticas para el uso de la herramienta.
  • Tutoriales interactivos de HashiCorp: HashiCorp ofrece tutoriales interactivos que permiten a los usuarios aprender de manera práctica cómo implementar y utilizar Vault en entornos de DevOps.
  • Comunidad de HashiCorp: La comunidad en línea de HashiCorp es un excelente recurso para hacer preguntas, compartir experiencias y conectarse con otros profesionales que utilizan Vault en sus proyectos de DevOps.

Preguntas frecuentes

1. ¿Qué es DevOps?

DevOps es una metodología que combina el desarrollo de software (Dev) con la operación de sistemas (Ops) para acelerar la entrega de aplicaciones y servicios. Se basa en la colaboración y la automatización de procesos.

2. ¿Por qué es importante proteger datos sensibles en DevOps?

La protección de datos sensibles en DevOps es crucial para garantizar la seguridad y privacidad de la información, evitando brechas de seguridad que podrían tener repercusiones graves para una organización.

3. ¿Cómo puede Vault ayudar a proteger datos sensibles en DevOps?

Vault es una herramienta de gestión de secretos que permite almacenar, acceder y distribuir de forma segura credenciales, contraseñas, tokens y otros datos sensibles utilizados en el desarrollo y despliegue de aplicaciones en entornos DevOps.

4. ¿Cuáles son las mejores prácticas para la gestión de secretos en un entorno DevOps?

Las mejores prácticas incluyen el uso de herramientas especializadas como Vault, la implementación de políticas de acceso estrictas, el cifrado de datos sensibles y la rotación periódica de credenciales.

5. ¿Qué beneficios ofrece la protección adecuada de datos sensibles en un entorno DevOps?

La protección adecuada de datos sensibles en DevOps contribuye a fortalecer la seguridad, garantizar el cumplimiento de regulaciones como GDPR o HIPAA, y generar confianza tanto en los equipos de desarrollo como en los usuarios finales.

Reflexión final: Proteger datos sensibles en DevOps

La protección de datos sensibles en el entorno de DevOps es más relevante que nunca en la actualidad, ya que la seguridad de la información es una prioridad en un mundo digital cada vez más interconectado y expuesto a amenazas cibernéticas.

La gestión de secretos en DevOps no solo es una necesidad técnica, sino que también impacta directamente en la confianza y seguridad de las operaciones empresariales. Como dijo Bruce Schneier, "La seguridad es una sensación, no una realidad. Depende de cómo te sientes". - Bruce Schneier.

Es crucial reflexionar sobre la importancia de implementar herramientas como Vault para proteger datos sensibles en DevOps, y tomar medidas proactivas para garantizar la seguridad de la información en un mundo digital en constante evolución. La protección de datos sensibles no solo es una responsabilidad técnica, sino también ética y empresarial.

¡Gracias por formar parte de la comunidad de Guías Open Source!

Esperamos que hayas encontrado útil este artículo sobre la gestión de secretos en DevOps y el uso de Vault para proteger tus datos sensibles. Te animamos a compartir tus experiencias en la gestión de secretos en tus proyectos de DevOps a través de nuestras redes sociales, y también a sugerir temas relacionados que te gustaría que abordáramos en futuros artículos. ¿Has implementado alguna vez Vault en tu equipo de DevOps? ¡Comparte tus experiencias y consejos en los comentarios!

Si quieres conocer otros artículos parecidos a Gestión de Secretos en DevOps: Uso de Vault para Proteger tus Datos Sensibles puedes visitar la categoría Automatización y Herramientas DevOps.

Articulos relacionados:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio utiliza cookies para mejorar tu experiencia de navegación. Al hacer clic en Aceptar, consientes el uso de todas las cookies. Para más información o ajustar tus preferencias, visita nuestra Política de Cookies.