こんにちは!恩塚です!
CloudFront経由のS3ファイルへの署名付きURLを発行してみました。
やってみた
※前回の記事の続きものです。
【初心者向け】CloudFront経由でS3のファイルを見る【やってみた】
クラウドフロント側で署名付きURLの設定
- CloudFrontのメニュー>ディストリビューション>ID選択>Behaviors>選択してEdit
- Restrict Viewer Access(Use Signed URLs or Signed Cookies) をYesにする
- Trusted Signers を Self にする
- 今回はCloudFrontの作成、キーペアの登録まで全て同一アカウントなのでこれを選択
署名付きキーペアを登録する
(参考)信頼された署名者の CloudFront キーペアを作成する
右上のアカウント名から「マイセキュリティ資格情報」を開く
CloudFrontのキーペア>新しいキーペアの作成
プライベートキーファイルを必ずダウンロードしておく!
署名付きURLを発行する
言語によっては発行方法が違うが今回はPHPでやってみる
AWS SDK for PHP が必要になるので下記のサイトを参考に自環境に入れておく
(参考)AWS SDK for PHPバージョン3のインストール
下記のphpファイルを作成する
(参考)AWS SDK for PHP バージョン 3 を使用した Amazon CloudFront の URL への署名
<?php
// SDKを入れた環境で場所を確認する
require 'XXXXXXXXXXX/vendor/autoload.php';
// アカウントのリージョン
define('REAGION', 'ap-northeast-1');
// ルートアカウントのアクセスキー情報(※取扱注意)
define('ACCESS_KEY', 'XXXXXXXXXXXXXXXX');
define('SECRET_ACCESS_KEY', 'XXXXXXXXXXXXXXXXX');
// ディストリビューションのドメインネーム
define('DOMAIN_NAME', 'https://XXXXXXXXXXX.cloudfront.net');
// S3に置いてあるファイル名
define('KEY', 'XXXXXXXXX.xxx');
// URLが有効な時間(s)
define('EXPIRES', 120);
// CloudFrontキーペア登録時にダウンロードした秘密鍵へのパス
define('PRIVATE_KEY', 'XXXXXXXXX.pem');
// キーペアのアクセスキーID
define('KEY_PAIR_ID', 'XXXXXXXXXXXXXXXXXX');
$config = [
'region' => REAGION,
'version' => 'latest',
'credentials' => [
'key' => ACCESS_KEY,
'secret' => SECRET_ACCESS_KEY
]
];
$sdk = new Aws\Sdk($config);
$client = $sdk->createCloudFront();
$expires = time() + EXPIRES;
$result = $client->getSignedUrl([
'url' => DOMAIN_NAME . '/' . KEY,
'expires' => $expires,
'private_key' => PRIVATE_KEY,
'key_pair_id' => KEY_PAIR_ID
]);
print_r($result);
必要なパラメータを設定したらコマンドラインで実行!
% php {作成したファイル.php}
長いURLが生成されたらおそらく成功なのでブラウザのアドレスバーに入力してみよう!
でけた!!
define('EXPIRES', 120);
で設定した時間待って画面リロードすると
制限が復活しました!
まとめ
信頼された署名者(今回の例では共通で使ったルートアカウント)とCloudFrontを関連付けたら署名付きURLを発行できる