在这里使用CloudFront + S3,搭建生成签名URL的CDP(Private Cache Distribution)。以下是操作流程;
创建Amazon S3
创建CloudFront Distributions
生成签名URL
创建Amazon S3
在这里创建Amazon S3以后,把index.html文件上传到S3上。
登录AWS管理界面
点击S3
点击[创建存储桶]
点击[上传]
点击[添加文件]
点击[开始上传]
确认状态为[完成]
index.html的内容如下。
只可以从CloudFront访问的S3!
创建CloudFront Distribution
点击[Create Distribution]
点击[Get Started]
点击[Get Started]之后会显示具体的配置页面。
Orgin Settings
Origin Domain Name:aws.s3.amazonaws.com
Origin Path:默认
Origin ID:S3-awsok
Restrict Bucket Access:Yes
Origin Access Identity:Create a New Identity
Comment:access only from CloudFront
Grant Read Permissions on Bucket:Yes,Update Bucket Policy
Path Pattern:默认
Viewer Protocol Policy:HTTP and HTTPS
Allowed HTTP Methods:GET,HEAD
Object Caching:Use Origin Cache Headers
Minimum TTL:0
Forward Cookies:None
Whitelist Cookies:有效化Forward Cookies的话,只允许Whitelist的Cookie转发到原始服务器
Forward Query Strings:No
Smooth Streaming:No
Restrict Viewer Access:Yes
Trusted Signers:Self
Distribution Settings在这里使用默认配置。
配置完成之后点击[Create Distribution]
CloudFront Distributions的状态为[In Progress]。
等待10分中之后状态变为[Deployed],并且Domain Name是这次创建的CloudFront Distribution的域名。
配置完之后,查看aws桶的权限发生了变化。查看方法如下
在AWS管理控制台选择S3
选择桶以后,点击[属性]
点击[权限]
点击[编辑存储桶策略]
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3L6IN8Q7KY7GE"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsok/*"
}
]
}
进行以上配置以后,只允许用签名URL进行访问,直接输入URL的页面如下。
创建签名URL
为了创建签名URL,首先创建CloudFront密钥对。
点击创建CloudFront密钥对
点击[CloudFront密钥对]
点击[创建新的密钥对]
点击[下载私有密钥文件]
点击[下载公有密钥文件]
确认文件以下载之后,点击[关闭]
私有密钥文件:pk-密钥对ID.pem
公有密钥文件:rsa-密钥对ID.pem
使用AWS SDK for PHP生成签名URL。
把私有密钥上传到Amazon EC2以后,创建如下php文件。创建php文件之前需安装AWS SDK for PHP,安装方法参考 >> 安装AWS SDK for PHP
private_key:CloudFront私有密钥的路径
key_pair_id:CloudFront密钥对的ID
HostUrl:创建CloudFront的DomainName
expires:签名URL的超时时间
# cat cloudfront.php
require_once("vendor/autoload.php");
date_default_timezone_set('Asia/Chongqing');
use Aws\CloudFront\CloudFrontClient;
$client = CloudFrontClient::factory(array(
'private_key' => '/path/to/your/cloudfront-private-key.pem',
'key_pair_id' => 'cloudfront key pair id',
));
$HostUrl = 'CloudFront DomainName';
$resourceKey = 'index.html';
$expires = time() + 300;
$signedUrl = $client->getSignedUrl(array(
'url' => $HostUrl . '/' . $resourceKey,
'expires' => $expires,
));
print $signedUrl;
执行cloudfront.php后,把生成签名URL粘帖到浏览器。
# php cloudfront.php
https://d1e2kb4c29diqv.cloudfront.net/index.html?Expires=1430200266&Signature=fAwSd3JgwY2WlP78G11QvOhT2kGNvhKnurNbctMs0rgCejl7VsCwlI0xHWsZA6pxaeqfTmUdtzfup4Cn6IvKWTQmNCsFCPiQQ4Uzyyj0vQpajFj60I1bnKbe0XopbY4~MvT13ZrHyJQNSeJTyVjLfPQvW482skLNF3SQSDufPSl2gokCxSoX83U7RGTvkVMJt8RWdgsx4sjEXo3z4KBtDoa4P9LecDYBtidH-xwzgmtFGeLyA12KdEwUVp6LdHHle3BOYOmWyqwgowDWI6T4-S2Rn4tHlrXGpqLpt5w5~h3bH-w~FDG0v6BaUJjvu2EgMJlqqdXc24w5d3oyE8tMFw__&Key-Pair-Id=APKAJEQ4CITOZRVLKRZQ
过5分钟访问的话,会出现如下页面。
也可以通过以下php代码生成限时URL。
require_once("vendor/autoload.php");
date_default_timezone_set('Asia/Chongqing');
use Aws\S3\S3Client;
$config = array(
'key' => 'Access Key Id',
'secret'=> 'Secret Access Key',
);
$s3 = S3Client::factory($config);
$url = $s3->getObjectUrl("awsok", "index.html", "1 minutes");
print $url;
参考网站