云端签名的 url 有问题(找不到指定参数的帐户)

Ala*_*wii 3 php amazon-s3 amazon-cloudfront aws-sdk

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

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

这是我用来做的代码

这是 start.php

<?php


require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\CloudFront\CloudFrontClient;

$config = require('config.php');


// S3


$client = new Aws\S3\S3Client([
    'version'     => 'latest',
    'region'      => 'us-east-2',

]);

// CloudFront


$cloudfront = CloudFrontClient::factory([

    'version'     => 'latest',
    'region'      => 'us-east-2',

]);
Run Code Online (Sandbox Code Playgroud)

这是 config.php

<?php



return [

's3'=>[

    'key'       => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
    'secret'    => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
    'bucket'    => 'hdamovies',
    'region'    => 'us-east-2',

],

'cloudFront'    =>  [
    'url'   =>  'https://d2t7o0s69hxjwd.cloudfront.net',
],

];
Run Code Online (Sandbox Code Playgroud)

这是 index.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>";
Run Code Online (Sandbox Code Playgroud)

当我点击链接时,我收到该错误

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


<HostId>juuIQZKHb1pbmiVkP7NVaKSODFYmBtj3T9AfDNZuXslhb++LcBsw9GNjpT0FG8MxgeQGqbVo+bo=</HostId></Error>
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*bot 6

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

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

  • 最常见的替代方案是使用 S3 的内置密钥 (SSE-S3)。有关服务器端加密的更多详细信息,请访问:https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-bucket-key.html (2认同)