La solución correcta al 100%, obviamente, sería no hacer que los archivos sean legibles y escribibles públicamente. Esto está fuera de su control aquí, pero tampoco es estrictamente necesario.
El servidor está configurado de manera similar a cómo se configuraron las carpetas incoming
en los servidores FTP durante 30-40 años: puede cd
en ese directorio y crear / escribir archivos, y leer cualquier archivo que puede abrir, pero no puede enumerar los contenidos del directorio (y, opcionalmente, puede crear y escribir cualquier archivo, pero no sobrescribir uno existente).
Suponiendo que los nombres de los archivos no se pueden adivinar, esto es seguro en la medida en que no se puede hacer mucho sin saber el nombre de un archivo. Un UUID tiene 128 bits, pero puede usar cualquier otro nombre de archivo aleatorio del mismo o mayor tamaño (o un nombre aleatorio de 160 bits, si cree que 128 bits no son suficientes).
Si bien en teoría es posible adivinar un número aleatorio de 128 bits (e incluso existe la posibilidad de que dos nombres de archivos colisionen por accidente), las posibilidades de que esto ocurra son astrónimamente pequeñas dado el tiempo que lleva acceder a un archivo. a través de la red (lo que limita gravemente la cantidad de operaciones por segundo que puede hacer). Esto es muy diferente de, por ejemplo, Alguien forzó brutalmente un hash de una base de datos de contraseñas robadas, donde el atacante normalmente intentaría unos cientos de millones de hashes por segundo.
Probablemente es más probable que mueras por ser golpeado por un meteoro que por ver esto en tu vida.
Además, un rápido Google dice que S3 admite carpetas, por lo que si está en modo ultra-paranoico, puede crear una carpeta con un nombre UUID y colocar sus archivos con nombre UUID allí. Alguien tendría que adivinar un número de 256 bits correctamente para acceder a un archivo, puede estar bastante seguro de que esto no sucederá durante su vida.