はじめに
CloudFront経由のS3ファイルへのアクセスに、署名付きURL発行を追加していきたいと思います
構築準備
前提条件
AWSのCloudFront+S3の静的HPを作成済
参照:AWS CLIを利用してAmazon S3静的ウェブサイトのホスティング
ハンズオン前の画面状態
CloudFront設定時のドメイン又は、カスタムドメインでアクセスが可能な状態
構築手順
①ローカルでパブリック・プライベートキーの作成
②作成したパブリックキーをCloudFrontへ登録(key-pair-id
発行)
こちらの画像はkey-pair-id
を入手後、署名付きURLを発行してから、コンテンツを入手するまでのフローです。
ハンズオン
ローカルでプライベートキー・パブリックキーの作成
参考:署名者のキーペアの作成
プライベートキーの作成
OpenSSL を使用して 2,048 ビット長の RSA キーペアを生成し、private_key.pem という名前のファイルに保存
openssl genrsa -out private_key.pem 2048
パブリックキーの抽出
private_key.pem という名前のファイルからパブリックキーを抽出
openssl rsa -pubout -in private_key.pem -out public_key.pem
CloudFrontでの設定(パブリックキーの登録)
パブリックキーを CloudFront にアップロードする
サービス『CloudFront』から左ペイン『パブリックキー』を選択して、『パブリックキーを作成』押下
パブリックキーを作成
名前を入力して、__パブリックキー__の値をPEM形式で貼り付ける
【確認のコマンド】
キーについては下記コマンドで表示、コピーして入力する
cat public_key.pem | pbcopy
取得してコピーされた値を入力して、CloudFrontにパブリックキーを作成する
パブリックキーをキーグループに追加する
キーグループ作成
CloudFrontでの設定(ディストリビューションでの設定)
署名付きURLの対象とするディストリビューションを選択
ビヘイビアの設定
『ビヘイビアの設定』から、『ビューワーのアクセスを制限する』を画像のように設定・選択をする
デプロイが終了したら完了
デプロイ前では署名付きURLは発行されません
ターミナルから署名付きURLを発行する
※key-pari-id
とは、パブリックキーのIDです。キーグループのIDではありません
署名付きURL発行コマンド
より詳細に設定する場合
参考:AWS CLIコマンドリファレンス
aws cloudfront sign --url https://XXXXXXXXXX.cloudfront.net/index.html --key-pair-id XXXXXXXXXX --private-key file://private_key.pem --date-less-than 2022-07-11
上記コマンドに対してのレスポンス
https://XXXXXXXXXX.cloudfront.net/index.html?Expires=XXXXXXXXXX&Signature=XXXXX(中略)XXXXX&Key-Pair-Id=XXXXXXXXXX
挙動確認
返却されたURLにアクセスする
署名なしでアクセスする
当然ですがアクセスすることは出来ません
<Code>MissingKey</Code>
と表示されます
日付が過ぎた状態でアクセスする
当然ですがアクセスすることは出来ません
<Code>AccessDenied</Code>
と表示されます
さいごに
署名付きURLを発行してオブジェクトへのアクセスをハンズオンしてみました。
当初オブジェクトへのアクセスのためS3での設定かと思っていたのですが、CloudFrontだけの設定で済むものかと思ってませんでした。
オリジンのS3に対するアクセス制御の一つに署名付きURLが設定できると、少しは認識を深めることが出来ました(「おま、ちょ認識違うぜww」などありましたら、甘んじで受け入れる所存です。)