fun*_*err 5 php amazon-s3 amazon-web-services amazon-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;
}
Run Code Online (Sandbox Code Playgroud)
单击链接时,我收到此模棱两可的错误消息,这并不能真正帮助我调试问题:
<Error><Code>AccessDenied</Code><Message>Access
Denied</Message><RequestId>SOME_ID_HERE</RequestId><HostId>SOME_BASE64_HERE_NOT_READABLE</HostId></Error>
Run Code Online (Sandbox Code Playgroud)
我想知道是否有某种方法可以对此进行调试,也许是在 AWS 控制台或某些 API 调用中?
该错误中的内容比您看到的要多。您的 CloudFront 签名 URL 实际上有效。 <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)
Run Code Online (Sandbox Code Playgroud)
S3 不允许 CloudFront 获取您的内容。
请参阅使用源访问身份限制对您的 Amazon S3 内容的访问并验证您的配置。
另请查看Amazon CloudFront Latency 中的步骤,将 403 错误的错误缓存最小 TTL 设置为 0 秒,否则在修复问题后,您将继续看到错误长达 5 分钟(默认)。
如果一切看起来都正确,您可能需要查看您的 S3 存储桶日志以确保您正在请求您想要的对象。在 CloudFront 源设置中,有一个名为 Origin Path 的值,该值几乎应始终留空。在那里放置一个值会导致 CloudFront 请求一个与 URL 显示您请求的对象不同的对象,因此该值通常不是您应该设置为任何内容的值。
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |