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 degli CloudFront URL Amazon con la AWS SDK for PHP versione 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 informazioni su come configurare le distribuzioni private e sul motivo per cui è necessario firmare gli URL, consulta Serving Private Content through Amazon CloudFront nella Amazon CloudFront Developer Guide.
-
Crea un CloudFront URL Amazon firmato utilizzando getSigneDurl.
-
Crea un CloudFront cookie Amazon firmato utilizzando getSignedCookie.
Tutto il codice di esempio per il AWS SDK for PHP è disponibile qui GitHub
Credenziali
Prima di eseguire il codice di esempio, configurate AWS le vostre credenziali, come descritto inCredenziali. Quindi importate il fileAWS SDK for PHP, come descritto inUtilizzo di base.
Per ulteriori informazioni sull'uso di Amazon CloudFront, consulta l'Amazon CloudFront Developer Guide.
CloudFront URL di firma per distribuzioni private
Puoi firmare un URL utilizzando il CloudFront client nell'SDK. Innanzitutto, è necessario creare un oggetto CloudFrontClient
. Puoi firmare un CloudFront URL per una risorsa video utilizzando una politica predefinita 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' => '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();
Utilizza una politica personalizzata per la creazione di URL CloudFront
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' => '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();
Usa un URL CloudFront firmato
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
<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>
CloudFront Cookie di firma 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 sul motivo per cui potresti voler utilizzare cookie firmati anziché URL firmati (o viceversa), consulta Scelta tra URL firmati e cookie firmati nella Amazon CloudFront Developer Guide.
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' => '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();
Utilizza una politica personalizzata per la creazione dei cookie CloudFront
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' => '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();
Invia CloudFront i 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, consulta Using Signed Cookies nella Amazon CloudFront Developer Guide.