😺

【AWS】CloudFrontの署名付きURLを使ってみた

2024/01/24に公開

はじめに

CloudFrontの署名付きURLを実際に動かして、試してみたハンズオン記事です。
S3内のオブジェクトを直接取得するのではなく、署名付きURLを発行してよりセキュアにオブジェクトを取得したいと思います。また、今回はEC2インスタンスから署名付きURLの発行を行います。

使用するサービス

  • EC2
  • CloudFront
  • S3

ハンズオン

以下の流れで署名付きURLのハンズオンを進めます。

  1. EC2インスタンスの設定
  2. キーペアの作成
  3. パブリックキーの登録
  4. キーグループの作成
  5. S3バケットの設定
  6. CloudFrontディストリビューションの設定

1. EC2インスタンスの作成

このEC2インスタンスは、キーペアの作成や署名付きURLの作成に用います。
名前:cloudFront-signedurl-test
キーペア: 任意の名前で新規作成(.pem)
その他のパラメータ:デフォルト値

また、このEC2インスタンスではSSMを利用します。
以下を参考にして、SSM接続ができることを確認して下さい。
https://dev.classmethod.jp/articles/ec2-access-with-session-manager/

また、AWS CLIを用いますので、こちらもインストールして下さい。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

2. キーペアの作成

キーペアは次のコマンドで作成します。

openssl genrsa -out cloudfront-test.private.pem 2048
openssl rsa -pubout -in cloudfront-test.private.pem -out cloudfront-test.pub.pem

3. パブリックキー &キーグループの作成

3で作成したパブリックキーをCloudFrontのサイドメニューのパブリックキーを作成を選択して、登録します。
名前:cloudfront-signedurl-test-publickey

次にキーグループを作成します。
サイドメニューからキーグループを選択し、キーグループを作成します。
名前:cloudfront-signedurl-test-keygroup
パブリックキー:cloudfront-signedurl-test-publickey

4. S3バケットの作成

名前: cloudfront-signedurl-test-backet
その他の設定はデフォルト値として、バケットを作成します。

バケットが作成されたら、適宜適当な画像をアップロードして下さい。

5. CloudFrontディストリビューションの作成

オリジン名:loudfront-signedurl-test-backetを選択
オリジンアクセス:有効化する

ビューアーのアクセスを制限する:作成済みのキーグループを選択して下さい。

その他の設定は基本的にデフォルトとして次に進みます。(必要があれば適宜変更して下さい。)
ディストリビューション作成後に次のような警告が出るので、指示に従ってバケットポリシーを修正して下さい。

6.署名付きURLによるS3バケット内のオブジェクトへのアクセス

まずは普通にS3内のオブジェクトにアクセスしてみます。

→ このようにつながらないです。

次に署名付きURLを発行し、アクセスしてみます。
署名付きURLは次のコマンドで発行します。

aws cloudfront sign \
--url https://<DistributionDomain>.cloudfront.net/<file名> \
--key-pair-id <KeyPairID> \
--private-key file://<private-keyへのパス> \
--date-less-than 2024-12-31T00:00:00+09:00

うまくいくと、非常に長いURLが生成されます。
そのURLにブラウザからアクセスすると…

→ 画像がしっかりと表示されましたね!(好きなつけ麺の写真)

まとめ

今回は、CloudFrontから署名付きURLを発行して、S3内のオブジェクトにアクセスしてみました。
S3の方の署名付きURLに関してもあまり詳しくないので触れていければと思います。

参考文献

  • 公式ドキュメントhttps://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html

Discussion