веб-сервисы Amazon — проверка подлинности подписанных файлов cookie AWS не работает php (AccessDeniedAccess запрещен)

Я пытаюсь получить доступ к статическому контенту из своей корзины s3 с помощью AWS CloudFront. Я могу получить доступ к этому контенту, используя подписанный URL, но когда я пытаюсь использовать аутентификацию подписанных файлов cookie AWS, это дает мне AccessDeniedAccess отклонен ошибка.
Я дважды проверил конфигурацию моего CloudFront и S3. Но это кажется идеальным.
Я использую пользовательский сертификат SSL для своей CloudFront и стандартную политику для доступа к контенту.

<?php
getSignature("http://cdn.******.ca", 300000);
echo '<html>
<head></head>
<body>
<iframe src="https://cdn.****/file.pdf">
</body>
</html>';

function getSignature($resource = null, $expires = null, $policy = null)
{

$keyPairId = 'AP*****';

$signatureHash = array();
if ($policy) {
$policy = preg_replace('/\s/s', '', $policy);
$signatureHash['Policy'] = encode($policy);
header ( "Set-Cookie: CloudFront-Policy=".$signatureHash['Policy']."; path=/; domain=***.ca; httpOnly", false );
}
elseif ($resource && $expires) {
$policy = createCannedPolicy($resource, $expires);
$signatureHash['Expires'] = $expires;
header ( "Set-Cookie: CloudFront-Expires=".$signatureHash['Expires']."; path=/; domain=***.ca; httpOnly", false );
}
else {
return false;
}

$signatureHash['Signature'] = encode(sign($policy));
header ( "Set-Cookie: CloudFront-Signature=".$signatureHash['Signature']."; path=/; domain=***.ca; httpOnly", false );
$signatureHash['Key-Pair-Id'] = $keyPairId;
header ( "Set-Cookie: CloudFront-Key-Pair-Id=".$signatureHash['Key-Pair-Id']."; path=/; domain=***.ca; httpOnly", false );

return $signatureHash;
}

function createCannedPolicy($resource, $expiration)
{
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition":{"DateLessThan":{"AWS:EpochTime":'.$expiration.'}}}]}';
return $json;
}

function sign($policy)
{
$signature = '';
$privateKey = 'path/pk-APK***.pem';
$fp=fopen($privateKey,"r");
$priv_key=fread($fp,8192);
fclose($fp);

$key = openssl_get_privatekey($priv_key);
openssl_sign($policy, $signature, $key);
return $signature;
}

function encode($policy)
{
return strtr(base64_encode($policy), '+=/', '-_~');
}
?>

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …