【问题标题】:Issues generating CloudFront signed URLs; always Access Denied生成 CloudFront 签名 URL 的问题;始终拒绝访问
【发布时间】:2018-07-03 10:45:26
【问题描述】:

我在使用 CloudFront 生成签名 URL 时遇到问题。无论我尝试什么,我都会收到“拒绝访问”响应。

我在 CloudFront 中创建了一个分配,以及一个 CloudFront 密钥对 ID。我已经下载了该密钥对 ID 的私钥和公钥。

在一个简单的 PHP 脚本中,我正在尝试以下操作:

use Aws\CloudFront\CloudFrontClient;

$cloudfront = new CloudFrontClient([
    'credentials' => [
        'key' => '[redacted]', // Access key ID of IAM user with Administrator policy
        'secret' => '[redacted]', // Secret access key of same IAM user
    ],
    'debug' => true,
    'region' => 'eu-west-1',
    'version' => 'latest',
]);

$expires = strtotime('+6 hours');

$resource = 'https://[redacted].cloudfront.net/mp4/bunny-trailer.mp4';

$url = $cloudfront->getSignedUrl([
    'url' => $resource,
    'policy' => json_encode([
        'Statement' => [
            [
                'Resource' => $resource,
                'Condition' => [
                    'DateLessThan' => [
                        'AWS:EpochTime' => $expires,
                    ],
                ],
            ],
        ],
    ]),
    'expires' => $expires,
    'key_pair_id' => '[redacted]', // Access key ID of CloudFront key pair
    'private_key' => '[redacted]', // Relative path to pk-[redacted].pem file
]);

但是当访问生成的 URL 时,它总是在浏览器中给我一个错误,代码为“AccessDenied”。

我做错了什么?

【问题讨论】:

  • 创建自定义策略而不是使用默认策略的任何特殊原因,因为您已经在签名的 url 上设置了过期时间?不一定是问题,我只是想消除变量。
  • 所以即使没有特定的政策它也不起作用?除了缺少可能的查询字符串参数外,我没有任何直接的想法。

标签: amazon-web-services amazon-cloudfront


【解决方案1】:

发现问题所在。我的 S3 存储桶中的对象不可公开访问,而且我没有添加源访问身份,因此 CloudFront 无法从我的源(我的 S3 存储桶)中提取对象来缓存它们。

只要我添加了一个原始访问身份并将其添加到我的 S3 存储桶的策略中,我的对象就会立即通过我的 CloudFront 分配通过签名 URL 进行访问。

相关文档:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-creating-oai

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2013-01-03
    • 2018-01-16
    • 2019-08-30
    • 2015-05-21
    • 2015-02-13
    • 2017-10-03
    • 2021-09-07
    • 2018-09-18
    相关资源
    最近更新 更多