Basic認証のあるサイトをCloudFrontでキャッシュする

ベーシック認証・ダイジェスト認証が有効なサイトをAmazon CloudFrontでキャッシュするには、Cache BehaviorのキャッシュキーにリクエストヘッダーのAuthorizationを含めます。
2019.11.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

問題

ウェブサイトにアクセス制限を掛けるためにBasic認証やDigest認証が利用されることがあります。

このようにアクセス制限されたサイトの前段にデフォルト設定の Amazon CloudFront を設置すると、正しい認証情報を入力しても、認証ダイアログが無限ループで表示されます。

解決方法

Baisc/Digest認証のような HTTP 認証はチャレンジ・レスポンス方式で行われ、クライアントはサーバーからのレスポンス時に認証情報をリクエストヘッダーの Authorization に含めます。

※図は "HTTP authentication - HTTP | MDN" から引用

したがって、同じURLに対して

  • Authorization ヘッダーが空っぽ(新規アクセス)
  • Authorization の認証情報が間違っている

リクエストをもとに CloudFront がキャッシュすると、問題のようなことが起こります。

この問題を解決するには CloudFront のキャッシュキーにリクエストヘッダーの Authorization を含めるようにします。

具体的には、CloudFront の Cache Behavior 設定画面において、Cache Based on Selected Request HeadersWhitelist 形式にし、Whitelist HeadersAuthorization を追加します。

このようにすることで

  • Authorization ヘッダーが空っぽ(新規アクセス)
  • Authorization の認証情報が間違っている
  • Authorization の認証情報が正しい

リクエストを個別にキャッシュできるようになります。