Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
Search
Ken'ichirou Kimura
April 20, 2024
Technology
1
1.5k
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
2024/04/20に開催されたGlobal Azure 2024(東京会場)の10分セッションの資料です。
https://jazug.connpass.com/event/311408/
Ken'ichirou Kimura
April 20, 2024
Tweet
Share
More Decks by Ken'ichirou Kimura
See All by Ken'ichirou Kimura
LINE Notify互換のボットを作った話
kenichirokimura
0
200
自分がご機嫌になれる 素敵な場所を守るために
kenichirokimura
2
84
AWSで動くプログラムをC#で書こう ~主にLambdaのお話~
kenichirokimura
1
72
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
290
Alternative GitHub Secret Manager
kenichirokimura
0
82
SORACOMで実現するIoTのマルチクラウド対応 - IoTでのクリーンアーキテクチャの実現 -
kenichirokimura
0
600
How to use Amazon Cognito user pools with custom UI and also OIDC
kenichirokimura
0
420
あなたも今日からIoTと握手! SORACOM/SORACOM UGの紹介
kenichirokimura
1
140
推し活の1つとしての株購入~みんなでソラコムの株主になろう~
kenichirokimura
0
240
Other Decks in Technology
See All in Technology
新卒エンジニアがCICDをモダナイズしてみた話
akashi_sn
2
250
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
170
AWSで作るセキュアな認証基盤with OAuth mTLS / Secure Authentication Infrastructure with OAuth mTLS on AWS
kaminashi
0
180
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
130
CodePipelineのアクション統合から学ぶAWS CDKの抽象化技術 / codepipeline-actions-cdk-abstraction
gotok365
5
280
Bazel for Ruby (RubyKaigi 2025)
p0deje
0
110
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
250
ここはMCPの夜明けまえ
nwiizo
30
11k
意思決定を支える検索体験を目指してやってきたこと
hinatades
PRO
0
230
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
120
技術者はかっこいいものだ!!~キルラキルから学んだエンジニアの生き方~
masakiokuda
2
270
ビジネスとデザインとエンジニアリングを繋ぐために 一人のエンジニアは何ができるか / What can a single engineer do to connect business, design, and engineering?
kaminashi
1
240
Featured
See All Featured
Site-Speed That Sticks
csswizardry
5
500
GitHub's CSS Performance
jonrohan
1030
460k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
680
Writing Fast Ruby
sferik
628
61k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
53k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Producing Creativity
orderedlist
PRO
344
40k
It's Worth the Effort
3n
184
28k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Transcript
FrontDoorとWebAppsを組み合わせた際の リダイレクト処理の注意点 株式会社オルターブース 木村健一郎
自己紹介 株式会社オルターブース クラウドソリューション部 副部長 木村 健一郎(Kenichiro KIMURA) 大学院在籍中に未踏ソフトウェア創造事業に 採択され、その成果を元に設立したスタート アップに20年在籍。
2014年頃からクラウドの世界に触れる中で サーバレスとIoTに魅せられ、JAWS-UG福岡 やSORACOM UG九州のコアメンバーとして コミュニティ活動を行っている。 2020年にオルターブースにジョイン。テッ クリードとしてお客様の支援やプロダクトの 開発に従事している。 家に帰ると6歳の娘と戯れる日々。 AWS Samurai2019受賞 SORACOM MVC2020,2023受賞 Twitter: @show_m001(しょーちゃん) Copyright © Alterbooth Inc. All Rights Reserved. 2
• App Service(WebApps/Functions)の前段にFrontDoorやApplication Gatewayなどのリバースプロキシを置くときはリダイレクト処理に注意しま しょう • よくあるケースはOIDCやEasyAuthでの認証 • 根本的な問題は「App Serviceが、自身が何というドメイン名で動いていると
認識しているか」 • 解決方法は3つ • アプリを改修する(OIDCの場合) • App Serviceの設定をリソースエクスプローラーで変更する(EasyAuthの場合) • カスタムドメインを使う(万能) 本日の結論 Copyright © Alterbooth Inc. All Rights Reserved. 3
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 4 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 5 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 6 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 7 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと 社員だけがアクセスできるようにEntra IDで認証かけて ね!
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 8 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと 社員だけがアクセスできるようにEntra IDで認証かけて ね! EasyAuthでEntra IDの認証使おう・・・よし、設定完了
Copyright © Alterbooth Inc. All Rights Reserved. 9 認証完了したらこの画面になったぞ! 動いてないじゃないか!
彼がやったのは以下の3つです。一体何が悪かったのでしょうか? • FrontDoor経由でWebAppsにアクセスできるようにした • WebAppsへの直接アクセスを遮断した • WebAppsにEasyAuthでの認証を仕掛けた 一体何が起こったのか? Copyright ©
Alterbooth Inc. All Rights Reserved. 10
Copyright © Alterbooth Inc. All Rights Reserved. 11 EasyAuthやOIDCは、以下のような動作をします。 •
未認証のユーザからアクセスされると、認証サーバにユーザをリダイレクトす る • この時、戻って来て欲しいURL(主に自分自身)をredirect_uriというパラメータで渡す • 認証サーバはユーザを認証したら認証結果をつけてredirect_uriにリダイレク トする
Copyright © Alterbooth Inc. All Rights Reserved. 12 Entra IDで認証して、戻ってきたURLがWebAppsへの直接アクセスになってる!!
Copyright © Alterbooth Inc. All Rights Reserved. 13 実際にredirect_uriの値を確認するとWebAppsのURL(ドメイン名)になってます。 FrontDoorのドメイン名でアクセスしてるのに!
https://login.microsoftonline.com/****/oauth2/v2.0/authorize?response_type= code+id_token&redirect_uri=https%3A%2F%2F****.azurewebsites.net%2F.auth %2Flogin%2Faad%2Fcallback&*****
EasyAuthの場合、WebAppsが設定しています。 OIDCの場合はアプリケーションまたは認証フレームワークが設定しています。 この時、WebAppsやアプリケーションは「自分自身がどういうドメイン名で動 いているか」を知っていて、それをredirect_uriに設定します。 redirect_uri、誰が設定している? Copyright © Alterbooth Inc. All
Rights Reserved. 14
WebAppsは基本的にマルチテナントのSaaSなので、1つのインスタンス上で複 数のアプリが動きます。そして、どのHTTPリクエストをどのアプリにルーティ ングするかはホスト名(HTTP Hostヘッダ)で決定されます。 WebAppsはマルチテナントのSaaS Copyright © Alterbooth Inc. All
Rights Reserved. 15 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ site1.azurewebsites.netはアプ リ1、site2.azurewebsites.net はアプリ2だな
この時、アプリ1は自身がsite1.azurewebsites.netと認識しているし、アプリ2 は自身がsite2.azurewebsites.netと認識してるので、これをredirect_uriに設 定します。 Copyright © Alterbooth Inc. All Rights Reserved.
16 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ redirect_uriは自分自身を表 すsite1.azurewebsites.netに しよう redirect_uriは自分自身を表 すsite2.azurewebsites.netに しよう
ここで、WebAppsの前段にFrontDoorが入るとこうなります。 FrontDoorが入るとどうなる? Copyright © Alterbooth Inc. All Rights Reserved. 17
アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ site1.azurewebsites.netはアプ リ1、site2.azurewebsites.net はアプリ2だな https://site1.azurefd.net/ https://site2.azurefd.net/ site1.azurefd.netはsite1.azurewebsites.netのWebAppへ、 site2.azurefd.netはsite2.azurewebsites.netのWebAppへ転 送すればいいな
FrontDoorがあってもアプリ1は自分がsite1.azurewebsites.netだと思っている し、アプリ2は自分がsite2.azurewebsites.netだと思っています。 つまり Copyright © Alterbooth Inc. All Rights Reserved.
18 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ redirect_uriは自分自身を表す site1.azurewebsites.netにしよう redirect_uriは自分自身を表す site2.azurewebsites.netにしよう
特に指定しない場合はアクセスする際にDNSに問い合わせる名前とHostヘッダ は一致しますが、これを変更することもできます。 • DNS上の名前は「これからアクセスするリソースのIPアドレスを取得するた め」に使う • つまりOSI参照モデルで言えばL3 • HostヘッダはWebサーバ(WebApps)やリバースプロキシー(FrontDoor)に、 「これからどういうWebリソースにアクセスしたいか」を指示するために使
う • つまりOSI参照モデルで言えばL7 DNS名とHostヘッダ Copyright © Alterbooth Inc. All Rights Reserved. 19
本質的に言えば、WebAppsに「自身のドメイン名がFrontDoorのものと同じで ある」ということを認識させれば良いことになります。 そのためには、3つの方法があります。 どうしたら解決できる? Copyright © Alterbooth Inc. All Rights
Reserved. 20
リバースプロキシのホスト名はX-Forwarded-Hostというヘッダに入っています。 OIDCの場合は、これをredirect_uriに使うようにアプリを改修します。 1.アプリケーションを改修する(OIDCの場合) Copyright © Alterbooth Inc. All Rights Reserved.
21 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ redirect_uriはリバースプ ロキシを表す site1.azurefd.netにしよう redirect_uriはリバースプ ロキシを表す site2.azurefd.netにしよう
EasyAuthの場合はredirect_uriを設定してるのはWebAppsのため、改修はでき ません。WebAppsに「前段にリバースプロキシーがいるよ」ということを教え る必要があります。 2.WebAppsのproxy設定を変える(EasyAuthの場合) Copyright © Alterbooth Inc. All Rights
Reserved. 22 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ リバースプロキシーがいるから redirect_uriはリバースプロキシを 表すsite1.azurefd.netにしよう リバースプロキシーがいるから redirect_uriはリバースプロキシ を表すsite2.azurefd.netにしよう
Copyright © Alterbooth Inc. All Rights Reserved. 23 portalから設定できないので、リソースエクスプローラー (https://resources.azure.com/)
からアクセスします。 該当のリソースのconfig>authSettingsV2にアクセスします。
Copyright © Alterbooth Inc. All Rights Reserved. 24 forwardProxyという設定を「“convention”:“NoProxy”」から 「“convention”:“Standard”」に変えます。
FrontDoorとWebAppsに、同じカスタムドメインを設定します 3.カスタムドメインを設定する Copyright © Alterbooth Inc. All Rights Reserved. 25
アプリ1 アプリ2 https://example.com/ https://example.net/ example.comはアプリ1 のカスタムドメインだ からそちらへ example.netはアプリ2 のカスタムドメイン だからそちらへ site1.azurewebsites.netに Hostヘッダexample.comでアクセス site2.azurewebsites.netに Hostヘッダexample.netでアクセス
FrontDoorとWebAppsに、同じカスタムドメインを設定します 3.カスタムドメインを設定する Copyright © Alterbooth Inc. All Rights Reserved. 26
アプリ1 アプリ2 https://example.com/ https://example.net/ redirect_uriは自分自身 を表すexample.comに しよう redirect_uriは自分自 身を表すexample.net にしよう site1.azurewebsites.netに Hostヘッダexample.comでアクセス site2.azurewebsites.netに Hostヘッダexample.netでアクセス
• example.comやexample.netといったカスタムドメインのDNS設定は、 FrontDoorに向けます • バックエンド設定で、WebAppsに接続する際のHostヘッダをカスタムドメイ ンにします • 接続先ホスト名はWebAppsのドメイン名のままにします • WebAppsにカスタムドメインを設定する際はCNAMEの設定でのドメイン認
証が必要なので、順番としてはWebApps→FrontDoorの順でカスタムドメイ ンを設定します • AppService PlanはB1以上が必要です • この方法だと、WebAppsもアプリケーションも自身のホスト名をカスタムド メインと認識します • Hostヘッダがカスタムドメインになるから Copyright © Alterbooth Inc. All Rights Reserved. 27
• App Service(WebApps/Functions)の前段にFrontDoorやApplication Gatewayなどのリバースプロキシを置くときはリダイレクト処理に注意しま しょう • よくあるケースはOIDCやEasyAuthでの認証 • 根本的な問題は「App Serviceが、自身が何というドメイン名で動いていると
認識しているか」 • 解決方法は3つ • アプリを改修する(OIDCの場合) • App Serviceの設定をリソースエクスプローラーで変更する(EasyAuthの場合) • カスタムドメインを使う(万能) 本日の結論 Copyright © Alterbooth Inc. All Rights Reserved. 28
つまらない世界からもっと刺激のある世界へ変化させよう! Copyright © Alterbooth Inc. All Rights Reserved. 29