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
420
第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
第148回 雲勉 Web アプリケーションセキュリティ
iret
0
26
第147回 雲勉 Amazon CloudWatchをウォッチ!
iret
0
46
第146回 雲勉 BLEAを眺めてCDKの書き方について学ぶ
iret
1
50
第145回 雲勉 Amazon ECSでサービス間通信する方法を調べてみよう
iret
0
47
第144回 雲勉 Amazon Aurora Serverless v2の基礎とアーキの裏側を覗いてみる
iret
0
94
第143回 雲勉 [New Relic]インフラストラクチャ監視と気をつけたいポイント
iret
0
44
第142回 雲勉 AWS Backupの復元テストで自動化できること・できないこと
iret
0
100
第141回 雲勉 Amazon Inspectorによる脆弱性管理~ECR コンテナイメージ編~
iret
0
280
第2回 雲勉LT大会 パブリッククラウドのサーバレスサービスの違いを調べてみた
iret
0
26
Other Decks in Technology
See All in Technology
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
730
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
Qiita埋め込み用スライド
naoki_0531
0
860
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
110
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
110
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
420
OpenShift Virtualizationのネットワーク構成を真剣に考えてみた/OpenShift Virtualization's Network Configuration
tnk4on
0
130
2024年にチャレンジしたことを振り返るぞ
mitchan
0
130
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
170
ハイテク休憩
sat
PRO
2
130
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
BBQ
matthewcrist
85
9.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Git: the NoSQL Database
bkeepers
PRO
427
64k
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 サイトを作成して認証を組 み込むことが可能です
ご清聴ありがとうございました