URL prefirmada de Amazon S3 con la AWS SDK for PHP versión 3 - AWS SDK for PHP

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

URL prefirmada de Amazon S3 con la AWS SDK for PHP versión 3

Puede autenticar determinados tipos de solicitudes pasando la información requerida como parámetros de una cadena de consulta, en lugar de usar el encabezado de autorización HTTP. Esto resulta útil para permitir el acceso directo de navegadores de terceros a sus datos de Amazon S3 privados, sin enviar la solicitud por proxy. La idea es construir una solicitud "prefirmada" y codificarla como una URL que pueda recuperar el navegador de un usuario final. Además, puede limitar una solicitud prefirmada especificando una fecha de vencimiento.

Los siguientes ejemplos muestran cómo:

Todo el código de ejemplo para el AWS SDK for PHP está disponible aquí en GitHub.

Credenciales

Antes de ejecutar el código de ejemplo, configure sus AWS credenciales, tal y como se describe enCredentials. A continuación, importe las AWS SDK for PHP, tal y como se describe enUso básico.

Crear una solicitud prefirmada

Puede obtener la URL prefirmada de un objeto de Amazon S3 utilizando el método Aws\S3\S3Client::createPresignedRequest(). Este método acepta un objeto Aws\CommandInterface y una marca de tiempo caducada y devuelve un objeto Psr\Http\Message\RequestInterface prefirmado. Para obtener la URL prefirmada del objeto, utilice el método getUri() de la solicitud.

La situación más habitual consiste en crear una URL prefirmada para obtener un objeto.

Importaciones

use Aws\Exception\AwsException; use AwsUtilities\PrintableLineBreak; use AwsUtilities\TestableReadline; use DateTime; require 'vendor/autoload.php';

Código de muestra

$command = $s3Service->getClient()->getCommand('GetObject', [ 'Bucket' => $bucket, 'Key' => $key, ]);

Crear una URL prefirmada

Puede crear URL prefirmadas para cualquier operación de Amazon S3 utilizando el método getCommand para crear un objeto de comando y, a continuación, llamar al método createPresignedRequest() con el comando. Cuando al final se envía la solicitud, asegúrese de utilizar el mismo método y los mismos encabezados que en la solicitud devuelta.

Código de muestra

try { $preSignedUrl = $s3Service->preSignedUrl($command, $expiration); echo "Your preSignedUrl is \n$preSignedUrl\nand will be good for the next 20 minutes.\n"; echo $linebreak; echo "Thanks for trying the Amazon S3 presigned URL demo.\n"; } catch (AwsException $exception) { echo $linebreak; echo "Something went wrong: $exception"; die(); }

Obtener la URL a un objeto

Si solo necesita la URL pública a un objeto almacenado en un bucket de Amazon S3, puede usar el método Aws\S3\S3Client::getObjectUrl(). Este método devuelve una URL sin firmar al bucket y clave indicados.

Código de muestra

$preSignedUrl = $s3Service->preSignedUrl($command, $expiration);
importante

La URL devuelta por este método no está validada para garantizar que el bucket o la clave existan y este método tampoco asegura que el objeto permita el acceso sin autenticar.