Así es como estoy generando una URL prefirmada para un objeto S3 desde mi secuencia de comandos de python.
s3client = boto3.client("s3") url = s3client.generate_presigned_url("get_object", Params={"Bucket": args.bucket, "Key": dated_filename}, ExpiresIn=86400)donde estoy dando una caducidad de 24 horas.
Cuando trato de descargar el archivo inmediatamente usando la URL de un navegador, funciona. Pero no funciona si trato de descargarlo, digamos después de 10-12 horas (no sé el tiempo exacto después del cual comienza a fallar).
Este es el error que estoy recibiendo.
<Code>ExpiredToken</Code> <Message>The provided token has expired.</Message>No estoy seguro si es un error o no lo estoy haciendo de la manera correcta. Cualquier ayuda sería apreciada.
¿Se está ejecutando bajo un rol de IAM? Una URL prefirmada solo es válida mientras la clave de sesión que se utilizó al generarla. Si se está autenticando como usuario de IAM con claves de acceso de larga duración, esto no es un problema. Pero los roles de IAM usan claves de acceso temporales que se repiten cada 36 horas.
Sabe que su clave de sesión ha caducado porque está recibiendo el mensaje "El token proporcionado ha caducado". error, que (como se indicó anteriormente) es un mensaje de error diferente a "La solicitud ha caducado" que recibe cuando la URL prefirmada alcanza su fecha de vencimiento.
Además, las URL prefirmadas tienen un límite estricto de 7 días, pero ese no parece ser su problema.
Se trata de las credenciales de AWS que está utilizando, consulte https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/