我试图使用签名的URL图像,一旦我能够做到这一点 . 但后来,我删除了它,并试图再次这样做,我无法做到这一点 .
这是我到目前为止所做的:
-
在IAM管理控制台中创建了一个Cloudfront密钥对 . 下载了私钥和公钥,并注意到访问密钥ID = XXXXXXXXXXXXXXXXXXXX .
-
创建了一个S3存储桶 . 没有自定义配置
-
使用以下设置创建了Cloudfront分发
-
Origin域名:我的桶
-
限制存储区访问:是
-
创建了新的Origin Access Identity
-
授予Bucket的读取权限:选择是
-
限制查看者访问(使用签名的URL或签名的Cookie)=是
-
可信赖的签名者=自我
然后在我的laravel代码中,我在我的控制器中有以下内容:
$keyPairId = 'XXXXXXXXXXXXXXXXXXXX';
$privateKey = config_path('pk-XXXXXXXXXXXXXXXXXXXX.pem');
$url = "http://xxxxxxxxxxxxxx.cloudfront.net/image.jpg";
$cf = new UrlSigner($keyPairId, $privateKey);
$imgSrc = $cf->getSignedUrl($url, time());
echo "<img src='{$imgSrc}' />";
但每次我得到同样的错误:
<Error>
<Code>MissingKey</Code>
<Message>Missing Key-Pair-Id query parameter or cookie value</Message>
</Error>
需要帮忙 .
2 回答
您必须使用CloudFront特定密钥对并将其添加到
$cf
. 有关如何下载或上传自己的公钥的更多信息:http://docs.aws.amazon.com/AWSSecurityCredentials/1.0/AboutAWSCredentials.html#KeyPairs
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html#private-content-creating-cloudfront-key-pairs
对不起,我无法发表评论(代表不够),但您可以记录之后签名的网址是什么吗?