Pre-signed URL do Amazon S3 com o AWS SDK for PHP versão 3 - AWS SDK for PHP

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Pre-signed URL do Amazon S3 com o AWS SDK for PHP versão 3

Você pode autenticar determinados tipos de solicitações passando as informações necessárias como parâmetros de query string em vez de usar o cabeçalho de autorização HTTP. Isso é útil para habilitar o acesso de navegadores de terceiros a seus dados privados do Amazon S3 sem um proxy na solicitação. A ideia é construir uma solicitação “pré-assinada” e codificá-la como um URL que o navegador de um usuário final pode recuperar. Além disso, você pode limitar uma solicitação pré-assinada, especificando um tempo de expiração.

Os exemplos a seguir mostram como:

Todo o código de exemplo do AWS SDK for PHP está disponível aqui em GitHub.

Credenciais

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em Credenciais. Em seguida, importe o AWS SDK for PHP, conforme descrito em Uso básico.

Criação de uma solicitação pré-assinada

Você pode obter a pre-signed URL para um objeto do Amazon S3 usando o método Aws\S3\S3Client::createPresignedRequest(). Esse método aceita um objeto Aws\CommandInterface e um timestamp expirado e retorna um objeto Psr\Http\Message\RequestInterface pré-assinado. Você pode recuperar a pre-signed URL do objeto usando o método getUri() da solicitação.

O cenário mais comum é criar uma pre-signed URL para GET de um objeto.

Importações

require 'vendor/autoload.php';

Código de exemplo

$s3Client = new Aws\S3\S3Client([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2006-03-01', ]); $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes');

Criação de uma Pre-Signed URL

Você pode criar pre-signed URLs para qualquer operação do Amazon S3 por meio do método getCommand para criar um objeto de comando e, em seguida, chamar o método createPresignedRequest() com o comando. Ao, finalmente, enviar a solicitação, use o mesmo método e os mesmos cabeçalhos da solicitação retornada.

Código de exemplo

//Creating a presigned URL $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes'); // Get the actual presigned-url $presignedUrl = (string)$request->getUri();

Obtenção da URL para um objeto

Se você precisar só da URL pública de um objeto armazenado em um bucket do Amazon S3, poderá usar o método Aws\S3\S3Client::getObjectUrl(). Esse método retorna uma URL não assinada para os determinados bucket e chave.

Código de exemplo

//Getting the URL to an object $url = $s3Client->getObjectUrl('my-bucket', 'my-key');
Importante

A URL retornada por esse método não é validada para verificar a existência do bucket ou da chave nem garante que o objeto permita acesso não autenticado.