Definición de Hack
No estoy seguro de lo que significa piratear en el contexto de su pregunta.
Supongo que realmente quiere decir "que cualquiera puede hacer algo diferente a cargar un archivo", que incluye eliminar o acceder a objetos dentro de su cubo.
Tu solución
Como Ninad ya mencionó anteriormente, puede usar su enfoque actual habilitando "Habilitar el acceso a identidades no autenticadas" [1]. Luego deberá crear dos roles, uno de los cuales es para "usuarios no autenticados". Podrías otorgarle permisos de PutObject a la función S3. Esto permitiría que todos los que visiten su página carguen objetos en el bucket de S3. Creo que eso es lo que pretende y está bien desde el punto de vista de la seguridad, ya que IdentityPoolId es un valor público (es decir, no confidencial).
Otra solución
Supongo que no necesita usar Amazon Cognito para lograr lo que desea. Probablemente sea suficiente agregar una política de depósito a S3 que otorgue permiso para PutObject a todos.
¿Es esto seguro?
Sin embargo, no recomendaría habilitar el acceso directo de escritura pública a su bucket de S3.
Si alguien abusara de su sitio web enviando correo no deseado a su formulario de carga, incurrirá en cargos S3 por las operaciones de colocación y el almacenamiento de datos.
Sería un mejor enfoque enviar los datos a través de Amazon CloudFront y aplicar un WAF con reglas basadas en la tasa [2] o implementar un servicio personalizado de limitación de la tasa frente a su carga S3. Esto aseguraría que pueda reaccionar adecuadamente ante una actividad maliciosa.
Referencias
[1] https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html
[2] https://aws.amazon.com/about-aws/whats-new/2019/08 / reglas-basadas-en-tasa-baja-umbral-inferior-para-aws /