java - programacion - Cómo establecer el tiempo de caducidad de URL preseleccionado de cubo de Amazon S3 en 1 año a partir de la fecha actual
manual de programacion android pdf (1)
Las imágenes se cargan en un cubo de Amazon S3. Necesito obtener una URL prestada del servidor de Amazon. También quiero establecer el tiempo de caducidad de esa URL. Eso puede tomar solo un máximo de 17 días. Pero no puedo establecer un máximo de 1 año de vencimiento.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
Date nextYear = cal.getTime();
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
"bucketName", "accessname");
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest
.setExpiration(nextYear);
URL url = s3client
.generatePresignedUrl(generatePresignedUrlRequest);
bucketURL = url.toString();
No "obtiene" una URL firmada previamente "del servidor". El cálculo de la firma se realiza en el cliente. Las URL con firma previa en realidad se calculan en su máquina, no por el servicio.
Si está utilizando un SDK actual, probablemente esté usando Signature V4. Si la URL firmada incluye X-Amz-Signature=
entonces esto confirma V4. El antiguo algoritmo V2 solo usa Signature=
en una URL firmada.
Si su firma es de hecho V4, entonces está viendo una limitación intencional:
Una URL preseleccionada puede ser válida por un máximo de siete días porque la clave de firma que utiliza en el cálculo de firma es válida por hasta siete días.
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
Si ya está utilizando V2, debería poder firmar URLs con fechas de vencimiento tan tardías como el año 2038. Si está utilizando V4, podría evitar la limitación al cambiar a usar V2, pero esto no es aconsejable. V2 no es compatible con las regiones S3 más nuevas, como Frankfurt, y si gira sus claves de acceso AWS como debería, la invalidación de la clave eventualmente también invalidará cualquier firma creada con esa clave.
El enfoque más correcto en la mayoría de los casos es generar la URL firmada cuando la necesite. Esa operación, como se señaló, no requiere interacción con el servicio S3 y, por lo general, se puede hacer en tiempo real.
Si necesita dar acceso a un usuario específico a un "enlace directo", considere crear un punto final en su aplicación donde se puedan evaluar las credenciales del usuario, en cuyo punto puede generar una URL firmada y redirigir el navegador con una respuesta HTTP 302
.