質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

447閲覧

Authorization ヘッダーをオリジンに転送するが、キャッシュにはAuthorization ヘッダーを含めない形にしたい

jj-ii

総合スコア11

Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2022/09/18 07:52

編集2022/09/19 14:49

前提

ECSをターゲットにしたALBをオリジンにして、CloudFrontをたてました。
ECSではfargateでAuth0を利用したBearer認証があるAPIを立てています。

APIはバージニアリージョンにあるため、アクセス速度が遅い、速度を改善したい。
一人目のユーザーがアクセスした後、二人目以降はオリジンに情報を取りに行かなくていいようにしたい。

実現したいこと

  • オリジンには認証情報が渡るようにしたいが(リクエストに Authorization ヘッダーが含まれて、ディストリビューションは Authorization ヘッダーをオリジンに転送する形。)
  • ユーザー⇔CloudFrontの間ではキャッシュ単位でAuthorizationを渡さない形にしたい
  • バックエンドに影響を出したくないので、できればCloudFront側だけで実現したい

他にやり方はあるのか、知見のある方に教えて頂きたいです。

発生している問題・エラーメッセージ

ドキュメントを見る限りでは、オリジンリクエストポリシーを使用して Authorization ヘッダーを転送することはできません。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cloudfront-authorization-header/

キャッシュポリシーにAuthorizationヘッダーを含める形にするしかなさそうですが
ユーザー毎に認証情報が違うので、毎回キャッシュが無い状態となり、オリジンに通信しないといけないような状況を避けたい。
二人目以降はアクセスを早くできるようにしたいため。

試したこと

  • キャッシュポリシーにAuthorizationヘッダーを含める→キャッシュされない

-オリジンへのカスタムヘッダーにAuthorizationヘッダーとBearerトークンを含める設定にする→キャッシュされない

補足情報(FW/ツールのバージョンなど)

他によさそうな情報を見つけられなかったのですが
不足情報あったらすみませんが教えてください、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自分の理解が足りず申し訳ないのですが、以下の通りでしょうか?

  • ユーザーのキャッシュがない場合はオリジンにアクセスしキャッシュを作成
  • キャッシュがあればオリジンにはアクセスせず、キャッシュを返す
  • ユーザーAのキャッシュがありユーザーBがアクセスしてきた場合ユーザーAのキャッシュを返す(こちらセキュリティ的に大丈夫ですか?)

上記の場合、以下の方法が考えられるかと思います

  • 誰でも同じデータを返すので認証不要のAPIにする

または

  • 全ユーザーが同じデータを使うAPIとユーザー固有のデータを返すAPIの認証方法を分ける
  1. 全ユーザーが同じデータを使うAPIに使用する認証情報は一定時間同じトークンを返しそれを認証に使う
  2. ユーザー固有の場合はauth0の認証を使用する

こちらの場合は2の部分だけキャッシュが効きませんが、、、

投稿2022/09/18 14:25

tamanegine

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jj-ii

2022/09/19 14:43

説明が分かりづらくすみません、認識されている形であっています。 ありがとうございます、頂いたアドバイスも検討してみます。 できればCloudFront側だけで実現したい要件ではあります。
tamanegine

2022/09/22 06:41

セキュリティ的に脆弱となるため設定できません。他のCDNでも同様かと思います。 アプリの設計を見直すべきかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問