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
第111回 雲勉【オンライン】Azure AD と Static Web Apps でWebサ...
Search
iret.kumoben
August 17, 2023
Technology
0
390
第111回 雲勉【オンライン】Azure AD と Static Web Apps でWebサイトに認証機能を導入する
下記、勉強会での資料です。
https://youtu.be/AEIqiNPe8i8
iret.kumoben
August 17, 2023
Tweet
Share
More Decks by iret.kumoben
See All by iret.kumoben
第146回 雲勉 BLEAを眺めてCDKの書き方について学ぶ
iret
1
42
第145回 雲勉 Amazon ECSでサービス間通信する方法を調べてみよう
iret
0
39
第144回 雲勉 Amazon Aurora Serverless v2の基礎とアーキの裏側を覗いてみる
iret
0
83
第143回 雲勉 [New Relic]インフラストラクチャ監視と気をつけたいポイント
iret
0
39
第142回 雲勉 AWS Backupの復元テストで自動化できること・できないこと
iret
0
83
第141回 雲勉 Amazon Inspectorによる脆弱性管理~ECR コンテナイメージ編~
iret
0
180
第2回 雲勉LT大会 パブリッククラウドのサーバレスサービスの違いを調べてみた
iret
0
24
第2回 雲勉LT大会 AWS Control Tower の「コントロール」って何? という謎から AWS Control Tower を知る
iret
0
23
第2回 雲勉LT大会 AWS/Google Cloud/Wasabi ストレージサービスを比較したい
iret
0
43
Other Decks in Technology
See All in Technology
ドメイン名の終活について - JPAAWG 7th -
mikit
32
19k
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
140
Platform Engineering for Software Developers and Architects
syntasso
1
450
TinyGoを使ったVSCode拡張機能実装
askua
2
210
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
270
20241108_CS_LLMMT
shigashiyama
0
260
利きプロセススケジューラ
sat
PRO
5
2.7k
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
290
強いチームと開発生産性
onk
PRO
28
8.8k
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
200
Lambdaと地方とコミュニティ
miu_crescent
2
320
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
8.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Facilitating Awesome Meetings
lara
50
6.1k
Practical Orchestrator
shlominoach
186
10k
Docker and Python
trallard
40
3.1k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Scaling GitHub
holman
458
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
43
2.2k
Faster Mobile Websites
deanohume
305
30k
Speed Design
sergeychernyshev
24
610
Typedesign – Prime Four
hannesfritz
40
2.4k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Transcript
第111回 雲勉【オンライン】 Azure AD と Static Web Apps で Web
サイトに認証機能を導入する 平田 健士郎
アジェンダ • ⾃⼰紹介 • 注意点 • 話すこと/話さないこと • Azure AD
と Static Web Apps で Web サイトに認証を導⼊するケース • デモ • デモ環境の作成⽅法ご説明 • まとめ
⾃⼰紹介
⾃⼰紹介 平⽥ 健⼠郎 (ひらた けんじろう) ▪ クラウドインテグレーション事業部 構築第⼋セクション ▪ 業務内容はクラウドインフラの設計/構築/運⽤
▪ アイレット⼊社約1年半 ▪ 前職で MSP を 2 年を経験してそこで初めてクラウドに触れる ▪ 業務では AWS 中⼼だが Azure 案件の経験もあり ←奥さんに描いてもらった似顔絵
注意点
注意点① Azure AD (Azure Active Directory) は Microsoft Entra ID
に 名称が変更される予定ですが、この登壇時点ではまだ名称変更されて いないため、この登壇では「Azure AD」と名称を統⼀します。 https://www.microsoft.com/ja-jp/security/business/identity-access/azure-active-directory
注意点② 当資料内の動画、画像で実際の Azure のリソースが表⽰されます が、動画公開時は全て削除しております。 ご了承ください。
話すこと/話さないこと
話すこと •Static Web Apps と Azure AD の簡単な説明 •Static Web
Apps での静的 Web サイトの作成⽅法 •Azure AD の認証を Static Web Apps に組み込む⽅法 •特定の Azure AD テナントのみ認証を許可する⽅法 話さないこと •Azure の基礎的な操作⽅法 •OpenID Connect 等の認証プロトコルの深掘りした話
Azure AD と Static Web Apps で Web サイトに認証を導⼊するケース
こんなケースがあったとします 社内向けに簡単な Web サイトを作るん だけど、 社内のユーザーだけが認証されるよう にして外部から見えないようにしたい なー
こんなケースがあったとします Web サイトを稼働させている サーバー内で専用の認証機能を導入し てユーザーを作る? [面倒くさい] Web サイト専用にユーザーを作成すること になるため管理が増えて煩雑化 👎
こんなケースがあったとします 社内で利用している Azure AD の認証 を使い回す形で Web サイトに組み込 めたら楽なのでは!? [楽!]
既存の Azure AD で SSO ができるのでユー ザー管理の手間が増えないため楽 👍
Static Web Apps で作成した 静的 Web サイトに AzureAD で認証を導入します!
Static Web Apps とは 静的 Web サイトのホスティングサービス • 手軽に 静的
Web サイトを作成できる (無料プランもある) • サーバーレス • GitHub Actions 等の CI/CD ワークフロー
Azure AD とは クラウドベースの ID およびアクセス管理サービス クラウドサービスやオンプレミスに認証・認可を提供 認証 : 身元を確認すること
認可 : 権限を与えること シングルサインオン (SSO) や多要素認証の導入などができる
デモ
イメージ
イメージ Static Web Apps の URL に対して ブラウザからアクセスする
イメージ 認証が要求されるため サインインする
イメージ サインインできれば Static Web Apps のコンテンツが表示される
実際の様子を動画でお見せします!
動画については YouTube をご覧ください 上記の QR コードで登壇動画の該当の時間にジャンプできます
こんな感じです!
さらに発展した使い方の 例を紹介します
発展系の例 (今回はこれは作りません) (例) 今話題の ChatGPT を Azure 内で利用できる 「Azure OpenAI
Service」を 利用するサービスを社内の人 のみに公開する
発展系の例 (今回はこれは作りません) (例) 今話題の ChatGPT を Azure 内で利用できる 「Azure OpenAI
Service」を 利用するサービスを社内の人 のみに公開する
というわけで 先ほど動画でお見せした 環境の作り方をご説明します
デモ環境の作成⽅法ご説明
説明する環境の構成図
ソースコードの作成 clphirata-kumoben-azuread-staticapp/ ├ index.html ├ README.md └ styles.css
ソースコードの作成 clphirata-kumoben-azuread-staticapp/ ├ index.html ├ README.md └ styles.css
ソースコードの作成 clphirata-kumoben-azuread-staticapp/ ├ index.html ├ README.md └ styles.css
ソースコードの作成 clphirata-kumoben-azuread-staticapp/ ├ index.html ├ README.md └ styles.css
GitHub リポジトリ作成 リポジトリ名 : clphirata-kumoben-azuread-staticapp
GitHub リポジトリにコードを push clphirata-kumoben-azuread-staticapp/ ├ index.html ├ README.md └ styles.css
Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •
Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成
Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •
Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成 自動デプロイされてコンテンツが表示できるようになる • Static Web Apps を作成したら GitHub リポジトリからソースを取得してデプロイ • コンテンツ表示を確認
Static Web Apps の作成 • Static Web Apps 名に「clphirata-kumoben-staticapp」を指定 •
Standard プランを選択 (後で説明) • ソースとなる GitHub リポジトリを指定 • Static Web Apps 作成 動画で様子をお見せします! 自動デプロイされてコンテンツが表示できるようになる • Static Web Apps を作成したら GitHub リポジトリからソースを取得してデプロイ • コンテンツ表示を確認
Static Web Apps の作成 動画については YouTube をご覧ください 上記の QR コードで登壇動画の該当の時間にジャンプできます
GitHub Actions による 自動デプロイ Static Web Apps を作成して ソースに GitHub
リポジトリを指定 することで GitHub Actions という 機能を使って 自動デプロイ を実現 できる
GitHub Actions による 自動デプロイ 同時に GitHub のソースコードに GitHub Actions 設定用の
yuml ファイルが作成される
GitHub Actions による 自動デプロイ 同時に GitHub のソースコードに GitHub Actions 設定用の
yuml ファイルが作成される 中身はこんな感じ → (今回はこの部分はメインではない ため詳細は割愛します)
GitHub Actions による 自動デプロイ GitHub のソースコードに GitHub Actions 設定用の yuml
ファイルが作成されたので、 ローカルをリモートに合わせるため git pull を行います。
ここまで作れました
ここから Web サイトの認証に 既存の Azure AD テナントを使うため の設定を行います。
ここから Web サイトの認証に 既存の Azure AD テナントを使うため の設定を行います。 が、その前に
Static Web Apps では 既存の認証プロバイダーを使うための 機能が デフォルトで備わっています
Static Web Apps で既存の認証を使う機 能 Static Web Apps には作成段階で何もしなくても デフォルトで既存の認証プロバイダーを使う機能が備わってい
ます。
作成時点で 3 つの認証プロバイダーが設定されています 認証プロバイダー Azure AD GitHub Twitter Static Web
Apps で既存の認証を使う機 能
それぞれ専用のログイン URL が用意されています 認証プロバイダー ログイン URL Azure AD https://**********.azurestaticapps.net/.auth/login/aad GitHub
https://**********.azurestaticapps.net/.auth/login/github Twitter https://**********.azurestaticapps.net/.auth/login/twitter 動画で様子をお見せします! Static Web Apps で既存の認証を使う機 能
Static Web Apps で既存の認証を使う機 能 動画については YouTube をご覧ください 上記の QR
コードで登壇動画の該当の時間にジャンプできます
え、じゃあこれで やりたいことは実現できたの?
実はそうではありません
Static Web Apps の認証機能 ↓ 先ほどの動画でサインインしたアカウント
Static Web Apps の認証機能 ←この Azure アカウントの Azure AD テナントのユーザーではない
↓ 先ほどの動画でサインインしたアカウント
Static Web Apps の認証機能 Static Web Apps の デフォルトの認証機能だけでは この世のどこかの
Azure AD のユーザー であれば誰でも認証できてしまう状態
最初にお見せした要望の話 社内向けに簡単な Web サイトを作るん だけど、 社内のユーザーだけが認証されるよう にして外部から見えないようにしたい なー
社内向けに簡単な Web サイトを作るん だけど、 社内のユーザーだけが認証されるよう にして外部から見えないようにしたい なー 最初にお見せした要望の話 特定の Azure
AD テナントのみ 認証を許可したい
ここからは 特定の Azure AD テナントのみ 認証を許可するための設定をします
Azure AD でアプリの登録 (新規登録) 「アプリの登録」 Azure AD と他のリソースを連携するための設定箇所 ここで特定の Azure
AD テナントに 今回作成した Static Web Apps を登録することで 特定の Azure AD テナントのみ認証を許可する設定をします。
Azure AD でアプリの登録 (新規登録)
Azure AD でアプリの登録 (新規登録) 指定した Azure AD テナントで Static Web
Apps が認証できるように登録する
Azure AD でアプリの登録 (新規登録) 指定した Azure AD テナントで Static Web
Apps が認証できるように登録する 動画で様子をお見せします!
Azure AD でアプリの登録 (新規登録) 動画については YouTube をご覧ください 上記の QR コードで登壇動画の該当の時間にジャンプできます
Azure AD でアプリの登録 (認証) 「アプリの登録」で登録したアプリにて 認証 の設定を行います。 ここで設定する項目は以下です ・リダイレクト URI
・ログアウト URL ・承認エンドポイントによって発行してほしいトークン->ID トークン
Azure AD でアプリの登録 (認証) 「アプリの登録」で登録したアプリにて認証の設定を行います。 ここで設定する項目は以下です。 ・リダイレクト URI ・ログアウト URL
・承認エンドポイントによって発行してほしいトークン->ID トークン これらについて説明します
・リダイレクト URI ・ログアウト URL ・承認エンドポイントによって発行してほしいトークン->ID トークン これらは OpenID Connect という
認証プロトコルで使われる要素です
・リダイレクト URI ・ログアウト URL ・承認エンドポイントによって発行してほしいトークン->ID トークン これらは OpenID Connect という
認証プロトコルで使われる要素です Static Web Apps で特定の Azure AD テナントでの認証を許可 するには「カスタム認証」という設定が必要なのですが、 このカスタム認証で OpenID Connect という認証プロトコルに 関する設定箇所があります。
OpenID Connect の認証 https://learn.microsoft.com/ja-jp/azure/active-directory/architecture/auth-oidc Azure Active Directory を使用した OpenID Connect
認証
・リダイレクト URI https://learn.microsoft.com/ja-jp/azure/active-directory/develop/reply-url リダイレクト URI、すなわち応答 URL は、アプリが正しく承認され、 認証コードまたはアクセス トークンが付与されると、承認サーバーが ユーザーを送り出す場所です。
承認サーバーは、リダイレクト URI に このコードまたはトークンを送信するため、アプリ登録プロセスの一環 として正しい場所を登録することが重要です。
・リダイレクト URI https://learn.microsoft.com/ja-jp/azure/active-directory/develop/reply-url リダイレクト URI、すなわち応答 URL は、アプリが正しく承認され、 認証コードまたはアクセス トークンが付与されると、承認サーバーが ユーザーを送り出す場所です。
承認サーバーは、リダイレクト URI に このコードまたはトークンを送信するため、アプリ登録プロセスの一環 として正しい場所を登録することが重要です。
・リダイレクト URI https://learn.microsoft.com/ja-jp/azure/active-directory/develop/reply-url リダイレクト URI、すなわち応答 URL は、アプリが正しく承認され、 認証コードまたはアクセス トークンが付与されると、承認サーバーが ユーザーを送り出す場所です。
承認サーバーは、リダイレクト URI に このコードまたはトークンを送信するため、アプリ登録プロセスの一環 として正しい場所を登録することが重要です。
・ログアウト URL https://learn.microsoft.com/ja-jp/azure/active-directory/develop/scenario-web-app-sign-user- sign-in?tabs=aspnetcore#sign-out サインアウトするには、Web アプリによってユーザーが Microsoft ID プラットフォーム logout
エンドポイントにリダイレクトされる必要も あります。 Web アプリによってユーザーが logout エンドポイントにリダイレクト されると、このエンドポイントでは、ユーザーのセッションがブラウザ ーから消去されます。
・リダイレクト URI ・ログアウト URL Static Web Apps では上記がデフォルトで用意されています ※ Azure
AD の場合 リダイレクト URI https://***********.azurestaticapps.net/.auth/login/aad/callback ログアウト URL https://***********.azurestaticapps.net/.auth/logout/aad/callback
・承認エンドポイントによって発行してほしいトークン->ID トークン https://learn.microsoft.com/ja-jp/azure/active-directory/develop/id-tokens ID トークンは承認サーバーによって発行され、ユーザーについての情報 を伝えるクレームを含んでいます。 これらは、アクセス トークンの代 わりに、またはアクセス トークンと共に送信できます。
ID トークンに 含まれる情報により、ユーザーが主張するとおりの人物であることをク ライアントで確認できます。
・承認エンドポイントによって発行してほしいトークン->ID トークン https://learn.microsoft.com/ja-jp/azure/active-directory/develop/id-tokens ID トークンは承認サーバーによって発行され、ユーザーについての情報 を伝えるクレームを含んでいます。 これらは、アクセス トークンの代 わりに、またはアクセス トークンと共に送信できます。
ID トークンに 含まれる情報により、ユーザーが主張するとおりの人物であることをク ライアントで確認できます。 ID トークンが必要だから 発行してね、 という設定が必要
Azure AD でアプリの登録 (認証) というわけで以下の設定が必要です ・リダイレクト URI ・ログアウト URL ・承認エンドポイントによって発行してほしいトークン->ID
トークン 動画で様子をお見せします!
Azure AD でアプリの登録 (認証) 動画については YouTube をご覧ください 上記の QR コードで登壇動画の該当の時間にジャンプできます
Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)
が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。 ① ②
Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)
が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。
Azure AD でアプリの登録 (シークレッ ト) アプリ (本件では Static Web Apps)
が Azure AD と接続するための資格情報とし てクライアントシークレットを発行します。
Azure AD でアプリの登録 (その他の情 報) Static Web Apps に設定が必要な以下の値を取得します。 ・アプリケーション
(クライアント) ID ・ディレクトリ (テナント) ID ①
Azure AD 側の設定は済んだため Static Web Apps の設定に戻ります!
Static Web Apps で変数の保存 Static Web Apps でクライアントID と シークレットの値を変数として保存をしま
す 値は暗号化して保存されます https://learn.microsoft.com/ja-jp/azure/static-web-apps/application-settings
Static Web Apps で変数の保存 設定箇所
Static Web Apps で変数の保存 クライアント ID 変数設定
Static Web Apps で変数の保存 シークレット値 変数設定
Static Web Apps で変数の保存 Save で保存
Static Web Apps のアプリ構成ファイルを作成 Static Web Apps のアプリ構成ファイル staticwebapp.config.json https://learn.microsoft.com/ja-jp/azure/static-web-apps/configuration
Static Web Apps のアプリ構成ファイルを作成 Static Web Apps のアプリ構成ファイル staticwebapp.config.json https://learn.microsoft.com/ja-jp/azure/static-web-apps/configuration
今回使う構成ファイルを元に 必要な箇所だけご説明します
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定 認証の設定 openIdIssuer : OpenID Connect 発行者 URI
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } 認証系の設定 ID プロバイダーとして AzureAD を指定 認証の設定 clientIdSettingName : 認証情報 clientSecretSettingName : 認証情報
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } ルーティングの設定 /* に対して適用する authenticated (認証済み) の場合のみ allowedRoles (ルートへのアク セスを許可する
Static Web Apps のアプリ構成ファイルを作成 { "auth": { "identityProviders": { "azureActiveDirectory":
{ "registration": { "openIdIssuer": "https://login.microsoftonline.com/[テナント ID]/v2.0", "clientIdSettingName": "AZURE_CLIENT_ID", "clientSecretSettingName": "AZURE_CLIENT_SECRET" } } } }, "routes": [ { "route": "/*", "allowedRoles": [ "authenticated" ] } ], "responseOverrides": { "401": { "statusCode": 302, "redirect": "/.auth/login/aad" } } } サーバーからエラー コードが返される場合のカスタム応答を設定 401:Unauthorized コードの時に 302 : Temporary Redirect コードにオーバーライドして "/.auth/login/aad" にリダイレクトする
Static Web Apps のアプリ構成ファイルを作成 作成した構成ファイルを GitHub に push したら GitHub
Actions により Static Web Apps にデプロイされることにより 意図した設定 (特定の Azure AD のみ認証可能な状態) が反映されます 動画で様子をお見せします!(これが最後)
動画については YouTube をご覧ください 上記の QR コードで登壇動画の該当の時間にジャンプできます
説明した環境の構成図 この構成の作り方についてご説明させていただきました
まとめ
まとめ • AzureAD でアプリケーションへの認証と認可を提供できます
まとめ • AzureAD でアプリケーションへの認証と認可を提供できます • Static Web Apps は既存の認証を利用する機能がデフォルトで が実装されています
まとめ • AzureAD でアプリケーションへの認証と認可を提供できます • Static Web Apps は既存の認証を利用する機能がデフォルトで が実装されています
• 特定の AzureAD テナントで認証を許可する設定が可能です
まとめ • AzureAD でアプリケーションへの認証と認可を提供できます • Static Web Apps は既存の認証を利用する機能がデフォルトで が実装されています
• 特定の AzureAD テナントで認証を許可する設定が可能です • これらによって簡単に社内向け Web サイトを作成して認証を組 み込むことが可能です
ご清聴ありがとうございました