PHP y Amazon KMS para cifrado

0

Tengo un proyecto de portal médico de auto acceso para que los pacientes vean su historial de visitas e información de consultas.

Algunos campos de la base de datos deben estar cifrados. El motivo es que, en caso de que la base de datos obtenga acceso no autorizado, no deberían ver los datos de texto sin formato.

Estaremos usando PHP 7 para el proyecto. He leído que se recomienda usar en las funciones de cifrado y descifrado de openssl.

Para la clave de cifrado pensaba utilizar Amazon KMS para administrar las claves.

Para los servidores, tenemos la intención de tener todo configurado en Amazon. Creo que podemos configurar los roles IAM para que EC2 tenga acceso seguro al servicio KMS.

Los usuarios accederán al sitio usando https. Cada vez que se consultan datos confidenciales o antes de que se guarden en la base de datos, el script php lo cifrará y descifrará utilizando las funciones kms y openssl.

Me pregunto si esta configuración es lo suficientemente segura como para cifrar los datos. Otras preocupaciones serían hacer una consulta SQL para buscar datos. Con los datos cifrados, las búsquedas con LIKE% foo% no parecen posibles.

¿Hay una mejor manera de hacerlo?

    
pregunta darnpunk 04.03.2017 - 02:20
fuente

1 respuesta

1

La configuración puede considerarse segura. Usted mantiene los datos descifrados sólo en la memoria. Normalmente, utilizará una clave por fila para cifrar los datos confidenciales. Sin embargo, no puede buscar los datos en la base de datos (como mencionó). Depende del caso de uso, es posible que pueda resolver el problema mediante la codificación de los datos confidenciales. Cuando desea buscar un valor en particular, puede marcar el valor antes de buscarlo. Sin embargo, solo puede realizar una búsqueda de coincidencias exactas y no una con comodines (¡el operador "Me gusta" no funcionará!).

Un enfoque completamente diferente sería cifrar toda la base de datos. Los datos se almacenan encriptados en el disco duro. Cuando usa AWS con RDS, puede implementar esta estrategia fácilmente: enlace

Todas las copias de seguridad están cifradas y los datos en sí también se almacenan cifrados. Sin embargo, si alguien accede a la base de datos cuando se está ejecutando, los datos no están cifrados para este usuario en particular. Significa que cuando le otorgas a alguien el permiso para acceder a los datos, será descifrado. Sin embargo, al final todo se reduce a cómo configurar sus roles de IAM. O confía en los roles IAM para el KMS o para el RDS. Así que si configura los roles IAM correctamente, estará bien. AWS admite desde hace algunas semanas también la replicación entre regiones de dichas instancias de base de datos cifradas.

Normalmente, se aceptan ambos enfoques para PCI DSS y para el cumplimiento con HIPAA. Al buscar una forma de buscar los datos, también recomendaría el segundo enfoque.

Cifrado de disco con RDS

RDS utiliza un volumen EBS para almacenar los datos. Los datos en el volumen de EBS se pueden cifrar (consulte enlace ). Significa que cuando la instancia RDS está accediendo al volumen EBS, los datos están encriptados resp. descifrado de forma transparente. Significa la lectura resp. La operación de escritura desencadena un descifrado resp. Un cifrado de los datos. Aquí encontrará los detalles sobre cómo configurar RDS con volúmenes de EBS cifrados: enlace Esencialmente, durante la creación de la instancia, debe especificar si se debe cifrar o no.

Una vez que haya configurado esto, debe configurar un usuario en la base de datos que le permita acceder a la base de datos. Finalmente, también necesitará un rol de IAM que le permita modificar la instancia de la base de datos a través de su aplicación. No sé si necesitas más tarde. Realmente depende de tu caso de uso.

Lo último que recomiendo es cifrar la comunicación entre su aplicación y la instancia RDS.

Resumido, los datos nunca se almacenan sin cifrar. Los datos siempre se descifran cuando se utilizan y los datos no cifrados solo se guardan en la memoria (RAM).

    
respondido por el Thomas Hunziker 04.03.2017 - 21:51
fuente

Lea otras preguntas en las etiquetas