LoginSignup
19
17

More than 5 years have passed since last update.

CloudFrontの署名付きURLをRubyで発行する

Last updated at Posted at 2017-11-17

概要

画像コンテンツを扱うアプリのバックエンドをRails/EC2/S3/CloudFrontで作った。
コンテンツ保護のためCloudFrontの署名付きURLを使ったが、何やらAWSのSDKとやらが必要だったのでそのメモ。

前提

S3/CloudFrontの設定と署名用のキーペアの作成が終わっていること。
下記を参考にさせてもらったらバッチリできた。

CloudFront+S3で署名付きURLでプライベートコンテンツを配信する
https://dev.classmethod.jp/cloud/aws/cf-s3-deliveries-use-signurl/

しかし、肝心の署名付きURLの発行しようとしたらRubyのサンプルがなくて詰んだ。
泣きながら初心者なりに試行錯誤して見ると一応動いた。

やったこと

AWS SDK をGemで追加して

Gemfile
gem 'aws-sdk-cloudfront'

キーペアのIDとダウンロードした秘密鍵を指定し、署名付きURLを発行する。

url_signer.rb
signer = Aws::CloudFront::UrlSigner.new(
  key_pair_id:      "APKA9ONS7QCOWEXAMPLE", # 鍵ID
  private_key_path: "tmp/pk-cloudfront.pem" # 鍵ファイル
)
# 5分間有効な署名付きURLを発行
signed_url = signer.signed_url(
  "https://d111111abcdef8.cloudfront.net/images/image.jpg",
  expires: Time.now.getutc + 5.minute
)

# 発行された署名付きURL
# signed_url = https://d111111abcdef8.cloudfront.net/images/image.jpg?Expires=123456789&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

これだけだ。

発行したURLでアクセスするとちゃんとコンテンツにアクセスできたし、有効期間(5分)が過ぎた後はちゃんとアクセスが拒否された。
ちなみにexpiresではなくpolicyも指定できるので、もっと複雑な条件も指定できるらしい。

参考

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17