Подписани URL адреси в CloudFront със заместващи знаци

Използвам PHP за подписване на URL адреси за достъп до моята S3 кофа през CloudFront, подписването на отделни файлове работи добре с помощта на кода по-долу. Но след генериране на низа със заместващ знак с се заменя с действителното име на файл, напр. index.html или main.css в URL адреса (според документацията тук), но достъпът е отказан.

<?php 

function getSignedURL($resource, $timeout)
{
//This comes from key pair you generated for cloudfront
$keyPairId = "MYKEYPAIR";

$expires = time() + $timeout; //Time out in seconds
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition":{"DateLessThan":{"AWS:EpochTime":'.$expires.'}}}]}';     

//Read Cloudfront Private Key Pair
$fp=fopen("aws.pem","r"); 
$priv_key=fread($fp,8192); 
fclose($fp); 

//Create the private key
$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://cdn.mydomain.com/path/*", 3000);
print_r($url);

?>

Моята политика за кофи е следната:

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucketname/*"
    }
]
}

Всяка помощ ще бъде оценена.


person Grib    schedule 22.01.2014    source източник
comment
Намерихте ли отговор за това? Благодаря!   -  person Milton    schedule 18.08.2014


Отговори (1)


Използвате ли консервирана или персонализирана политика? Открих, че не можете да използвате URL адреси със заместващи знаци, освен ако не използвате персонализирана политика, така че опитайте.

person Mark Simpson    schedule 25.11.2014