ハマログ

株式会社イーツー・インフォの社員ブログ

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');
    }
}
良さそう
CloudFront接続用のキーペアを作成します。AWSルートアカウントでAWSマネジメントコンソールにログインして、毎セキュリティ資格情報を表示します。
CloudFrontのキーペアを作成します。プライベートキーはなくさないように。
CloudFront環境をつくります。
オリジンの設定と、Restrict Bucket Access(制限付きアクセス)を「YES」 に指定。
画面下の方の、Restrict Viewer Access (Use Signed URLs or Signed Cookies)をYesにします。
CloudFrontのURLにアクセスしてもエラー。キーがない
では認証用の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();
    }
}
できました!
コンテンツが無事に表示されました
有効期限をすぎると見ることができなくなります。
AuthenticatoinAuthorizeAWSCDNCloudFrontPHPSSL

kaneko tomo   kaneko tomo   2019年6月1日


関連記事

さくらレンタルサーバでディレクトリ一覧表示を制限する

さくらのレンタルサーバ設定していたら、index系のファイルが存在しないディレク…

Amazon CloudFrontを.htaccessで適用

Amazon CloudFrontを.htaccessを利用してウェブサービスに…

すごいぞAWS。美味いぞ鬼金棒。

都内某所(言いたいだけ)で 行われた、AWS Solutions Trainin…


← 前の投稿

次の投稿 →