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:
-
Cree una URL prefirmada para createPresignedRequestutilizarla con un objeto de S3.
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.