Skip to content

概要

AWSが提供しているマネージドCDNサービス Qudenでは、S3に配置している動画・サムネイルなどを配信する際に利用している

Qudenでの利用方法

S3の構成

S3のディレクトリごとにビヘイビアを設定し、アクセス制限をかけているため、まずはS3にどのようにオブジェクトを配置しているか見ていく

├── thumbnail
│   ├── <userId>
│   │   ├── <itemId>
│   │   │   ├── (ビデオメッセージのサムネイル)
│   │   │   ├── (ビデオメッセージ/ステップガイドのGIFサムネイル)
│   │   │   ├── cover
│   │   │   │   ├── (ステップガイドのサムネイル)
│   │   │   ├── edited
│   │   │   │   ├── (トリムされた動画、編集されたステップガイドのサムネイル)
│   │   │   │   ├── (トリムされた動画、編集されたステップガイドのGIFサムネイル)
│   │   └── (ユーザーアイコンとして登録した画像)
├── public
│   └── (Qudenロゴなど、パブリックかつユーザーに依存しないリソース)
├── raw-data
│   ├── <userId>
│   │   ├── <itemId>
│   │   │   ├── (mp4, webmなどの動画関連ファイル)
│   │   │   ├── screenshots
│   │   │   │   ├── (ステップガイド用に撮影されたスクリーンショット)
│   │   │   ├── drawn
│   │   │   │   ├── (ステップガイドの各ステップの画像)
│   │   │   ├── edited
│   │   │   │   ├── (トリムされた動画、編集されたステップガイドなどのリソース)
│   └── エンジニアチーム

userId, itemId などはmongoのObjectIdを使用している

CloudFrontのビヘイビア設定

上にあるビヘイビアが優先される仕様になっている 最新の設定はTerraformの設定を参照

  1. /thumbnail/????????????????????????/????????????????????????/*
  • アクセス制限あり。signed Cookie なしではアクセスできない
  • サムネイル・GIFサムネイルに対してのみアクセス制限をかけたいので、無理やり?の数を mongo ObjectId の文字数に合わせている
  1. /thumbnail/*
  • アクセス制限なし。URLを知っていれば誰でもアクセスできる
  • 現状では登録したユーザーアイコンの画像しか該当しない
  1. /public/*
  • アクセス制限なし
  1. デフォルト
  • アクセス制限あり。
  • 動画などが該当

IP アドレス制限

cloudFrontでのアクセス制限のほか、Lambda@Edgeを使ってS3のリソースに対してIPアドレス制限をかけている。 詳しくは、IPアドレス制限を参照

将来的に直したいポイント

  • ユーザーアイコン置き場
    • thumbnail配下に置いてあることで、CloudFrontのビヘイビアが複雑になっている
    • /profile-images/<userId> みたいに変更する?
    • サムネイルに関係ないので、可読性的にも微妙