He buscado durante mucho tiempo, pero veo que nadie tiene los siguientes escenarios, así que aprecio mucho si alguien puede ayudar.
Queremos descargar un archivo grande usando la URL prefirmada de S3, pero estamos usando el cifrado del lado del cliente usando KMS, por razones de seguridad, para cargar el archivo.
Una de las opciones es usar el SDK de cifrado de AWS para cifrar el archivo en el navegador, subirlo a S3 en el backend y luego descifrarlo en el navegador después de obtener el archivo de la URL prefirmada. Pero me preocupa la exposición de credenciales en el navegador del usuario. En documentos de AWS https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/js-examples.html()
Comience proporcionando sus credenciales al navegador. Los ejemplos de SDK de cifrado de AWS para JavaScript utilizan webpack.DefinePlugin, que reemplaza las constantes de credenciales con sus credenciales reales. Pero puede usar cualquier método para proporcionar sus credenciales. Luego, use las credenciales para crear un cliente de AWS KMS.
Pero me preocupa la exposición de credenciales en el navegador del usuario.
Al usar el cifrado del lado del cliente, se supone que el secreto cifrado es aleatorio y único/específico del contenido (usando el cifrado del sobre).
Entonces, si el cliente tiene derecho al contenido (para ser descargado), entonces puede estar bien darle al cliente la clave para descifrar el contenido (puede considerar la clave como parte del contenido). La clave (clave de datos) no debe usarse para descifrar nada más.