云前端签名 URL 出现问题(未找到给定参数的帐户)



我正在尝试使用 aws-sdk-php 从 cloudfront 创建签名网址

我已经创建了发行版 WEB 和 RTMP

这是我用来做的代码

这是开始.php

<?php

require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsCloudFrontCloudFrontClient;
$config = require('config.php');

// S3

$client = new AwsS3S3Client([
    'version'     => 'latest',
    'region'      => 'us-east-2',
]);
// CloudFront

$cloudfront = CloudFrontClient::factory([
    'version'     => 'latest',
    'region'      => 'us-east-2',
]);

这是配置.php

<?php

return [
's3'=>[
    'key'       => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
    'secret'    => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
    'bucket'    => 'hdamovies',
    'region'    => 'us-east-2',
],
'cloudFront'    =>  [
    'url'   =>  'https://d2t7o0s69hxjwd.cloudfront.net',
],
];

这是索引.php

<?php

require 'config/start.php';

$video = 'XXXXXXXXXXX.mp4';
$expiry = new DateTime( '+1 hour' );
$url = $cloudfront->getSignedUrl([
    'private_key'   => 'pk-XXXXXXXXXXXXXXXXXXXXX.pem', 
    'key_pair_id'   => 'XXXXXXXXXXXXXXXXXXXXX',
    'url'   => "{$config['cloudFront']['url']}/{$video}",
    'expires'   => strtotime('+10 minutes'),
]);

echo "<a href=".$url.">Downlod</a>";

当我单击链接时,出现该错误

<Error>
<Code>KMS.UnrecognizedClientException</Code>
<Message>No account found for the given parameters</Message>
<RequestId>0F0A772FE67F0503</RequestId>

<HostId>juuIQZKHb1pbmiVkP7NVaKSODFYmBtj3T9AfDNZuXslhb++LcBsw9GNjpT0FG8MxgeQGqbVo+bo=</HostId></Error>

这里有什么问题,我该如何解决?

CloudFront 不支持使用 KMS 密钥下载在 S3 中存储、加密的对象,这显然是因为 CloudFront 源访问身份不是 IAM 用户,因此无法授权其具有对 KMS 的必要访问权限。

https://forums.aws.amazon.com/thread.jspa?threadID=268390

我遇到了这个问题,并在设置正确的身份后解决了这个问题。但是,即使在正确设置后,我也遇到了很多错误问题。这是因为我尝试下载存储桶最初在 KMS 加密时上传的文件,后来当我将其更改为 SSE-S3 时,它仍然抛出 KMS 错误。

重新上传文件后,它似乎可以正常工作。希望这对其他人有所帮助

最新更新