Как отладить отказ в доступе по подписанному URL-адресу AWS Cloudfront?

Вот моя функция URL подписи:

private function signUrl($lesson) {
$cloudFrontClient = AWS::createClient('CloudFront', [
'region'  => '<my-region>',
'version' => '2017-03-25'
]);

$streamHostUrl = 'https://<mydomain>.cloudfront.net';
$resourceKey = $object->s3_video;
$expires = time() + 300;

// Create a signed URL for the resource using the canned policy
$signedUrlCannedPolicy = $cloudFrontClient->getSignedUrl([
'url'         => $streamHostUrl . '/' . $resourceKey,
'expires'     => $expires,
'private_key' => '<MY_PEM_FILE_PATH>',
'key_pair_id' => '<KEY_PAIR_ID>'
]);

return $signedUrlCannedPolicy;
}

При нажатии на ссылку я получаю неоднозначное сообщение об ошибке, которое не может помочь мне решить проблему:

 <Error><Code>AccessDenied</Code><Message>Access
Denied</Message><RequestId>SOME_ID_HERE</RequestId><HostId>SOME_BASE64_HERE_NOT_READABLE</HostId></Error>

Я задавался вопросом, есть ли какой-нибудь способ отладки этого, возможно в консоли AWS или некотором вызове API?

2

Решение

В этой ошибке больше, чем вы видите. Ваш подписанный URL-адрес CloudFront действительно работает. <HostId> а также <RequestId> не являются компонентами в ошибке «Отказано в доступе» из CloudFront. Эта ошибка исходит от S3, после того как CloudFront примет ваш подписанный запрос.

В заголовках ответа HTTP вы должны увидеть …

Server: Amazon S3
x-amz-request-id: (same value as the XML RequestId)
x-amz-id-2: (same value as the XML HostId)

S3 не позволяет CloudFront получать ваш контент.

Увидеть Использование идентификатора исходного доступа для ограничения доступа к вашему контенту Amazon S3 и проверьте свою конфигурацию.

Также просмотрите шаги в Задержка Amazon CloudFront чтобы установить минимальный TTL для кэширования ошибок для 403 ошибок равным 0 секундам, в противном случае вы будете продолжать видеть ошибку в течение 5 минут (по умолчанию) после устранения проблемы.

Если все выглядит правильно, вы можете просмотреть журналы сегмента S3, чтобы убедиться, что вы запрашиваете объект, который вы намереваетесь. В настройках источника CloudFront есть значение, называемое «Исходный путь», которое почти всегда следует оставлять пустым. Помещение значения туда заставит CloudFront запрашивать объект, отличный от того, с которого URL-адрес заставляет вас показаться, что вы запрашиваете, так что это значение обычно не является чем-то, что вы должны установить для чего-либо.

2

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

пытаться

$signedUrlCannedPolicy = $cloudFrontClient->getSignedUrl([
'url'  => "{$streamHostUrl} / {$resourceKey}",
'expires'     => $expires,
'private_key' => '<MY_PEM_FILE_PATH>',
'key_pair_id' => '<KEY_PAIR_ID>'
]);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector