aws php s3 限制访问,「CloudFront + S3」使用签名URL进行访问限制

543b6eae825c4b2ac9e4e8a42284e726.png在这里使用CloudFront + S3,搭建生成签名URL的CDP(Private Cache Distribution)。以下是操作流程;

创建Amazon S3

创建CloudFront Distributions

生成签名URL

创建Amazon S3

在这里创建Amazon S3以后,把index.html文件上传到S3上。

登录AWS管理界面

点击S3

点击[创建存储桶]

082fb3edc8a388bab089b2beee107473.png

点击[上传]

点击[添加文件]

7ac06b6cb45780f46853e9398939536a.png

点击[开始上传]

00a496e5c530c7b21fa2b4da35b7c02e.png

确认状态为[完成]

5a989dfdf664bd1d08a49ba2e6d24181.pngindex.html的内容如下。

private

只可以从CloudFront访问的S3!

创建CloudFront Distribution

点击[Create Distribution]

db8a3d90e2c4126363b9c4eddbf98f4a.png

点击[Get Started]

8bdc2e5c934dca2e8bcb0672c8555d62.png点击[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

80da140499cb5d71367ad4d65b072321.png

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

23d89dd72d05235cd8e98d1d3963a47f.png Distribution Settings在这里使用默认配置。

配置完成之后点击[Create Distribution] 4dcb33ff1b5bbf580b2b1f60ec879832.png

CloudFront Distributions的状态为[In Progress]。

cca13600c53c35007569224c0f4887a1.png等待10分中之后状态变为[Deployed],并且Domain Name是这次创建的CloudFront Distribution的域名。

b762f90acb56f2bffc045c086f9fba0f.png配置完之后,查看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的页面如下。

c087fc80b9e0902e2ae8e87fd9ed9568.png

创建签名URL

为了创建签名URL,首先创建CloudFront密钥对。

点击创建CloudFront密钥对

点击[CloudFront密钥对]

1149a5a02caaf9c394293cd2ccb88a9b.png点击[创建新的密钥对] a0fce6cc8e2e18d2ad54f62bab49f322.png

点击[下载私有密钥文件]

点击[下载公有密钥文件]

确认文件以下载之后,点击[关闭]

私有密钥文件:pk-密钥对ID.pem

公有密钥文件:rsa-密钥对ID.pem

e891fd79d368a5ffc19821d7f6c847b1.png

使用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

19c66c96e6808f142560cd0a81a0b62e.png

过5分钟访问的话,会出现如下页面。

5de72b1bf900f9c997d473c04b733a04.png

也可以通过以下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;

参考网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值