はじめに

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」などありましたら、甘んじで受け入れる所存です。)

お問い合わせ

協栄情報はソフトウェア開発で培った技術力を活かした、クラウドソリューションによる問題可決や多くの分野におけるソフトウェア開発を中心に、お客様のビジネスを最大限に効率化する仕組みを提供いたします。

お問合せは下記URLから、お気軽に連絡ください。
https://www.cp-info.co.jp/contact/

Last modified: 2022-07-10

Author