Firma di Amazon CloudFront URL conAWS SDK for PHPVersione 3 - AWS SDK for PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Firma di Amazon CloudFront URL conAWS SDK for PHPVersione 3

Gli URL firmati ti consentono di fornire agli utenti l'accesso ai tuoi contenuti privati. Un URL firmato include ulteriori informazioni (ad esempio, un'ora di scadenza) che offrono un maggiore controllo sull'accesso ai contenuti. Queste informazioni aggiuntive appaiono in una dichiarazione di policy, basata su una policy predefinita o personalizzata. Per ulteriori informazioni su come configurare le distribuzioni private e sul perché è necessario firmare gli URL, consultaDistribuzione di contenuto privato tramite Amazon CloudFrontin Amazzonia CloudFront Guida per sviluppatori di .

  • Creazione di Amazon firmata CloudFront URL utilizzandogetSignedURL.

  • Creazione di Amazon firmata CloudFront utilizzo di cookiegetSignedCookie.

La versione integrale del codice di esempio di AWS SDK for PHP è disponibile qui su GitHub.

Credenziali

Prima di eseguire il codice di esempio, configurareAWScredenziali, come descritto inImpostazione delle credenziali . Quindi importaAWS SDK for PHPcome descritto inUtilizzo di base.

Per ulteriori informazioni sull'utilizzo di Amazon CloudFront, consulta laAmazon CloudFront Guida per gli sviluppatori.

Firma CloudFront URL per distribuzioni private

È possibile firmare un URL utilizzando CloudFront client nell'SDK. Innanzitutto, è necessario creare un oggetto CloudFrontClient. Puoi firmare un CloudFront URL per una risorsa video utilizzando una policy personalizzata o personalizzata.

Importazioni

require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;

Codice di esempio

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' => '2014-11-06', 'region' => 'us-east-1' ]); echo signPrivateDistribution($cloudFrontClient, $resourceKey, $expires, $privateKey, $keyPairId); } // Uncomment the following line to run this code in an AWS account. // signAPrivateDistribution();

Utilizzo di una policy personalizzata durante la creazione CloudFront URL

Per utilizzare una policy personalizzata, offri la chiave policy anziché expires.

Importazioni

require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;

Codice di esempio

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' => '2014-11-06', 'region' => 'us-east-1' ]); echo signPrivateDistributionPolicy($cloudFrontClient, $resourceKey, $customPolicy, $privateKey, $keyPairId); } // Uncomment the following line to run this code in an AWS account. // signAPrivateDistributionPolicy();

Usa CloudFront URL firmati

Il formato dell'URL firmato varia a seconda che l'URL che si sta firmando utilizzi lo schema "HTTP" o "RTMP". Nel caso di "HTTP", viene restituito un URL completo e assoluto. Se viene utilizzato lo schema "RTMP", per praticità viene restituito solo un URL relativo. Ciò è dovuto al fatto che alcuni lettori richiedono che l'host e il percorso vengano forniti come parametri separati.

L'esempio seguente illustra in che modo è possibile utilizzare un URL firmato per creare una pagina Web che mostra un video utilizzando JWPlayer. Lo stesso tipo di tecnica può essere applicata ad altri lettori, ad esempio FlowPlayer, ma è richiesto un diverso codice lato client.

<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>

Firma CloudFront Cookie per distribuzioni private

In alternativa agli URL firmati, è possibile concedere l'accesso dai client a una distribuzione privata mediante cookie firmati. I cookie firmati consentono di fornire accesso a più file con restrizioni, ad esempio, tutti i file per un video in formato HLS o tutti i file nell'area abbonati di un sito Web. Per ulteriori informazioni sui motivi per cui è possibile utilizzare cookie firmati anziché URL firmati (o viceversa), consultaScelta tra URL e cookie firmatiin Amazzonia CloudFront Guida per sviluppatori di .

Il processo di creazione di un cookie firmato è simile a quello di creazione di un URL firmato. L'unica differenza è il metodo che viene chiamato (getSignedCookie anziché getSignedUrl).

Importazioni

require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;

Codice di esempio

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' => '2014-11-06', '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();

Utilizzo di una policy personalizzata durante la creazione CloudFront Cookie

Analogamente a getSignedUrl, è possibile fornire un parametro 'policy' anziché un parametro expires e un parametro url per firmare un cookie con una policy personalizzata. Una policy personalizzata può contenere caratteri jolly nella chiave risorsa. In questo modo è possibile creare un singolo cookie firmato per più file.

getSignedCookie restituisce una serie di coppie chiave-valore che devono essere impostate come cookie per concedere l'accesso a una distribuzione privata.

Importazioni

require 'vendor/autoload.php'; use Aws\CloudFront\CloudFrontClient; use Aws\Exception\AwsException;

Codice di esempio

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' => '2014-11-06', '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();

Invia CloudFront Cookie al client Guzzle

È anche possibile trasferire questi cookie a una funzione GuzzleHttp\Cookie\CookieJar per l'utilizzo con un client 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');

Per ulteriori informazioni, consultaUtilizzo di cookie firmatiin Amazzonia CloudFront Guida per sviluppatori di .