More Related Content
PPTX
PPTX
PPTX
Azure Api Management 俺的マニュアル 2020年3月版 PDF
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ... PPTX
PDF
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 - What's hot
PDF
20210526 AWS Expert Online マルチアカウント管理の基本 PPTX
PDF
Infrastructure as Code (IaC) 談義 2022 PDF
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用 PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp PPTX
SPAセキュリティ入門~PHP Conference Japan 2021 PDF
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN PDF
PDF
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート PDF
PPTX
KeycloakでFAPIに対応した高セキュリティなAPIを公開する PDF
AWS Well-Architected Security とベストプラクティス PDF
20190522 AWS Black Belt Online Seminar AWS Step Functions PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤 PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方 PDF
20200708サーバーレスでのAPI管理の考え方 PDF
マルチテナント化で知っておきたいデータベースのこと PPTX
20220409 AWS BLEA 開発にあたって検討したこと PDF
マイクロサービスに至る歴史とこれから - XP祭り2021 PDF
Similar to NGINXをBFF (Backend for Frontend)として利用した話
PPTX
PDF
mod_auth_ticket - Bringing Single-Sign-On to lighttpd PDF
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api PPTX
NGINX + Ansible Automation Webinar (日本語版) PDF
PPTX
NGINX New Features (Japanese Webinar) PPTX
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 PDF
PDF
PDF
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805 PPTX
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー PDF
The Latest Specs of OpenID Connect at #idcon 9 PDF
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法 PPTX
Introducing NGINX App Protect (Japanese Webinar) PPTX
NGINX Plus Hands On Training PDF
PDF
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした PPTX
PPTX
More from Hitachi, Ltd. OSS Solution Center.
PDF
Secure Authorization for Agentic AI in Multi-Domain Environments PDF
Securing AI Agent Infrastructure: AuthN/AuthZ Patterns for MCP and A2A PPTX
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~ PPTX
Hitachi’s Keycloak Journey - Evolution of Business and Community PPTX
Mastering Authorization: Integrating Authentication and Authorization Data in... PDF
KubeCon + CloudNativeCon North America セキュリティ周りrecap PDF
Let’s Join Cloud Native Computing Foundation TAG Security APAC! PDF
Exploring Best Practice for Implementing Authn and Authz in a Cloud-Native En... PPTX
Exploring Best Practices for Implementing Authn and Authz in a Cloud-Native E... PPTX
CloudNativeSecurityCon North America 2024 Overview PPTX
How Does a Workload Authenticate an API Request?: Implementing Transaction To... PDF
Authentication and Authorization of The Latest Keycloak PDF
Guide of authentication and authorization for cloud native applications with ... PDF
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み PDF
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit... PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 PPTX
Challenge to Implementing "Scalable" Authorization with Keycloak PDF
KubeConRecap_nakamura.pdf PPTX
Security Considerations for API Gateway Aggregation Recently uploaded
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S... PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf PDF
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026 PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研) PDF
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf NGINXをBFF (Backend for Frontend)として利用した話
- 1.
© Hitachi, Ltd.2022. All rights reserved.
NGINXをBFF (Backend for Frontend)として利用した話
NGINXユーザー会 2022春
株式会社 日立製作所
田畑 義之
- 2.
1
© Hitachi, Ltd.2022. All rights reserved.
自己紹介
田畑 義之 (たばた よしゆき)
株式会社 日立製作所
ソフトウェアエンジニア
GitHub: @y-tabata, Qiita: @yo-tabata
• 認証認可スペシャリストとしてのAPI/SSO関連案件の支援
金融、公共、社会、産業分野における
API管理基盤や認証認可システムのコンサル/サポート
→ NGINXのコンサル実績も多数。
• 認証認可・API管理関連のOSSへのコントリビュート
Keycloak (IAMのOSS)
3scale (API管理のOSS)
MidPoint (IGAのOSS)
• OSSの活用事例や検証結果の情報発信
Keycloak書籍の執筆
Qiita / ThinkITでのWeb記事投稿
Apidays / API Specifications Conference / CloudNative Daysなど、国内外のイベントでの情報発信
- 3.
© Hitachi, Ltd.2022. All rights reserved.
Contents
2
1. APIゲートウェイとして一定の地位を確立したNGINX
2. 高セキュリティAPIシステムでBFFが必要な理由
3. NGINXをBFFとして利用する
- 4.
© Hitachi, Ltd.2022. All rights reserved.
Contents
3
1. APIゲートウェイとして一定の地位を確立したNGINX
2. 高セキュリティAPIシステムでBFFが必要な理由
3. NGINXをBFFとして利用する
- 5.
4
© Hitachi, Ltd.2022. All rights reserved.
APIシステム
オーソドックスなAPIシステム
3. APIコール w/ アクセストークン 4. 認可済みのAPIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
• APIを公開するリソースサーバーはまず必要。
• 加えて、APIの用途に応じた何かしらの認証認可の仕組みが必須。
API認可の標準仕様であるOAuth 2.0の認可コードフローに準拠するのが一般的。
そのために認証認可を司る認可サーバーを配置。
• アクセス制御のために、手前にAPIゲートウェイを置く構成もよく見受けられる。
エンドユーザー
0. 使用
APIゲートウェイ リソースサーバー
クライアント
- 6.
5
© Hitachi, Ltd.2022. All rights reserved.
参考: Keycloakとは
• Keycloakは、Red Hat社を中心に開発されているOSSのIAM製品。
• シングルサインオンや、OAuth 2.0の認可サーバーの機能を提供。
OAuth 2.0/OpenID ConnectやSAMLに対応
LDAPサーバーやActive Directoryと連携可能
GitHubなどのユーザーアカウントを利用した
ソーシャルログインにも対応
Keycloak
主要標準に対応したID連携
(OAuth 2.0の認可サーバーを含む)
ソーシャルログイン
(Identity Brokering)
ID管理と認証
LDAP
Active
Directory
RDB
OpenID Connect SAML
GitHub
Twitter Facebook
主な特徴
- 7.
6
© Hitachi, Ltd.2022. All rights reserved.
NGINX APIゲートウェイ
3. APIコール w/ アクセストークン 4. 認可済みのAPIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
• NGINXはAPIゲートウェイの実装の最有力候補の一つ。
圧倒的なパフォーマンス: APIゲートウェイは全APIコールを捌く必要があるため、とにかくパフォーマンスが重要。
高いカスタマイズ性: 豊富なモジュールのほか、JavaScriptやLua言語で自由にカスタマイズができる。
APIを呼ぶ側と呼ばれる側双方の業務要件をここで吸収するため、カスタマイズ性も非常に重要。
→ 実際に、3scaleやKongといった著名なAPI管理製品は、APIゲートウェイのベースにNGINXを用いており、
それをLuaで拡張している。
エンドユーザー
0. 使用
APIゲートウェイ
(NGINXなど)
リソースサーバー
クライアント
NGINX + KeycloakのAPIシステム構成例は
以下の記事でも紹介しているので
是非ご参照ください。
「Keycloakで実現するAPIセキュリティ」
https://thinkit.co.jp/series/9721
- 8.
© Hitachi, Ltd.2022. All rights reserved.
Contents
7
1. APIゲートウェイとして一定の地位を確立したNGINX
2. 高セキュリティAPIシステムでBFFが必要な理由
3. NGINXをBFFとして利用する
- 9.
8
© Hitachi, Ltd.2022. All rights reserved.
オーソドックスなAPIシステムがハマらないケース ~某案件で直面した課題~
3. APIコール w/ アクセストークン 4. 認可済みのAPIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
エンドユーザー
0. 使用
APIゲートウェイ
(NGINXなど)
リソースサーバー
SPA
• 大体のケースにおいて、先に紹介したオーソドックスなAPIシステムで事足りるが、SPAのようなブラウザベースの
アプリケーションをクライアントとして想定し、かつ高いセキュリティ保護が必要なAPIを公開する場合には注意要。
SPAでは、クライアントの認証情報やトークンなどの機密情報を安全に保管する術がない。
→ 漏えい時の影響をできる限り軽減するように設計するか、アーキを変えるか、の2択。高いセキュリティ保護が
必要なAPIを公開する場合、漏えい時のリスクを抱えきれないので、後者を採るケースも多い。
→ 実際、ブラウザベースのアプリケーションのセキュリティベストプラクティスは、グローバルでもまだ現在絶賛策定中。
https://datatracker.ietf.org/doc/html/draft-ietf-oauth-browser-based-apps-09
金融取引や重要度の高い
情報を扱うAPIを公開
- 10.
9
© Hitachi, Ltd.2022. All rights reserved.
BFFを採用したアーキテクチャへの変更 ~我々の解決策~
3. APIコール
w/ Cookie
4. 認可済みの
APIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
エンドユーザー
0. 使用
APIゲートウェイ
(NGINXなど)
リソースサーバー
SPA
• このようなケースでBFF (Backend for Frontend)を採用する。
APIシステムから見ると、クライアントはBFF。クライアント含めたサービス全体で
Webアプリケーション相当の高いセキュリティを担保できるようになる。
SPAとBFFの間は、一般的なクッキーとセッションを使ったいわゆるクライアントサーバーシステム。
BFF 3’. APIコール
w/ アクセストークン
- 11.
© Hitachi, Ltd.2022. All rights reserved.
Contents
10
1. APIゲートウェイとして一定の地位を確立したNGINX
2. 高セキュリティAPIシステムでBFFが必要な理由
3. NGINXをBFFとして利用する
- 12.
11
© Hitachi, Ltd.2022. All rights reserved.
NGINXをBFFとして利用する
3. APIコール
w/ Cookie
4. 認可済みの
APIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
エンドユーザー
0. 使用
APIゲートウェイ
(NGINXなど)
リソースサーバー
SPA
BFF
(NGINXなど)
3’. APIコール
w/ アクセストークン
• BFFとしてもNGINXは優秀。
BFFもAPIゲートウェイと同様、全APIコールを捌く必要があるため、パフォーマンスが重要。
APIゲートウェイと比較して、よりクライアント側に寄り添った実装が必要になるため、
ここでも高いカスタマイズ性が重要。
- 13.
12
© Hitachi, Ltd.2022. All rights reserved.
BFFとしてのNGINXの導入
• BFFが持つべき基本的な機能
OAuth 2.0のクライアント(OpenID Connect 1.0のRP)機能
このアーキでは、BFFがOAuth 2.0のクライアントとして振舞うので、トークンを要求するなどの機能が
必要。
セッション管理機能
トークンなどの機密情報をBFFで管理するために、セッション管理機能が必要。
3. APIコール
w/ Cookie
4. 認可済みの
APIコール
1. 認証・同意取得
2. トークンの発行
認可サーバー
(Keycloakなど)
エンドユーザー
0. 使用
APIゲートウェイ
(NGINXなど)
リソースサーバー
SPA
BFF
(NGINXなど)
3’. APIコール
w/ アクセストークン
- 14.
13
© Hitachi, Ltd.2022. All rights reserved.
BFFとしてのNGINXの導入① ~ OAuth 2.0のクライアント機能 ~
• OAuth 2.0のクライアント(OpenID Connect 1.0のRP)機能を一から実装するのは大変なので、
既存のライブラリを参考にするのがおすすめ。
Lua拡張: lua-resty-openidc
https://github.com/zmartzone/lua-resty-openidc
JavaScript拡張: nginx-openid-connect
https://github.com/nginxinc/nginx-openid-connect
→ 商用版のNGINX Plusであれば、後者のJavaScript拡張を用いる方が圧倒的に楽。
OSS版のNGINXでも、後者を参考に実装することはできるが、後述するセッション管理が
うまくいかないため、前者のLua拡張を選択。
→ 両者とも、OpenID Connect 1.0のRP用のライブラリであるため、アクセストークンを付与してAPIを
コールする部分は自前で拡張する必要がある。
- 15.
14
© Hitachi, Ltd.2022. All rights reserved.
BFFとしてのNGINXの導入② ~ セッション管理機能 ~
• BFFが止まると、業務が停止する(APIコールができなくなる)ので、冗長化は必須。
• 加えて、片系停止時もセッションを維持するためには、セッションを共有する仕組みが必要。
この事例ではRedisを採用。lua-resty-openidcを採用した場合、Redisと相性が良い。
一方、JavaScript拡張を選択すると、JavaScriptは元々フロントエンド用の言語であるため、
このDB接続の部分に苦労する。
ちなみに、NGINX Plusであれば、ngx_http_keyval_moduleというモジュールを使うことで、
Redisのような他コンポーネントの導入なしにセッション共有を実現できる。
BFF
(NGINX)
BFF
(NGINX)
LB
Redisなど
- 16.
15
© Hitachi, Ltd.2022. All rights reserved.
BFFを実現するにあたっての注意点① ~ CSRF対策 ~
• クッキーとセッションを用いる以上、一般的なCSRF (Cross-Site Request Forgery)対策は必須。
• CSRF対策をしないと、BFFで正規のAPIコールかどうかを見分けることができず、APIの不正利用が可能に。
対策例: SPAからのAPIコールを見分けるために、毎回ランダムな文字列をページに設定し、
APIコール時にBFF側で照合する、など。
APIコール
w/ Cookie
APIゲートウェイ
(NGINXなど)
SPA
BFF
(NGINXなど)
APIコール
w/ アクセストークン
エンドユーザー
攻撃者
攻撃者の口座に
送金するAPIのリンク
ブラウザ
APIコール
w/ Cookie
リンクをクリックすると
ブラウザ起動
- 17.
16
© Hitachi, Ltd.2022. All rights reserved.
BFFを実現するにあたっての注意点② ~ セッション共有 ~
• Lua拡張であるlua-resty-openidcを使って、複数インスタンス間でセッションを共有するときの注意点。
• lua-resty-openidcはセッション管理にlua-resty-sessionというライブラリを使用。
$session_secretという変数をセッションの識別子として利用。デフォルトだと$session_secretに
ランダム値が設定される。
クラスタ内全インスタンスの$session_secretに同じ値を設定しないとセッションが共有されないので
注意が必要。
BFF
(NGINX)
BFF
(NGINX)
LB
Redisなど
- 18.
17
© Hitachi, Ltd.2022. All rights reserved.
まとめ
- 以下を中心に、NGINXをBFFとして利用する事例をご紹介しました。
NGINXがAPIゲートウェイの最有力候補の一つであること。
クライアントがSPAの場合にBFFアーキテクチャがハマること。
NGINXを利用してBFFアーキテクチャを実現するときの概要と注意点。
- 19.
18
© Hitachi, Ltd.2022. All rights reserved.
日立のサービス紹介: 強固なセキュリティを確保したAPI管理基盤の構築
todo:
説明文を入れる
お客さまシステムの要件に最適な「API管理基盤」を構築します。
スモールスタート向け構成からマイクロサービス向け構成まで幅広く対応し
それらに合ったAPIセキュリティを実現します。
ソ
リュー
ション
APIゲートウェイ
(NGINX /
NGINX Plus)
認可サーバー
(Keycloak)
認可
API管理基盤
流量制御
アクセス制御
DBサーバー
ユーザー管理
ID管理
Active Directory,
LDAPサーバー、
既存ユーザー管理
DBなどとの連携
外部ユーザー
Google, GitHub
とのSNS連携や、
Oktaなどの外部ID
管理製品との連携
バックエンド
APIサーバー
APIサーバー
APIサーバー
フロントエンド
Webアプリ
モバイルアプリ
外部サービス
特徴1
スモールスタート向けからマイクロ
サービス向けまで、お客さまのシス
テムに最適なAPI管理の実現が可能
特徴2
OSSを活用し、
最新のAPIセキュリティの実現が可能
特徴3
APIセキュリティやOSSの専門家とし
て
の高度な知見を活かし、導入から運
用までトータルにカバー
- 20.
19
© Hitachi, Ltd.2022. All rights reserved.
日立の強みを生かしたサービスの提供
F5社
技術・ノウハウ
OSSサービス
フィードバック
連携
日立はさまざまな分野におけるOSSのお客さまビジネスでの活用を
コミュニティ貢献で培った高い技術力とF5社との連携で、サービスを提供します。
お客さまビジネスでの活用
OSSを活用したシステム開発・構築
API管理ソリューション提供
OSS単独ではなく、システム要件に合わせたソフト
ウェアの組み合わせや処理フローの支援などにより、
日立のSI事業を強力に支援します
コミュニティ貢献
有用なOSSの目利き
OSSの発展への寄与、技術蓄積
お客さま案件のニーズをコミュニティにフィードバック、
国内外での講演活動や寄稿活動による発信、
技術者交流を積極的に行い、さまざまな用途に
柔軟に対応できるOSSに成長させます
OSSサービス提供
OSSを安心して使うための
サポートサービスの提供
コミュニティ活動で製品内部を知る、高度な技術者
が、知見をもとにした製品内部(ソースレベル)での
調査により、迅速な障害解決に導きます
- 21.
20
© Hitachi, Ltd.2022. All rights reserved.
日立はOSSコミュニティリーダーを擁する専門チームを保有し、金融(銀行、保険など)や公共、社会、産業など
さまざまな分野の案件を多数支援しています。
社外でも認証認可の専門家として認知されており、お客さまのご指名で案件対応した実績もあります。
多くの導入実績
CIO補佐官向けに監査説明ができるセキュリ
ティ専門家として要望を受け対応。
認証認可のフロー設計やAPI管理基盤構築の
支援を実施。
お客さまへOAuthやAPI管理の説明ができる
セキュリティ専門家としての要望を受け対応。
APIゲートウェイや認証認可サーバーの構築支
援を実施。
セミナーの日立講演をきっかけに日立の
セキュリティ技術力の高さを評価いただき、
日立をご指名頂いた。
日立の社外著作物で日立のセキュリティ技
術の高さを認知。
お客さまのご指名で案件を対応。
専門家としての技術力を評価さ
れ
対応した案件の一例
[金融] 某金融機関様 デジタル決済プラットフォーム
[公共] 某省庁様 国民向け申請システム [金融] 某金融機関様 API管理基盤構築
[金融] 某金融機関様 認証認可システムのトラブル対応
お客さまのご指名で対応した
対応した案件の一例
- 22.
21
© Hitachi, Ltd.2022. All rights reserved.
Trademarks
• OpenID is a trademark or registered trademark of OpenID Foundation in the United States and other
countries.
• GitHub is a trademark or registered trademark of GitHub, Inc. in the United States and other
countries.
• Red Hat is a registered trademark of Red Hat, Inc. in the United States and other countries.
• NGINX is a registered trademark of F5 Networks, Inc. in the United States and other countries.
• Other brand names and product names used in this material are trademarks, registered trademarks,
or trade names of their respective holders.