Подписанные 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