【SAP対策】CloudFrontで署名付きURLを発行する【やってみた】

2020.04.06

こんにちは!恩塚です!

「AWS認定SAP対策で実際に試してみる」のコーナー第②弾

CloudFront経由のS3ファイルへの署名付きURLを発行してみる

今回はこのワードを元に試していくぞ〜Let's go!!

やってみた

※前回の記事の続きものです。

【SAP対策】CloudFront経由でS3のファイルを見る【やってみた】

クラウドフロント側で署名付きURLの設定

  • CloudFrontのメニュー>ディストリビューション>ID選択>Behaviors>選択してEdit
  • Restrict Viewer Access(Use Signed URLs or Signed Cookies)Yesにする
  • Trusted SignersSelf にする
    • 今回はCloudFrontの作成、キーペアの登録まで全て同一アカウントなのでこれを選択

署名付きキーペアを登録する

(参考)信頼された署名者の CloudFront キーペアを作成する

右上のアカウント名から「マイセキュリティ資格情報」を開く

CloudFrontのキーペア>新しいキーペアの作成

プライベートキーファイルを必ずダウンロードしておく!

署名付きURLを発行する

(参考)PHP を使用して 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,<br ?--> '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を発行できる