Cómo proteger objetos de S3 con el cifrado de Amazon S3
Muchas empresas almacenan datos en la nube. Los servicios de almacenamiento en la nube son muy populares hoy en día debido a su gran fiabilidad y alta disponibilidad, dos factores muy importantes para las empresas. Amazon es uno de los principales proveedores de servicios de nube pública del mercado. Estos servicios se denominan Amazon Web Services (AWS). Amazon proporciona un alto nivel de seguridad, incluida una conexión de red cifrada utilizada para acceder a archivos y servicios. El cifrado reduce el riesgo de interceptación de datos en la red. Los datos son cruciales para todas las empresas y todos los usuarios. Nadie quiere que sus datos se pierdan, se corrompan o se los roben.
Por este motivo, Amazon ofrece opciones de cifrado para almacenar datos en sus distintos servicios de almacenamiento en la nube. Estas opciones de almacenamiento en la nube incluyen volúmenes EBS, un almacenamiento de alto rendimiento para máquinas virtuales (instancias), y Amazon S3, un servicio de almacenamiento en la nube desarrollado para almacenar backups, archivos, ficheros de aplicaciones y otros datos. Puede cifrar los buckets de Amazon S3 y los archivos almacenados en los buckets mediante las opciones de cifrado de AWS. En esta entrada del blog se trata el cifrado de Amazon S3, incluidos los tipos de cifrado y la configuración.
Acerca del cifrado de datos
El cifrado de datos es un proceso para proteger los datos mediante la codificación de la información. Los datos se codifican mediante una contraseña o una clave de cifrado y algoritmos de cifrado especiales. A continuación, se puede acceder a los datos cifrados utilizando la contraseña o la clave de cifrado (descifrado) correctas. El cifrado de datos se utiliza para proteger la confidencialidad de los datos digitales aunque una persona no autorizada acceda lógica o físicamente a ellos. Si una persona no autorizada accede a los datos cifrados, éstos son ilegibles sin la clave o contraseña. Los algoritmos de cifrado modernos hacen difícil y casi imposible descifrar una clave de cifrado larga o una contraseña compleja. Se pueden utilizar distintos algoritmos de cifrado, por ejemplo, AES, 3DES, RSA, Blowfish, etc. Los principales tipos de criptografía son la criptografía de clave simétrica y la criptografía de clave asimétrica.
Amazon recomienda el uso del cifrado S3 al almacenar datos en buckets de Amazon S3. La primera razón de esta recomendación es la seguridad. El cifrado aumenta el nivel de seguridad y privacidad. Sin embargo, hay otra razón por la que los datos almacenados en la nube deben estar cifrados. Amazon almacena datos de usuarios de distintos países. A veces, un país puede solicitar que se presenten datos para una investigación si se sospecha que un cliente o una organización ha infringido la ley. Sin embargo, Amazon debe respetar el acuerdo de licencia y las leyes de otros países (países cuyos ciudadanos son clientes de Amazon) y puede producirse un conflicto.
Si los datos de un usuario están cifrados y Amazon no dispone de las claves de cifrado, los datos del usuario no pueden facilitarse a terceras organizaciones o personas (aunque se faciliten los datos cifrados, se trata de un conjunto de bits inútil e ilegible). Imaginemos una situación en la que Estados Unidos solicita datos de un cliente europeo de Amazon para una investigación. ¿Qué hacer en este caso? Como ya sabrá, los datos personales de los ciudadanos europeos están protegidos por el Reglamento General de Protección de Datos (RGPD). Más información en el libro blanco Reglamento general de protección de datos de la UE.
Tipos de cifrado de Amazon S3
¿Cómo funciona el cifrado S3? Amazon proporciona varios tipos de cifrado para los datos almacenados en Amazon S3. ¿Está cifrado el S3? Por defecto, los datos almacenados en un bucket de S3 no están cifrados, pero puede configurar los ajustes de cifrado de AWS S3.
Deberá definir qué método de cifrado utilizar tras responder a las siguientes preguntas:
- ¿Quién cifra y descifra los datos?
- ¿Quién almacena la clave secreta?
- ¿Quién gestiona la clave secreta?
Veamos los métodos de cifrado de AWS disponibles para los objetos de S3 almacenados en un bucket.
Cifrado en el servidor
El cifrado del lado del servidor (SSE) es la opción de cifrado de datos más sencilla. Todas las operaciones pesadas de cifrado se realizan en el lado del servidor en la nube de AWS. Envía datos sin procesar (sin cifrar) a AWS y, a continuación, los datos se cifran en el lado de AWS cuando se registran en el almacenamiento en la nube. Cuando necesitas recuperar tus datos, Amazon lee los datos cifrados, descifra los datos necesarios en el servidor de Amazon y, a continuación, te envía los datos sin cifrar a través de la red. Este proceso es transparente para los usuarios finales.
SSE-S3 es el método más sencillo: AWS gestiona y maneja las claves para cifrar los datos que ha seleccionado. No puedes ver la clave directamente ni utilizarla manualmente para cifrar o descifrar los datos. Se utiliza AES-256 como algoritmo de cifrado. AES (Advanced Encryption Standard) es un cifrado simétrico por bloques cuya clave criptográfica es de 256 bits. Si confía plenamente en AWS, utilice este método de cifrado de S3.
SSE-KMS es un método ligeramente diferente de SSE-S3. AWS Key Management Service (KMS) se utiliza para cifrar los datos de S3 en el lado del servidor de Amazon. La clave de datos la administra AWS, pero un usuario administra la clave maestra de cliente (CMK) en AWS KMS. Las ventajas de utilizar el tipo de cifrado SSE-KMS son el control del usuario y la pista de auditoría.
Con SSE-C, las claves las proporciona el cliente y AWS no almacena las claves de cifrado. La clave proporcionada se pasa a AWS para gestionar cada solicitud relacionada con el cifrado o descifrado de datos. El usuario debe garantizar la seguridad de las llaves. El cifrado de datos de S3 se realiza en el lado del servidor de AWS. Sólo se puede utilizar una conexión HTTPS (no HTTP).
Cifrado del lado del cliente
Cuando se utiliza el cifrado del lado del cliente S3, el cliente es responsable de todas las operaciones de cifrado. En este caso, los datos no son cifrados por AWS, sino que se cifran en el lado del usuario. Los datos cifrados en el centro de datos del usuario se cargan directamente en AWS. Se ofrecen dos opciones para el cifrado del lado del cliente S3: se puede almacenar una clave maestra en el lado del cliente o en el lado del servidor. Si se almacena una clave maestra en el lado del cliente, éste asume toda la responsabilidad del cifrado. La ventaja de este enfoque es que Amazon nunca conoce las claves de cifrado del usuario y los datos nunca se almacenan en los servidores de Amazon sin cifrar. Un usuario cifra los datos antes de enviarlos a Amazon S3 y los descifra después de recuperarlos de Amazon S3.
¿Qué es el cliente de cifrado de Amazon S3?
El cliente de cifrado de Amazon S3 se utiliza para cifrar los datos en el lado del usuario. Se genera aleatoriamente una clave de cifrado de un solo uso que se utiliza para el cifrado de datos a nivel de cada objeto, lo que significa que puede haber objetos cifrados y no cifrados en el mismo bucket de Amazon S3. AmazonS3EncryptionClient es una clase pública para AWS SDK. Puede utilizar AWS SDK para Java, C++, Python, .NET y otros lenguajes de programación compatibles para crear sus propias aplicaciones que funcionen con Amazon S3 y que puedan utilizarse para cifrar los datos enviados a S3 y para descifrar los datos recibidos de S3 en el lado del cliente.
¿Cómo configurar el cifrado de AWS S3?
- Inicie sesión en la interfaz web de AWS. Tu cuenta debe tener permisos suficientes para editar los ajustes de S3.
- Vaya a la página de Amazon S3 (el enlace puede variar en función de su región y cuenta):
https://s3.console.aws.amazon.com/s3/home - Seleccione su cubo o cree uno nuevo para el que desee configurar los ajustes de cifrado.
- En la página con los ajustes del cubo, haga clic en la pestaña Propiedades y, a continuación, en Cifrado predeterminado.
- Los ajustes de cifrado ya están abiertos. Por defecto, la opción de cifrado de cubos S3 está desactivada.
- Seleccione la opción necesaria, por ejemplo, AES-256. Se trata de un cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3).Puede ver la política del bucket. Haga clic en Guardar para guardar los ajustes de cifrado del cubo. Los ajustes se utilizarán como ajustes de cifrado predeterminados de S3 para los objetos que se añadan a este bucket en el futuro.
- Haga clic en Guardar.
- Ahora está configurado el cifrado por defecto. Todos los nuevos objetos almacenados en el bucket de S3 se cifrarán según la configuración establecida. Se recomienda activar el cifrado al crear un cubo. También puede activar el cifrado posteriormente a nivel de cubo. Sin embargo, si configuras los ajustes de cifrado más tarde, estos ajustes no afectarán a los archivos sin cifrar que ya se hayan cargado en el bucket.
- Si desea seleccionar el cifrado AWS-KMS, haga clic en la opción correspondiente. En este caso, seleccione una clave de la lista desplegable.
Cifrado de objetos personalizados en el cubo
Veamos cómo cifrar objetos personalizados que ya se han cargado en un cubo y cuyos ajustes de cifrado son Ninguno.
Abre tu bucket en la interfaz web de AWS. Puedes ver tus objetos S3 en la pestaña Visión General. Haga clic en el objeto (un archivo o directorio) para ver los ajustes de cifrado actuales aplicados a este objeto. Las propiedades y permisos del objeto se muestran en la ventana emergente. Como puede ver en la siguiente captura de pantalla, el archivo cargado no está cifrado (Cifrado: Ninguno).
Seleccione un objeto o varios, haga clic en Acciones y, a continuación, en Cambiar cifrado para cambiar los ajustes de cifrado de los objetos personalizados de su bucket de S3.
En la ventana que se abre, seleccione el tipo de cifrado necesario, por ejemplo, AES-256, y haga clic en Guardar.
En la ventana de confirmación, compruebe los objetos seleccionados que se verán afectados por los nuevos ajustes de cifrado y haga clic en Cambiar.
Ahora el cifrado está configurado para los objetos seleccionados.
Tenga en cuenta que después de establecer los ajustes de cifrado para todo el cubo, los archivos que se hayan subido al cubo antes de activar el cifrado quedarán sin cifrar. Si hay un gran número de objetos en su bucket de S3, puede ser difícil encontrar y seleccionar todos los objetos no cifrados que deben ser cifrados. Para seleccionar los objetos no cifrados de un bucket con cifrado activado, puede utilizar el Inventario de Amazon S3 o la CLI de AWS.
Debe identificar los objetos no cifrados y, a continuación, puede volver a cargar esos objetos para cifrarlos con el nivel de cifrado predeterminado del bucket de S3 establecido para todo el bucket. Si no desea buscar objetos S3 sin cifrar en su cubo (cubo1, por ejemplo), puede crear un nuevo cubo (cubo2), copiar todos los archivos del cubo1 al cubo2 y, a continuación, volver a copiar todos los archivos del cubo2 al cubo1.
Puede copiar objetos no cifrados reescribiéndolos con el comando copy de la CLI de AWS definiendo el método de cifrado, por ejemplo, –sse habilita el cifrado SSE-S3 de 128 bits sin crear un nuevo bucket:
aws s3 cp s3://mybucket/myfile.zip s3://mybucket/myfile.zip --sse
Tras la reescritura, el archivo queda cifrado. Tenga en cuenta que los atributos de archivo, como la hora de creación y modificación del archivo, se modifican tras la reescritura. Es posible que las aplicaciones que puedan leer estos atributos (fecha y hora de creación/última modificación del archivo) y utilizarlos para trabajar con archivos almacenados en buckets de Amazon S3 no se comporten como se espera tras reescribir los archivos.
Si las opciones de gestión del ciclo de vida están habilitadas para su bucket de AWS S3 por motivos de rentabilidad, pueden producirse algunos problemas. Por ejemplo, puede establecer la configuración del ciclo de vida para eliminar los archivos creados o modificados hace 6 meses. Los archivos antiguos se eliminan automáticamente, se utiliza menos espacio de almacenamiento en la nube y pagas menos dinero por el almacenamiento en la nube. Cuando la marca de tiempo LastModified (fecha/hora de la última modificación) se reescribe para un archivo antiguo que está a punto de eliminarse pronto, la función de gestión del ciclo de vida detecta este archivo como un archivo creado recientemente que no debe eliminarse durante mucho tiempo (por ejemplo, durante 6 meses, como se ha mencionado anteriormente). Como resultado, se almacenan más archivos en el cubo, lo que conlleva mayores costes.
Si el control de versiones está activado, se crea una nueva versión cifrada de un objeto. Las versiones anteriores del objeto se dejan sin cifrar.
Carga de objetos a través de la CLI de AWS
AWS CLI puede utilizarse en otros casos en los que necesite copiar archivos a Amazon S3 o desde Amazon S3 con opciones de cifrado. También puede utilizar esta interfaz de línea de comandos para copiar objetos dentro de un bucket de S3 y de un bucket a otro. Puede configurar las opciones de cifrado de los archivos que se cargan mediante la CLI en el bucket en los casos en que los ajustes de cifrado predeterminados del bucket y los ajustes de cifrado que deben utilizarse para los archivos que se cargan sean diferentes. Veamos ejemplos de uso de comandos de la CLI de AWS en bash.
Copie un archivo del equipo local al bucket de AWS S3 y configure el cifrado del lado del servidor (cifrado SSE-S3):
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse AES256
Copiar y descifrar un archivo de AWS S3 a un disco local:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
Cargar y cifrar el archivo desde un disco local a un bucket S3 utilizando el cifrado SSE-KMS:
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse aws:kms
Descargar y descifrar un archivo de un bucket de S3 a un disco local:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
Conclusión
El cifrado de Amazon S3 le ayuda a proteger los datos almacenados en los buckets de AWS S3 en la nube, y esto es especialmente importante para los datos confidenciales. El cifrado de AWS S3 puede realizarse en el lado del servidor de Amazon y en el lado del cliente de un cliente. Las claves secretas pueden almacenarse en el servidor y en el cliente. Si está pensando en utilizar el cifrado de Amazon S3 para los objetos que vaya a almacenar en buckets de S3, habilite el cifrado al crear un bucket. Si ya está utilizando un cubo y los objetos almacenados en él no están cifrados, puede activar el cifrado de esos objetos. Sin embargo, en ese caso, hay algunas cuestiones que debe tener en cuenta.
Utilizar el cifrado es una buena idea para aumentar el nivel de seguridad y proteger sus datos contra el acceso de terceros. Además de utilizar el cifrado de AWS, considere realizar backups de AWS S3 y backups de AWS EC2 para mejorar la seguridad de sus datos.