画像の保護
Imgix では、アセットを提供するために使用されるすべての URL を安全に保つことを推奨しています。Amazon S3、Google Cloud Storage、Microsoft Azure、DigitalOcean、Cloudflare R2、Wasabi、Linode、Web Folder Sources を安全にすることは必須ではありませんが、Web Proxy Sources には必須です。
エンタープライズ機能
Web Proxy ソースは、エンタープライズプランをご利用の Imgix のお客様にご提供しています。この機能にご興味がある場合は、営業チームにお問い合わせください。
アセット URL を安全にするために、私たちは「MD5」と呼ばれる暗号化ハッシュ関数を使用して、オリジナルの URL と各セキュアソースのために生成された一意のトークンを組み合わせます。このハッシュ関数の結果は、署名されていない URL の最後に s パラメータとして追加され、署名された URL を作成します。
URL のパスまたはパラメータが s パラメータが設定された後に変更された場合、変更された URL はアセットではなく「403 Forbidden」コードを返します。これにより、不正な第三者が URL のパラメータを変更することが防止されますが、パラメータを自身で変更する必要がある場合は、新しい URL を再署名する必要があります。
セキュア URL トークンは、ソースのセキュリティセクションにアクセスして、Show Token というボタンをクリックすることで見つけることができます。これは、セキュア URL が有効になっているソースでのみ利用可能です。

露出したトークン
セキュア URL トークンが露出した場合、同一のセキュアソースを作成し、新しいソースに切り替えることをお勧めします。 これにより、現在の URL が引き続き機能するため、古いソースを無効にするのに十分な時間が経過するまで待つことができます。
アセットを HTTPS 経由でのみ配信するよう必須にするには、HTTPS の必須化 (HSTS) を参照してください。
Secure URLs の有効化
アセット URL が署名される前に、Secure URL オプションがソースで有効になっている必要があります。Web Proxy Sources では自動的にオンになっていますが、Amazon S3、Google Cloud Storage、Microsoft Azure、Web Folder Sources では以下の手順に従ってオンにすることができます:
-
Sources ページにアクセスし、更新したいソースの View をクリックします。
-
Configuration セクションで Edit をクリックします。
-
Security のサブセクションで Secure URLs をチェックします。

-
ページの最下部にある Review and Deploy をクリックします。
-
変更内容を確認し、Deploy this Config をクリックしてソースへの変更を完了します。
Secure URL オプションがソースで有効になった今、そのソースから提供される URL は署名される必要があります。Tools タブにはクエリ文字列の最後に署名を追加する Sign Asset ツールが含まれています。次のセクションでこのツールの使用方法について説明します。
個別の画像のセキュリティ
Secure URLs が有効になると、ソースの詳細ページで Sign URLs ボタンをクリックすることで個々のアセットに署名することができます。

単一の画像

- 署名するアセットのサブドメインをドロップダウンメニューから選択します。
- アセットがソース内のフォルダにある場合は、そのパスを設定します。
- アセットを変換するために使用したいパラメータを割り当てます。
- 署名の有効期限を設定します。
- Sign Asset をクリックします。
- フォームは署名された URL と、署名された URL を直接クリップボードにコピーするボタンで置き換えられます。新しい署名された URL を使用してアセットを提供します。
複数の画像

- ページの右上にあるボタンの「Multiple」側をクリックします。
- 署名したいすべてのアセットの完全な URL を入力します。最大100の URL を入力することができます。
ツールの使用
アセット URL の署名は Tools view の Sign URLs セクションでも行うことができます。

- アセットの完全修飾 URL を入力します。アセットが画像の場合は、画像を変換するために使用したいパラメータを含めてください。指示については Rendering API Documentation を参照してください。
- 署名の有効期限を設定します。
- Sign Asset をクリックします。
- フォームは署名された URL と、署名された URL を直接クリップボードにコピーするボタンで置き換えられます。新しい署名された URL を使用してアセットを提供します。
別の URL を署名するには、単に Sign Another Asset をクリックします。
URLの有効期限
URLにはクエリ文字列に UNIX タイムスタンプを取る expires パラメータを通じて有効期限を設定することができます。例えば:
?expires=1477789261この UNIX タイムスタンプは 2016年10月30日 1時01分 (UTC時間) に変換されます。この時間後にこの URL へのリクエストが行われた場合、404ステータスコードが出力されます。リクエストが有効期限の日付前に行われた場合、画像の Cache-Control ヘッダーは有効期限までの残り時間を秒単位で置き換えられます。同じ expires 値で現在の時間が 2016年10月30日 1時00分 (UTC時間) の場合、ヘッダーは Cache-Control: max-age=60 を出力します。
クエリ文字列でタイムスタンプが自由に変更できるため、expires ヘッダーを使用するアセットには署名を推奨します。
HTTPS の必須化 (HSTS)
Secure URLs はリクエスト可能な URL を制御します。リクエストの方法を制御するには、HTTP Strict Transport Security (HSTS) を使用して、ソースへのすべてのリクエストに HTTPS を必須にすることができます。
ソースで HSTS を有効にすると、Imgix は次の 2 つを行います:
- CDN で HTTP を HTTPS にリダイレクトします。 プレーンな HTTP で行われたリクエストには、同じ URL の HTTPS 版を指す
301 Moved Permanentlyレスポンスが返されます。これはブラウザの HSTS ポリシーが適用される前にエッジで行われるため、初回の訪問者やブラウザ以外のクライアントにも適用されます。 Strict-Transport-Securityヘッダーを送信します。 レスポンスにはStrict-Transport-Security: max-age=<seconds>が含まれ、ブラウザはその期間、HTTP リクエストを最初に送信することなく、ソースのドメインに HTTPS を使用します。
ソースで HSTS を有効にするには:
- Sources ページにアクセスし、更新したいソースの View をクリックします。
- Edit Configuration をクリックし、Asset Security セクションまでスクロールします。
- Require HTTPS (HSTS) をチェックします。
- Policy Duration (seconds) に
0より大きい値を入力します。1 年は31536000です。 - Save Changes をクリックします。新しい設定はキューに追加され、まもなくデプロイされます。
HSTS は Management API でも、ソースの hsts 属性を使用して設定できます。この属性は enabled (ブール値) と max_age (秒単位の値) を受け取ります。
HSTS を有効にする前に
HSTS を有効にする前に、ソース上のすべてのカスタムドメインに有効な TLS 証明書が必要です。HSTS をオンにすると、カスタムドメインへの HTTP リクエストは HTTPS にリダイレクトされるため、証明書のないドメインでは画像が配信されなくなります。証明書の追加については、SSL/TLS ドキュメントを参照してください。
次の点に注意してください:
- ヘッダーは
max-ageのみを設定します。includeSubDomainsおよびpreloadディレクティブはサポートされていません。 - オフにした後もブラウザはポリシーを保持します。 ヘッダーを受け取ったブラウザは、ソースで HSTS を無効にした後も、ポリシー期間が終わるまで HTTPS を要求し続けます。
- キャッシュ済みの画像は段階的に更新されます。 HSTS のオン・オフや期間の変更は、キャッシュ済みの画像が CDN キャッシュから期限切れになるか、パージされた時点で反映されます。
アプリケーション内での画像の保護
アプリケーションまたはウェブサイトでスケールしてアセットを保護する場合、Imgix client libraries の使用を強くお勧めします。これにより、特定の言語での最新の問題に常に対応できるようになります。rendering api はシンプルですが、常に明らかではないいくつかの特殊なケースがあります。
クライアントライブラリがお使いの言語で利用できない場合は、Imgix ライブラリブループリント文書の Securing URLs section を参照してください。