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:
-
Crie uma URL pré-assinada para usar um objeto do S3. createPresignedRequest
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.