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á.
Amazon S3 pré-assinado URL com a versão 3 AWS SDK for PHP
Você pode autenticar certos tipos de solicitações passando as informações necessárias como parâmetros de sequência de caracteres de consulta em vez de usar o cabeçalho Authorization. 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 é criar uma solicitação “pré-assinada” e codificá-la para URL que o navegador do usuário final possa 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 um pré-assinado URL para obter um objeto do S3 usando. createPresignedRequest
Todo o código de exemplo para o AWS SDK for PHP está disponível aqui em GitHub
Credenciais
Antes de executar o código de exemplo, configure suas AWS credenciais, conforme descrito emCredenciais. Em seguida, importe o AWS SDK for PHP, conforme descrito emUso básico.
Criação de uma solicitação pré-assinada
Você pode obter o pré-assinado URL para um objeto do Amazon S3 usando o Aws\S3\S3Client::createPresignedRequest()
método. 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 o pré-assinado URL do objeto usando o getUri()
método da solicitação.
O cenário mais comum é criar um GET objeto pré-assinadoURL.
Importações
use Aws\Exception\AwsException;
use AwsUtilities\PrintableLineBreak;
use AwsUtilities\TestableReadline;
use DateTime;
require 'vendor/autoload.php';
Código de exemplo
$command = $s3Service->getClient()->getCommand('GetObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
Criando um pré-assinado URL
Você pode criar pré-assinados URLs para qualquer operação do Amazon S3 usando getCommand
o método para criar um objeto de comando e, em seguida, chamar createPresignedRequest()
o método 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
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();
}
Chegando URL a um objeto
Se você só precisa do público URL para um objeto armazenado em um bucket do Amazon S3, você pode usar o Aws\S3\S3Client::getObjectUrl()
método. Esse método retorna um valor não assinado URL para o bucket e a chave fornecidos.
Código de exemplo
$preSignedUrl = $s3Service->preSignedUrl($command, $expiration);
Importante
O URL retornado por esse método não é validado para garantir que o bucket ou a chave existam, nem esse método garante que o objeto permita acesso não autenticado.