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á.
Assinatura de URLs do Amazon CloudFront com o AWS SDK para PHP versão 3
As URLs assinadas permitem fornecer acesso aos usuários a seu conteúdo privado. Um URL assinado inclui informações adicionais (por exemplo, um horário de expiração) que proporcionam a você mais controle sobre o acesso a seu conteúdo. Essas informações adicionais são descritas em uma declaração de política, que é baseada em uma política padrão ou personalizada. Para obter informações sobre como configurar distribuições privadas e por que você precisa assinar URLs, consulte Como fornecer conteúdo privado por meio do Amazon CloudFront no Guia do desenvolvedor do Amazon CloudFront.
-
Crie um URL assinado do Amazon CloudFront usando getSignedURL.
-
Crie um cookie assinado do Amazon CloudFront usando getSignedCookie.
O código de exemplo completo do AWS SDK para PHP está disponível aqui no GitHub
Credenciais
Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em Autenticando com o AWS uso da AWS SDK para PHP versão 3. Em seguida, importe o AWS SDK para PHP, conforme descrito em Instalar o AWS SDK para PHP versão 3.
Para obter mais informações sobre o uso do Amazon CloudFront, consulte o Guia do desenvolvedor do Amazon CloudFront.
Assinatura de URLs do CloudFront para distribuições privadas
Você pode assinar um URL usando o cliente do CloudFront no SDK. Primeiro, você deve criar um objeto CloudFrontClient. Você pode assinar um URL do CloudFront para um recurso de vídeo usando uma política padrão ou personalizada.
Importações
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
Código de exemplo
function signPrivateDistribution( $cloudFrontClient, $resourceKey, $expires, $privateKey, $keyPairId ) { try { $result = $cloudFrontClient->getSignedUrl([ 'url' => $resourceKey, 'expires' => $expires, 'private_key' => $privateKey, 'key_pair_id' => $keyPairId ]); return $result; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function signAPrivateDistribution() { $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt'; $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now. $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem'; $keyPairId = 'AAPKAJIKZATYYYEXAMPLE'; $cloudFrontClient = new CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); echo signPrivateDistribution( $cloudFrontClient, $resourceKey, $expires, $privateKey, $keyPairId ); } // Uncomment the following line to run this code in an AWS account. // signAPrivateDistribution();
Usar uma política personalizada ao criar URLs do CloudFront
Para usar uma política personalizada, forneça a chave policy em vez de expires.
Importações
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
Código de exemplo
function signPrivateDistributionPolicy( $cloudFrontClient, $resourceKey, $customPolicy, $privateKey, $keyPairId ) { try { $result = $cloudFrontClient->getSignedUrl([ 'url' => $resourceKey, 'policy' => $customPolicy, 'private_key' => $privateKey, 'key_pair_id' => $keyPairId ]); return $result; } catch (AwsException $e) { return 'Error: ' . $e->getAwsErrorMessage(); } } function signAPrivateDistributionPolicy() { $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt'; $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now. $customPolicy = <<<POLICY { "Statement": [ { "Resource": "$resourceKey", "Condition": { "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"}, "DateLessThan": {"AWS:EpochTime": $expires} } } ] } POLICY; $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem'; $keyPairId = 'AAPKAJIKZATYYYEXAMPLE'; $cloudFrontClient = new CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); echo signPrivateDistributionPolicy( $cloudFrontClient, $resourceKey, $customPolicy, $privateKey, $keyPairId ); } // Uncomment the following line to run this code in an AWS account. // signAPrivateDistributionPolicy();
Usar um URL assinado do CloudFront
A forma do URL assinado será diferente, dependendo se o URL que você está assinando estiver usando o esquema "HTTP" ou "RTMP". No caso de "HTTP", o URL absoluto e completo será retornado. Para "RTMP", somente o URL relativo será retornado para sua conveniência. Isso ocorre porque alguns jogadores requerem que o host e o caminho sejam fornecidos como parâmetros separados.
O exemplo a seguir mostra como você pode usar a URL assinada para construir uma página da web que exibe um vídeo usando o JWPlayer
<html> <head> <title>|CFlong| Streaming Example</title> <script type="text/javascript" src="https://example.com/jwplayer.js"></script> </head> <body> <div id="video">The canned policy video will be here.</div> <script type="text/javascript"> jwplayer('video').setup({ file: "<?= $streamHostUrl ?>/cfx/st/<?= $signedUrlCannedPolicy ?>", width: "720", height: "480" }); </script> </body> </html>
Assinatura de cookies do CloudFront para distribuições privadas
Como alternativa às URLs assinadas, você também pode conceder acesso a uma distribuição privada aos clientes por meio de cookies assinados. Os cookies assinados permitem fornecer acesso a vários arquivos restritos, como todos os arquivos de um vídeo no formato HLS ou todos os arquivos na área dos assinantes de um site. Para obter mais informações sobre a preferência pelo uso de cookies assinados, em vez de URLs assinadas (ou vice-versa), consulte Como escolher entre URLs assinadas e cookies assinados no Guia do desenvolvedor do Amazon CloudFront.
A criação de um cookie assinado é semelhante à criação de uma URL assinada. A única diferença é o método que é chamado (getSignedCookie em vez de getSignedUrl).
Importações
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
Código de exemplo
function signCookie( $cloudFrontClient, $resourceKey, $expires, $privateKey, $keyPairId ) { try { $result = $cloudFrontClient->getSignedCookie([ 'url' => $resourceKey, 'expires' => $expires, 'private_key' => $privateKey, 'key_pair_id' => $keyPairId ]); return $result; } catch (AwsException $e) { return [ 'Error' => $e->getAwsErrorMessage() ]; } } function signACookie() { $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt'; $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now. $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem'; $keyPairId = 'AAPKAJIKZATYYYEXAMPLE'; $cloudFrontClient = new CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); $result = signCookie( $cloudFrontClient, $resourceKey, $expires, $privateKey, $keyPairId ); /* If successful, returns something like: CloudFront-Expires = 1589926678 CloudFront-Signature = Lv1DyC2q...2HPXaQ__ CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE */ foreach ($result as $key => $value) { echo $key . ' = ' . $value . "\n"; } } // Uncomment the following line to run this code in an AWS account. // signACookie();
Usar uma política personalizada ao criar cookies do CloudFront
Assim como ocorre com getSignedUrl, você pode fornecer um parâmetro 'policy' em vez de um parâmetro expires e de um parâmetro url para assinar um cookie com uma política personalizada. Uma política personalizada pode conter caracteres curinga na chave do recurso. Isso permite criar um único cookie assinado para vários arquivos.
getSignedCookie retorna uma matriz de pares de chave-valor, que devem ser definidos como cookies para conceder acesso a uma distribuição privada.
Importações
require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;
Código de exemplo
function signCookiePolicy( $cloudFrontClient, $customPolicy, $privateKey, $keyPairId ) { try { $result = $cloudFrontClient->getSignedCookie([ 'policy' => $customPolicy, 'private_key' => $privateKey, 'key_pair_id' => $keyPairId ]); return $result; } catch (AwsException $e) { return [ 'Error' => $e->getAwsErrorMessage() ]; } } function signACookiePolicy() { $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt'; $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now. $customPolicy = <<<POLICY { "Statement": [ { "Resource": "{$resourceKey}", "Condition": { "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"}, "DateLessThan": {"AWS:EpochTime": {$expires}} } } ] } POLICY; $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem'; $keyPairId = 'AAPKAJIKZATYYYEXAMPLE'; $cloudFrontClient = new CloudFrontClient([ 'profile' => 'default', 'version' => '2018-06-18', 'region' => 'us-east-1' ]); $result = signCookiePolicy( $cloudFrontClient, $customPolicy, $privateKey, $keyPairId ); /* If successful, returns something like: CloudFront-Policy = eyJTdGF0...fX19XX0_ CloudFront-Signature = RowqEQWZ...N8vetw__ CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE */ foreach ($result as $key => $value) { echo $key . ' = ' . $value . "\n"; } } // Uncomment the following line to run this code in an AWS account. // signACookiePolicy();
Enviar cookies do CloudFront para o cliente Guzzle
Você também pode passar esses cookies para um GuzzleHttp\Cookie\CookieJar para uso com um cliente do Guzzle.
use GuzzleHttp\Client; use GuzzleHttp\Cookie\CookieJar; $distribution = "example-distribution.cloudfront.net"; $client = new \GuzzleHttp\Client([ 'base_uri' => "https://$distribution", 'cookies' => CookieJar::fromArray($signedCookieCustomPolicy, $distribution), ]); $client->get('video.mp4');
Para ter mais informações, consulte Usar Signed Cookies no Guia do desenvolvedor do Amazon CloudFront.