4
2

More than 3 years have passed since last update.

Microsoft Edge で AWS の ALB(ELB)にアクセスしたときにスティッキーセッションが効かない?

Last updated at Posted at 2021-03-18

わたしが見つけたわけでも直接解決したわけでもないのですが、身近で表題のトラブルが発生したので、こちらに残しておきます。

※2021/03/18 現在の情報です。今後、Edge や ALB の動作が変更される可能性があります。

Microsoft Edge のバージョン

これを書いている時点で最新の 89.0.774.54(64 ビット)で確認しています。
01_edge_version.png

ALB 側の設定

ターゲットグループでスティッキーセッションを有効にし、Stickiness type を「lb_cookie」にしている場合に、この事象が発生します。この設定では ALB が「AWSALB」という Cookie を発行して、それをセッションキーにしてアクセスをターゲットサーバに振り分けます。

なお、ここでは Stickiness duration を 1 日にしています。
02_alb_targetgroup_01.png
03_alb_targetgroup_02.png

障害が発生する条件

  • Cookie「AWSALB」の値が複数ある状態で ALB にリクエストが行われる
    • 例えば、Domain 属性が無指定(=発行 FQDN のみ有効な Cookie)のものと、Domain 属性が指定されているものが混在している状態
    • (ALB は、そn仕様上 Cookie「AWSALB」を Domain 属性無指定で発行するが)何らかの事情で Domain 属性が指定された「AWSALB」が誤って発行(保存)されてしまった、など
  • 複数値のうちのいずれかがすでに有効期限がきれたセッションキーか、セッションキーとして無意味な値である

つまり、Edge 以外のブラウザでも発生する可能性があるトラブルですが、実は Edge で以下のような操作を行うことにより、この状態になることがわかっています。

  • IE11 で対象の ALB に接続
  • その後、Edge で IE11 の Cookie をインポート
    • Edge で IE11 の Cookie をインポートする際、Domain 属性無指定の Cookie が Domain 属性=発行元の FQDN に変換されて保存されてしまう←ここが問題

※わたしが再現テストで確認した範囲では、「AWSALB」の値(セッションキー)が複数あっても、いずれも有効期限内かつ同じターゲットサーバに振り分けられる状態で保存されたものであれば、継続して同じターゲットサーバに振り分けられていました。

再現テスト

ALB とターゲットグループ・ターゲットサーバを設定・配置

まず、前掲のようなターゲットグループを持つ ALB を用意し、ターゲットグループに 2 台以上の Web サーバを登録します。

※今回は 2 台のサーバを登録し、それぞれ「Server 1」「Server 2」というレスポンスが返るように設定しました。

Edge で初回アクセス

Cookie「AWSALB」(および「AWSALBCORS」)が発行されるのが確認できました。
04_edge_access_01.png

IE11 でアクセス

ここで一旦、ALB のターゲットグループの Stickiness duration を 1 秒に縮めます。これは、振り分けの有効期限が切れた Cookie「AWSALB」を IE11 で生成するためです。

IE11 でサイトにアクセスします。
05_ie_access.png

アクセス後、ALB のターゲットグループの Stickiness duration を 1 日に戻します。

Edge で IE11 の Cookie をインポート

設定メニューから Cookie をインポートします。
06_edge_cookie_import_01.png

対象のドメインを見ると、「AWSALB」が複数になっており、
07_edge_cookie_import_02.png

  • 一方が IE11 で発行したもの(ドメインが「.」で始まっている= Domain 属性が指定されている)

08_edge_cookie_import_03.png

  • もう一方が先ほど Edge でアクセスしたときに発行されたもの(ドメインが「.」で始まっていない= Domain 属性無指定)

09_edge_cookie_import_03.png

であることが分かりました。

再度 Edge でアクセス

再度 Edge でアクセスすると、Cookie「AWSALB」を複数含む形でリクエストが送られます。何度か繰り返しアクセスしてもこれは変わりません。
10_edge_access_02.png

続けて何度かアクセスすると、スティッキーセッションが有効、かつ先ほど Stickiness duration を 1 日に戻したにも関わらず、複数のターゲットサーバに振り分けられてしまいます。
11_edge_access_03.png

ALB では、通常なら Domain 属性無指定の Cookie「AWSALB」をアクセスの都度(値を)更新しながら同じターゲットサーバに結び付けてセッション管理するのですが、このケースでは Domain 属性ありの Cookie(すでに振り分けの有効期限が切れたセッションキーを値に持つもの)が邪魔をして、アクセスの都度新たにターゲットサーバの振り分けを行ってしまいます。

なお、現時点では、ターゲットグループの Stickiness duration の指定に関わらず、Cookie 自体の有効期限は 7 日で固定的に発行されます。つまり、IE11 から Edge にインポートした Cookie を削除せずに放置すると、最長で 7 日間トラブルが継続します。

対処方法

対象の Cookie「AWSALB」(Domain 属性あり)を削除すればスティッキーセッションによる振り分けが復活します。基本的にはブラウザ側で削除してもらえば良いはずですが、場合によってはサーバ側で Domain 属性と有効期限(過去の日付など)を指定して強制的に削除することも考えられるでしょう。

※「AWSALBCORS」が複数になってしまったときも同様に削除します。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2