この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
CloudFront経由のS3ファイルへのアクセスに、署名付きURL発行を追加していきたいと思います
構築準備
前提条件
AWSのCloudFront+S3の静的HPを作成済
参照:AWS CLIを利用してAmazon S3静的ウェブサイトのホスティング
ハンズオン前の画面状態
CloudFront設定時のドメイン又は、カスタムドメインでアクセスが可能な状態
構築手順
①ローカルでパブリック・プライベートキーの作成
②作成したパブリックキーをCloudFrontへ登録(
発行)key-pair-id
こちらの画像は
を入手後、署名付きURLを発行してから、コンテンツを入手するまでのフローです。key-pair-id
ハンズオン
ローカルでプライベートキー・パブリックキーの作成
参考:署名者のキーペアの作成
プライベートキーの作成
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を発行する
※
とは、パブリックキーのIDです。キーグループのIDではありませんkey-pari-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」などありましたら、甘んじで受け入れる所存です。)
お問い合わせ
協栄情報はソフトウェア開発で培った技術力を活かした、クラウドソリューションによる問題可決や多くの分野におけるソフトウェア開発を中心に、お客様のビジネスを最大限に効率化する仕組みを提供いたします。
お問合せは下記URLから、お気軽に連絡ください。
https://www.cp-info.co.jp/contact/