2012-10-29 26 views
6

PHP'de imzalanmış Cloudfront üzerinde imzalanmış URL'lerim var. Kota politikaları S3'teki HTTP yönlendiricileriyle çalışır, ancak Cloudfront HTTP yönlendirme denetimlerini desteklemediğinden, yalnızca bir IP adresine dosya göndermem gerekir (dosyayı isteyen ve imzalanan URL'yi veya web sunucumu ideal olarak yaratan istemci).cloudfront İmzalı urls ip adresi

Birisi, lütfen JSON koduna IP Adres öğesini eklemem için bana yardımcı olabilir mi?

"IpAddress":{"AWS:SourceIp":"192.0.2.0/24"}, 

PHP ve Politika Beyanı ile kaybedilen ama bilen birisi için kolay olabileceğini düşünüyorum ediyorum: http://tinyurl.com/9czr5lp

It does kodlama/Özel bir politika için biraz farklı imzalanması: http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html#private-content-custom-policy-statement

Aşağıdaki örnek bir AWS örneğidir ve IP Adres kilidi için geçerli değildir.

Birisi bana iki dakika süre verebilirse bunu çok hızlı bir şekilde test edebilirim! MASSIVELY herhangi bir yardım için

Teşekkür :)

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; 

cevap

3
{"Statement":[{"Resource":"testRes","Condition":{"DateLessThan":{"AWS:EpochTime":1357034400},"IpAddress":{"AWS:SourceIp":"192.0.2.0\/24"}}}]} 

Bu doldurulmuş ve kaçan değerlerle geçerli bir JSON dizedir. IP adresini bir değişken olarak iletirseniz, /

'dan emin olun.

$escapedIp = str_replace('/', '\/', $ipAddress); 

php json uzantısı Bu oldukça kolay şeyler yapacak göz at: CIDR biçimine istemci ip dönüştürmek nasıl php dizide

$statement = array( 
    'Statement' => array( 
     array(
      'Resource' => $resource, 
      'Condition' => array( 
       'DateLessThan' => array( 
        'AWS:EpochTime' => $expires 
       ), 
       'IpAddress' => array( 
        'AWS:SourceIp' => $ipAddress 
       ) 
      ) 
     ) 
    ) 
); 

$json = json_encode($statement); 
+0

olarak

örnek deyimi ?? –

+0

Bu, bir yorumda açıklamak için biraz karmaşıktır. Genellikle son segmenti 0'a keserek ve/24 sekizlik maskeyi ekleyerek tam 0-255 aralığına izin verirsiniz. 10.0.0.1-10.0.0.255, 10.0.0.0/24 olacaktır. CIDR hakkında genel bilgi için http://en.m.wikipedia.org/wiki/Classless_Inter-Domain_Routing –

+0

IP viz 114.235.149.30'u CIDR formatına dönüştürmek için herhangi bir php işlevi bakın ??? Veya url imzalarken sadece 1 tek ip 114.235.149.30 kullanabilir miyim? –