経緯
CloudFront のバックにあるオリジンサーバーに対して Authorization
ヘッダを送信する設定をしたい。 しかし、この設定を実施しようと Origin Request Policy の Header: whitelist
とした後、Authorization を指定すると "The parameter Headers contains Authorization that is not allowed" というエラーになる。
なお、これを CloudFormation でやると "Invalid Parameter" としか出てこないので原因の特定にものすごい時間がかかった。
対処方法
一応、公式でも説明されている。
まとめると、
- Origin Request Policy に Authorization ヘッダを含めることはできない
- Authorization ヘッダをオリジンに渡したければ Cache Policy の Header に whitelist として Authorization を含めることで解決可能
- 今回知った仕様だが、Cache Policyに含めている値は Origin Request Policy を指定しなくても自動的にオリジンへと送信される(!) 仕様がある
- 上記URLでは
The header must be a part of the cache key to prevent the cache from satisfying unauthorized requests.
と説明されているが、これは、適当な Cache Policy とAuthorization
を含む Origin Request Policy を組み合わせた場合 Authorization の値に関係なく Authorization ヘッダごとキャッシュしてしまう事故が起こりえるため、これを許可していないと考えられる
- あるいは Legacy Setting を使う
23/02/05 追記
CloudFront からオリジンに各種ヘッダを送付する場合、何も考えずに全てのヘッダを送付したいこともある。 その場合、標準で提供されている AllViewer のポリシー を利用すると Authorization ヘッダを含めて全てのヘッダを送付できる。
ただし、例えば API Gateway をオリジンにする場合、Host をそのまま渡すと失敗したりするケースがあるので、全ての場合に AllViewer が利用できるわけではない点に注意のこと。