【问题标题】:PHP AWS SDK | How to create signed URL with custom domainPHP AWS 开发工具包 |如何使用自定义域创建签名 URL
【发布时间】:2018-10-02 12:28:32
【问题描述】:

我在 PHP 中使用 AWS SDK 和 Laravel 框架。这是我的代码

$cloudFront = new CloudFrontClient([
    'region'  => env('AWS_REGION'),
    'version' => 'latest'
]);

$path = "R180417XXXX.mp4"

$resourceURL = "https://dbk93n3xxxxxx.cloudfront.net/" . $path;
$expires = Carbon::now()->addMinutes(5)->timestamp;

$signedUrlCannedPolicy = $cloudFront->getSignedUrl([
    'url'         => $resourceURL,
    'expires'     => $expires,
    'private_key' => base_path('pk-APKAI2PXXXXXXXXXXXXX.pem'),
    'key_pair_id' => 'APKAI2PXXXXXXXXXXXXX',
]);

此代码正在运行,但 URL 看起来像这样

https://dbk93n3xxxxxx.cloudfront.net/R180417XXXX.mp4?Expires=1524389577&Signature=RmBDMqM4SMadsQstrgVpUiLoJ50dvKoxNI081Joa7WjSg5eelziQqtDrcs~klbDHvs7rMaq2McfHUQijrcLe7F9tDbn7oOxEC4kfPPCMbhqqjtBWavPmM8Zv8QhH50dPuNHwnEj4pIGUpm9FmAvDhCSExCv0uBMWUREJ9YKQJFHZcPJyKBtjPcJVzIGpnj2bQn3xNGO5AUlutsyeSWUqdvtNOLb3xurgx4WzcVotgB~BZo-bQxo3ieXFbKWAPQXMPl93YpuX5W10l4YtYPULrAtJVQZKUIFcfifnECnqg~IgtbkFbyLdM5e87ZiC837Hj-AphmlEshnY-MHWyEU24g__&Key-Pair-Id=APKAI2PXXXXXXXXXXXXX

但我只是在 CloudFront 中设置 CNAME,如 server1.domain.tld 我希望签名的 URL 显示为

https://server1.domain.tld/R180417XXXX.mp4?Expires=1524389577&Signature=RmBDMqM4SMadsQstrgVpUiLoJ50dvKoxNI081Joa7WjSg5eelziQqtDrcs~klbDHvs7rMaq2McfHUQijrcLe7F9tDbn7oOxEC4kfPPCMbhqqjtBWavPmM8Zv8QhH50dPuNHwnEj4pIGUpm9FmAvDhCSExCv0uBMWUREJ9YKQJFHZcPJyKBtjPcJVzIGpnj2bQn3xNGO5AUlutsyeSWUqdvtNOLb3xurgx4WzcVotgB~BZo-bQxo3ieXFbKWAPQXMPl93YpuX5W10l4YtYPULrAtJVQZKUIFcfifnECnqg~IgtbkFbyLdM5e87ZiC837Hj-AphmlEshnY-MHWyEU24g__&Key-Pair-Id=APKAI2PXXXXXXXXXXXXX

我已尝试将$resourceURL 更改为

$resourceURL = "https://server1.domain.tld/" . $path;

它不工作。

回复状态码403我已经设置Origin Access Identity不知道为什么不行

这是我的Amazon S3 Policy

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

请帮忙...

谢谢

【问题讨论】:

  • 您正在尝试的内容支持。当你说“这不起作用[ing]”时,你需要更具体。当你这样做时会发生什么?如果您收到“拒绝访问”响应,请显示完整的错误响应。
  • @Michael-sqlbot 我更新了我的帖子,请查看。
  • 请发布完整错误响应。
  • @Michael-sqlbot 感谢您尝试帮助我。现在我不使用签名 URL,而是使用 WAF。非常感谢。

标签: php laravel amazon-s3 aws-sdk amazon-cloudfront


【解决方案1】:

在 Route53 中,您的 tld 需要一个托管区域和一个 CNAME 类型的记录集,它是 Cloudfront 分发的别名。

以下是要遵循的步骤:

  • 在证书管理器中为 domain.tldserver1.domain.tld 创建证书。

  • 编辑您的 Cloudfront 分发设置并将分发的 SSL 证书设置为自定义证书。

  • 确保您的分发列表的备用域名 (CNAME) server1.domain.tld

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 2014-02-26
    • 2014-03-03
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多