PHP AWS 开发工具包 |如何使用自定义域创建签名 URL
PHP AWS SDK | How to create signed URL with custom domain
我在 PHP 中使用带有 Laravel 框架的 AWS SDK。这是我的代码
$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/*"
}
]
}
请帮忙...
谢谢
在 Route53 中,您的顶级域名需要一个托管区域和一个 CNAME 类型的记录集,它是 Cloudfront 分发的别名。
以下是要遵循的步骤:
在证书管理器中为 domain.tld 和 server1.domain.tld 创建证书。
编辑您的 Cloudfront 分发设置并将分发的 SSL 证书设置为自定义证书。
确保您的通讯组列表的备用域名 (CNAME) server1.domain.tld
Create Public Hosted Zone 对于 domain.tld 在 Route53 中
复制 4 个域名服务器并更新您的域名注册商以指向它们(如果域名最初未在 Route 53 中设置)
Create Record Set in the Hosted Zone for a CNAME alias 指向 Cloudfront Distribution。
最后,高枕无忧,看看更改会传播到名称服务器和 Viola!
我在 PHP 中使用带有 Laravel 框架的 AWS SDK。这是我的代码
$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/*"
}
]
}
请帮忙...
谢谢
在 Route53 中,您的顶级域名需要一个托管区域和一个 CNAME 类型的记录集,它是 Cloudfront 分发的别名。
以下是要遵循的步骤:
在证书管理器中为 domain.tld 和 server1.domain.tld 创建证书。
编辑您的 Cloudfront 分发设置并将分发的 SSL 证书设置为自定义证书。
确保您的通讯组列表的备用域名 (CNAME) server1.domain.tld
Create Public Hosted Zone 对于 domain.tld 在 Route53 中
复制 4 个域名服务器并更新您的域名注册商以指向它们(如果域名最初未在 Route 53 中设置)
Create Record Set in the Hosted Zone for a CNAME alias 指向 Cloudfront Distribution。
最后,高枕无忧,看看更改会传播到名称服务器和 Viola!