Ho URL registrati su Cloudfront che funzionano bene in PHP. Le politiche di bucket funzionano con i referrer HTTP su S3, ma poiché Cloudfront non supporta i referrer HTTP, devo servire un file solo a un indirizzo IP (il client che ha richiesto il file e ha generato l'URL firmato o il mio server web idealmente).indirizzo IP firmato cloudfront indirizzo IP
Qualcuno può aiutarmi ad aggiungere l'elemento Indirizzo IP al codice JSON in modo che funzioni?
"IpAddress":{"AWS:SourceIp":"192.0.2.0/24"},
Mi sono perso con il PHP e dichiarazione politica, ma penso che potrebbe essere facile per qualcuno che conosce: http://tinyurl.com/9czr5lp
Lo fa codifica/firma di un po 'diverso per un criterio personalizzato: http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html#private-content-custom-policy-statement
Il seguente è un esempio AWS e funziona tranne che per il blocco dell'indirizzo IP.
Posso testarlo molto rapidamente se qualcuno può darmi una mano per due minuti!
Grazie in massa per qualsiasi aiuto :)
Jon
function getSignedURL($resource, $timeout)
{
$keyPairId = "XXXXXXXXXXXX";
$expires = time() + $timeout;
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition":{"DateLessThan": {"AWS:EpochTime":'.$expires.'}}}]}';
$fp=fopen("pk-XXXXXXXX.pem","r");
$priv_key=fread($fp,8192);
fclose($fp);
$key = openssl_get_privatekey($priv_key);
if(!$key)
{
echo "<p>Failed to load private key!</p>";
return;
}
//Sign the policy with the private key
if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1))
{
echo '<p>Failed to sign policy: '.openssl_error_string().'</p>';
return;
}
//Create url safe signed policy
$base64_signed_policy = base64_encode($signed_policy);
$signature = str_replace(array('+','=','/'), array('-','_','~'), $base64_signed_policy);
//Construct the URL
$url = $resource.'?Expires='.$expires.'&Signature='.$signature.'&Key-Pair-Id='.$keyPairId;
return $url;
}
$url = getSignedURL("http://s675765.cloudfront.net/filename.mp4", 600);
print $url;
Come convertire IP del client in formato CIDR ?? –
Questo è un po 'troppo complicato da spiegare in un commento. Solitamente si limita a consentire l'intera gamma 0-255 troncando l'ultimo segmento a 0 e aggiungendo la maschera ottale/24. ad esempio, 10.0.0.1-10.0.0.255 sarebbe 10.0.0.0/24. Per informazioni generiche su CIDR, fare riferimento a http://en.m.wikipedia.org/wiki/Classless_Inter-Domain_Routing –
Qualsiasi funzione di php per convertire il formato IP da 114.235.149.30 a CIDR ??? O posso usare solo 1 singolo IP 114.235.149.30 durante la firma? –