CloudFrontの署名付きURLをためす(with PHP)
はじめに
CloudFrontの署名付きURLを試す機会があったのでやってみました。
環境:PHP7, Laravel5.8, AWS Service Provider for Laravel 5
(AWS SDK for PHP バージョン3)
AWS環境:S3,CloudFront
手順
composerでAWS SDKを導入する
"require": { "php": "^7.1.3", "fideloper/proxy": "^4.0", "laravel/framework": "5.8.*", "laravel/tinker": "^1.0", "aws/aws-sdk-php-laravel": "~3.0" },インストール
composer install
公式サイトの手順に沿ってサービスプロバイダーとエイリアスを設定します。
In Laravel find the providers key in your config/app.php and register the AWS Service Provider.'providers' => array( // ... Aws\Laravel\AwsServiceProvider::class, )Find the aliases key in your config/app.php and add the AWS facade alias.'aliases' => array( // ... 'AWS' => Aws\Laravel\AwsFacade::class, )
とりあえず公式のドキュメントのコードを使ってAWSにつながっているか確認。
<?php namespace App\Http\Controllers; use App; class HelloController extends Controller { public function get() { $s3 = App::make('aws')->createClient('s3'); $s3->putObject(array( 'Bucket' => 'YOUR_BUCKET', 'Key' => 'YOUR_OBJECT_KEY', 'SourceFile' => public_path() . '\robots.txt', )); return view('welcome'); } }
良さそう
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth1.jpg)
CloudFront接続用のキーペアを作成します。AWSルートアカウントでAWSマネジメントコンソールにログインして、毎セキュリティ資格情報を表示します。
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth2.jpg)
CloudFrontのキーペアを作成します。プライベートキーはなくさないように。
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth3-1024x472.jpg)
CloudFront環境をつくります。
オリジンの設定と、Restrict Bucket Access(制限付きアクセス)を「YES」 に指定。
オリジンの設定と、Restrict Bucket Access(制限付きアクセス)を「YES」 に指定。
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth5.jpg)
画面下の方の、Restrict Viewer Access (Use Signed URLs or Signed Cookies)をYesにします。
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth6.jpg)
CloudFrontのURLにアクセスしてもエラー。キーがない
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth4.jpg)
では認証用のURLを生成します。
<?php namespace App\Http\Controllers; use App; use Aws\Sdk; class HelloController extends Controller { public function get() { $config = [ 'region' => 'ap-northeast-1', 'version' => 'latest', 'credentials' => [ 'key' => 'ACCESSKEY_INPUT_HERE', 'secret' => 'SECRETKEY_INPUT_HERE' ] ]; $sdk = new Sdk($config); $client = $sdk->createCloudFront(); $expires = time() + 60; // 1分 $result = $client->getSignedUrl([ 'url' => STREAM_HOST_URL . '/' . RESOURCE_KEY, 'expires' => $expires, 'private_key' => '/path/to/privatekey', 'key_pair_id' => 'KEY_PAIR_ID_HERE' ]); print($result); die(); } }
できました!
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth16.png)
コンテンツが無事に表示されました
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth17.png)
有効期限をすぎると見ることができなくなります。
![](https://blog.e2info.co.jp/wp-content/uploads/2019/06/cloudfrontauth18.png)
kaneko tomo
2019年6月1日
関連記事
VagrantとAnsibleで仮想環境のCentOS6.5にWordPress環境構築!WebサーバーはNginxですか?(前編)
はいどーも! てるおです。 はいどーも!に見出しタグを使って元気感を演出していま…