当前位置: 首页 > 知识库问答 >
问题:

使用签名URL的Cloudfront分发拒绝访问

鞠源
2023-03-14

我正试图使用一个以S3 bucket为起点的Cloudfront私有发行版来提供内容。

我的存储桶中有一个图像文件,用于测试目的,其权限设置为私有。我已经设置了我的存储桶策略,因此Cloudfront Origin Access Idbody具有获得权限

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity **************"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::studeersnel.{{my-bucket}}/*"
    }
]
}

当我将Cloudfront发行版设置为public(不使用签名URL)时,它可以正常工作。该对象不能通过直接S3链接访问,但可以使用Cloudfront url访问。

现在,当我在“默认缓存行为设置”下将“限制查看器访问(使用签名URL)”设置为“是”时,它不再起作用。我收到一个403错误。如果我遵循签名的url,我会收到以下消息

<Error>
  <Code>AccessDenied</Code>
  <Message>Access denied</Message>
</Error>

我正在使用php-sdk使用以下代码创建我的签名url:

require '../vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;

$cloudFront = CloudFrontClient::factory(array(
    'key' => '********************',
    'secret' => '****************************************',
    'private_key' => '../pk-********************.pem',
    'key_pair_id' => '********************',
));

$hostUrl = 'http://**************.cloudfront.net';
$resourceKey = 'desert.jpg';
$expires = time() + 300;

$signedUrl = $cloudFront->getSignedUrl(array(
    'url'     => $hostUrl . '/' . $resourceKey,
    'expires' => $expires,
));

echo $signedUrl.'<br><br>';
echo '<img src="' . $signedUrl . '">';

知道我做错了什么吗?

共有1个答案

姚伟
2023-03-14

今天解决了这个问题,所以我想如果有人遇到同样的问题,我会在这里发布解决方案

我想这一定是url本身的生成问题,所以再次检查了凭证。检查完所有内容后,我决定尝试创建一个新的Cloudfront密钥对。出于某种原因,这解决了问题。

 类似资料:
  • 我设置了以下信息: 创建了AWS S3存储桶并将一些映像上载到特定文件夹 创建了AWS CloudFront web发行版: 来源域名:从列表中选择的S3 bucket 限制存储桶访问:是 来源访问标识:选定的已有标识 授予桶的读取权限:是,更新桶策略 拒绝访问

  • 我已经尝试了很多事情,我承认失败了(我在这里读了很多回应,但到目前为止没有一个对我有帮助)。我正在尝试为CloudFont上保存的文件设置签名URL。我可以为S3创建签名的URL,但我不能为CloudFront工作。对于cloudfront,我使用AWS SDK中的以下内容: 我得到一个签名的URL生成,但我得到访问拒绝时,跟随链接,当我读到它建议我设置起源访问标识。因此,我转到我的分发设置和设置

  • 我使用AWS Java SDK创建签名URL,并尝试通过链接到私有S3 bucket的云端提供图像服务-已采取的步骤- > {String distributionDomain=“分布式域”; } 当我点击URL安全签名URL时,我被拒绝访问,不确定我在这里错过了什么。如果需要任何其他信息,请告诉我。

  • 我有所有的参数,像Key-id,cloudfront domain和pem文件。但我不知道如何实现它。谁能帮我拿些样品。 我找了很多,但没有找到。我得到了使用node.js创建签名url的示例代码,但我不想使用node.js。

  • 我正试图用预签名的URL直接上传一个文件到S3 bucket,但在PUT请求上出现AccessDenied(403 Plibended)错误。 附注。忘了补充。我已经尝试添加和以及并且在本例中上载工作正常,但是如何限制上载的访问?它应该只适用于预签名的URL,对吗?

  • 问题内容: 简短版:如何使用Python使用Amazon CloudFront / S3使签名的URL“按需”以模仿Nginx的X-Accel- Redirect行为(即保护下载)。 我已经安装了Django服务器,并在Nginx前端上运行。我一直对它的请求感到困惑,最近不得不将其安装为Tornado WSGI应用程序,以防止它在FastCGI模式下崩溃。 现在由于服务器对媒体的请求过多,我的服务