Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OIDC on AWS - 認可サービスを構成するためのプラクティス - OAuth & O...

OIDC on AWS - 認可サービスを構成するためのプラクティス - OAuth & OpenID Connect 勉強会 | 2024.10.30 | Authlete, 大手町 FINOLAB

2024.10.30に大手町 FINOLABで開催されたAuthlete様のOAuth & OpenID Connect 勉強会のセッションで利用した資料です。認可サービス構築の際にその複雑な処理をオフロードすることができるAuthleteのようなサービスとの組み合わせを考慮した場合に、AWS環境でどのように認可サービスを構成できるか、という観点に焦点を当てている内容です。

https://authlete.connpass.com/event/333513/

More Decks by 勝原達也(Tatsuya Katsuhara)

Other Decks in Technology

Transcript

  1. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. OIDC on AWS - 認可サービスを構成するためのプラクティス - OAuth & OpenID Connect 勉強会 | 2024.10.30 | Authlete, ⼤⼿町 FINOLAB 勝原 達也 (Tatsuya Katsuhara) アマゾン ウェブ サービス ジャパン合同会社 セキュリティ ソリューション アーキテクト
  2. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 勝原 達也(Tatsuya Katsuhara) セキュリティ ソリューション アーキテクト お客様がクラウドを活⽤する際に⽣じる さまざまなセキュリティ課題解決をご⽀援 略歴 • デジタル・アイデンティティ、認証認可サービス開発 • セキュリティ診断︓Web、IoT/OT、コネクテッドカー • デジタル庁 有識者会議 委員︓ 本⼈確認ガイドライン改訂
  3. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 本⽇お話すること 1. アプリケーション開発の共通の悩み「アイデンティティ」 2. AWS 上での認可サービス実現のアーキテクチャパターンのご紹介 3. まとめ 4. Appedix • トークンベースアクセスコントロール
  4. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. モダンなアプリケーション開発共通の悩みである アイデンティティ関連の課題 ユーザーが普段利⽤する アイデンティティを活⽤し サービスの利⽤を 素早く増やしたい ビジネスの差別化要因 ではないにも関わらず 重厚で専⾨性を求められる アイデンティティ関連 の処理をオフロードしたい 開発するアプリケーションに 標準に基づいた認証・認可の 仕組みと先進的な セキュリティを実装したい
  5. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 課題解決の鍵になるのは認可サービス • 主要なプロトコルである OpenID Connect (OIDC) の利⽤が実現できるビジネスユースケースに 結びついており、ビジネスとセキュリティの双⽅を考える技術テーマである ユーザー認証 多要素認証 同意管理 スコープ管理 トークン管理 ユーザー新規登録 ユーザー属性管理 クライアント管理 アイデンティティ管理 認可管理 フロントエンド 画⾯カスタマイズ セッション管理 Authorization OAuth2, OIDC エンドポイント Token UserInfo Configration Introspection ・・・ アプリケー ション アプリケー ション サービス (アプリケーション、 クライアント、 Relying Party/RP) トークンを取得 サービスを利⽤ ユーザー認証と 認可のための対話 ユーザーの権限でリソースアクセス 認可サービス
  6. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 認可サービスの実現パターン
  7. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Amazon Cognito - ⼿軽かつフルマネージドな アプリケーション向けアイデンティティ・サービス 多要素 認証 危殆化PW データベース セキュア/可⽤性 アダプティブ 認証 99.9% SLA Build-in UI コンポーネント Web/SPA Amazon Cognito 巨⼤な利⽤者を持つ ID プロバイダ (IdP) との接続を簡単に構成 オープン標準への対応を 簡単に構成 SAML OAuth2 OIDC 柔軟かつスケーラブルな API と SDK のサポート JavaScript • Angular • React • Vue • Ionic • Next.js iOS Android iOS Android Flutter AWS SDKs Sign in with Google Login with Facebook Login with Amazon Sign in with Apple 拡張可能な認証・認可 Lambda Application Load Balancer Amazon API Gateway
  8. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ユーザーの認証・認可を⾏いトークンベースの アクセス制御機能を実現する Cognito User Pool User Pool 機能体系 • OpenID Connect 互換 I/F • 新規登録・ログインのための Web ページ • 外部 IdP とのフェデレーション • Single Sign-On (Web SSO) • Web ブラウザ(or WebView)必須 • 様々な API を通じて、 ユーザー管理を⾏うユーザーリポジトリ • カスタム UI (フルカスタマイズ) • カスタム認証フロー(独⾃認証の実現) • SPA、Native、Web App 対応 User Pool API / Native API (Identity Provider API) OIDC API + Hosted UI (Auth API) ユーザーリポジトリそのものは共有
  9. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ユーザープールが実現する 2 つの ID アーキテクチャ Webアプリ・ スマホアプリ/SPA Webアプリ・ スマホアプリ/SPA Webアプリ・ スマホアプリ/SPA Webアプリ・ スマホアプリ/SPA 独⾃の新規登録・認証機能作り込み User Pool API(Native API) OIDC による認証・認可サービス OIDC API + Hosted UI Webアプリ・ スマホアプリ/SPA 独⾃認証 UI ②認証情報を利⽤し 認証処理を実施 ③認証成功時に Cognitoトークン を返却 ④Cognitoトークン を利⽤し業務API コール ①認証情報 (例:ID/PW)を⼊⼒ ユーザー (ブラウザ/ネイティブ) Webアプリ・ スマホアプリ/SPA ①「ログイン」 ボタン押下 ユーザー (ブラウザ/WebView) Sign-in with ◦◦ ⾃社 ID や外部IdP のログインボタン OIDC API(OAuth2, OIDC 互換 I/F) 外部IdP ②ブラウザリダイレクト で認証・認可を依頼 User Pool API(Native API) ④認証成功時に Cognitoトークンを返却 Hosted UI (省略可) ③ ブラウザでアクセスして Hosted UI で認証実施、または 更に外部IdPにリダイレクトして認証 Facebook Google Amazon Apple SAML OpenID or 画⾯の提供なし (バックエンドとして振る舞う) アプリ API サーバ ⑤Cognitoトークン を利⽤し業務API コール アプリ API サーバ
  10. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ⾃社アプリへモダンなユーザー認証とトークンベースの アクセスコントロールを組み込んでいく Web アプリ/SPA/ モバイルアプリ カスタム UI ②フロントが受け取った 認証情報(例:ID/PW)を使 い認証処理を依頼 ③認証成功時に Tokenを返却 ④Tokenを利⽤し 業務APIコール ①認証情報 (例:ID/PW)を⼊⼒ User Pool API(Native API) 画⾯の提供なし (バックエンドとして振る舞う) User Pool • トークンベースのアクセスコントロールをアプ リケーション(モバイルアプリ・SPA・Webア プリ)に追加 • 画⾯カスタマイズの⾃由度は⾼い • 仕様で規定されている OIDC 認可サーバとして の機能は提供しない • トークンのフォーマットは OIDC • 独⾃の認可サービスを構成するときに活⽤でき る可能性(後述) Amazon Cognito (バックエンド利⽤)
  11. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ベーシックな OIDC プロトコルに対応した マネージド認可サービスを素早く&簡単に実現 各種クライア ント 各種クライア ント クライアント アプリ ①「ログイン」ボタン押下 OIDC API Hosted UI + (不可分) ⾃社IDで ログイン ③表⽰されたCognitoのHosted UI を⽤いて認証実施(例:ID/PW) ②ブラウザリダイレクト (認可要求) ④ブラウザリダイレクト (認可応答/Token返却) ※直接通信も組み合わせ User Pool ⑤Tokenを利⽤し 業務APIコール カスタマイズ 範囲が限定的 ユーザー(ブラウザ/WebView) • OIDC のベーシックな仕様に対応し 「Sign-in with 独⾃ID」を実現 • OIDC API と Hosted UI 機能の活⽤ • マネージド・サービスで運⽤が楽 • 画⾯カスタマイズの範囲は限定されるため、 ビジネス的に許容できるか早めに判断しよう • ⾼度な OIDC の拡張仕様やユースケースが ビジネス上で必要な場合は別の⼿段へ • 例: FAPI、CIBA Amazon Cognito (認可サービス)
  12. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ⾼いカスタマイズ性と拡張性を導⼊するため 独⾃に認可サービスを実現していくことも 各種クライア ント 各種クライア ント クライアント アプリ ①「ログイン」ボタン押下 ③認証実施(例:ID/PW) ②ブラウザリダイレクト (認可要求) ④ブラウザリダイレクト (認可応答/Token返却) ※直接通信も組み合わせ ⑤Tokenを利⽤し 業務APIコール OIDC API カスタマイズし たログイン画⾯ Keycloak on AWS や CIAM 領域の IDaaS など ユーザー(ブラウザ/WebView) • 制限はあれどカスタマイズ範囲は充実傾向 • マネージド・サービスのため運⽤が楽 ⾃社IDで ログイン 独⾃の認可サービスや CIAM の IDaaS IDaaS OSS on AWS 独⾃開発 • インフラやセキュリティ運⽤が発⽣ • カスタマイズや運⽤に必要な OSS への深い理解 • 使い慣れた⼿法で開発・構築・カスタマイズ • ライブラリも使いつつ複雑な認証認可処理を⾃ 分たちで実装・保守
  13. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ⾼いカスタマイズ性と拡張性を導⼊するため 独⾃に認可サービスを実現していくことも 各種クライア ント 各種クライア ント クライアント アプリ ①「ログイン」ボタン押下 ③認証実施(例:ID/PW) ②ブラウザリダイレクト (認可要求) ④ブラウザリダイレクト (認可応答/Token返却) ※直接通信も組み合わせ ⑤Tokenを利⽤し 業務APIコール OIDC API カスタマイズし たログイン画⾯ Keycloak on AWS や CIAM 領域の IDaaS など ユーザー(ブラウザ/WebView) • 制限はあれどカスタマイズ範囲は充実傾向 • マネージド・サービスのため運⽤が楽 ⾃社IDで ログイン 独⾃の認可サービスや CIAM の IDaaS IDaaS OSS on AWS 独⾃開発 • インフラやセキュリティ運⽤が発⽣ • カスタマイズや運⽤に必要な OSS への深い理解 • 使い慣れた⼿法で開発・構築・カスタマイズ • ライブラリも使いつつ複雑な認証認可処理を⾃ 分たちで実装・保守 • 複雑な認可認証処理はバックエンドにオフロー ドして楽に実装・保守
  14. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS での認可サービス構成は様々 仮想マシン、コンテナ、サーバレス、 マネージド・サービス・・・ Elastic Load Balancing Compute Elastic Load Balancing Compute Amazon API Gateway Amazon API Gateway User traffic
  15. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. OSS on AWS - Keycloak • すぐにデプロイ可能なテンプレート提供 • AWS のマネージド・サービスを活⽤し構築・運 ⽤の⼀部を AWS にオフロード • 機能が豊富でカスタマイズ⾃由度は⾼い⼀⽅、 専⾨的な知⾒を有する体制は必要 • Keycloak を理解し、カスタマイズ・運⽤する知⾒ • Java、クラスタリング、障害対応、インメモリデータグリッド https://github.com/aws-samples/keycloak-on-aws
  16. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. モノリシックな独⾃認可サービスを AWS 上に構築 Amazon Elastic Container Service (Amazon ECS) データベースレイヤ 認可サーバアプリ Application Load Balancer Amazon CloudFront (CDN) 新規登録・認証 認可エンドポイント トークンエンドポイント Amazon DynamoDB (属性管理) Amazon Aurora (RDBMS) • 習熟した⼿法で開発・構築・カスタマイズ • インフラやアプリケーションに対する セキュリティ対応は基本的には⾃⾝で実施 • マネージド・サービスやコンテナの活⽤で 運⽤コストを削減 • サイバーレジリエンスを⾼めるために組み 合わせ可能な多様な AWS サービス (セキュリティ、⾼可⽤性、バックアップ) エッジセキュリティ AWS WAF (Web アプリケーション保護) AWS Shield (DDoS 検知と軽減) ブラウザ
  17. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 複雑な認可処理を特化したバックエンドにオフロードし、 ⾼度な OIDC ユースケースを実現しやすい構成に Amazon Elastic Container Service (Amazon ECS) Amazon ElastiCache (キャッシュ) Amazon Aurora (RDBMS) Amazon Elastic Container Service (Amazon ECS) Application Load Balancer Amazon CloudFront (CDN) 新規登録・認証 認可エンドポイント トークンエンドポイント Amazon Aurora (RDBMS) Amazon Cognito - User Pool API (ユーザー認証) Amazon DynamoDB (属性管理) Authlete on AWS※ • 複雑かつ⾼いセキュリティが求められる 認証認可関連処理をバックエンドにオフロード • Cognito で管理する属性は認証関連の必須属性に 留めるのがスケールさせるプラクティス • 認可の⾼度なユースケースの実現(例 FAPI, CIBA) ブラウザ 認可バックエンド データベースレイヤ アイデンティティ管理バックエンド 認可サーバアプリ ※パフォーマンスや可⽤性を制御しやすい on AWS 構成をおすすめ
  18. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Authelete 提供の Cognito 活⽤アーキテクチャの意味 https://www.authlete.com/ja/developers/tutorial/cognito/ Cognito の User Pool API を使い ユーザー認証リポジトリとして利⽤ Cognito のカスタム認証 フローも利⽤可能 (TOTP、Passkeys など) 認可エンドポイントは Cognito の外で独⾃実装 Cognito のトークンが流通 しているが内部利⽤のみ
  19. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. セッション指向ではないエンドポイントのサーバレス化 でスケーラビリティと認可サーバアプリの軽量化を実現 Amazon API Gateway AWS Lambda Amazon CloudFront /token (セッション不要な EP) /authorization (画⾯遷移/セッション 管理と相性の良い EP) トークンエンドポイント Amazon Elastic Container Service (Amazon ECS) Amazon ElastiCache (キャッシュ) Amazon Aurora (RDBMS) 認可バックエンド Amazon Elastic Container Service (Amazon ECS) 認可サーバアプリ 新規登録・認証 認可エンドポイント データベースレイヤ Amazon Aurora (RDBMS) アイデンティティ管理バックエンド Amazon Cognito - User Pool API (ユーザー認証) Amazon DynamoDB (属性管理) Authlete on AWS ブラウザ サーバレス Web API Application Load Balancer
  20. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 完全サーバレスな認可サービスの可能性 - Amplify Identity Broker • Cognito の OIDC API および Hosted UI を利⽤せずにサーバレスで認可サーバー を実現する技術実証サンプル • Amplify と User Pool API を組合せた カスタマイズ性の⾼い SPA • 全エンドポイントをサーバレス化 • Cognito が発⾏するトークンと独⾃の セッション管理を組合せてどのように 状態管理するかが重要ポイント • 例︓ユーザーインタラクションが発⽣す る “/authorization” と SPA 間の遷移 https://github.com/awslabs/aws-amplify-identity-broker
  21. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Amplify シンプル、セキュア、スケーラブルな認証フロントエンド開発 • Amazon Cognito との統合 • PKCE 対応 • トークン保持と透過的なリフレッシュ • ソーシャルログイン • Cognito ユーザープールの OIDC API (+ Hosted UI) を経由し、外部 IdP と多段でフェデレーション • IdP との接続をベーシックな⼿法で⾏いたい ユースケースで活躍 • アプリケーションの容易なホスティング • Amplify Studio で UI のビジュアル開発 Amplify による SPA 画⾯例 ソーシャルログイン (OIDC API 接続機能) アプリにユーザー 認証機能を埋め込み (User Pool API 接続機能)
  22. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. フルサーバレスな認可サービスのイメージ Amazon API Gateway AWS Lambda Amazon CloudFront トークンエンドポイント Amazon Elastic Container Service (Amazon ECS) Amazon ElastiCache (キャッシュ) Amazon Aurora (RDBMS) Amazon Aurora (RDBMS) Amazon Cognito - User Pool API (ユーザー認証) Amazon DynamoDB (属性管理) Authlete on AWS ブラウザ AWS Amplify を利⽤し フロントエンドアプリ開発 認可 SPA Welcome Amazon S3 (SPA をホスティング) SPA から API 呼び出し SPA から API 呼び出し 認可バックエンド データベースレイヤ サーバレス Web API アイデンティティ管理バックエンド
  23. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 参考: ⾦融リファレンスアーキテクチャ • ⽇本のお客様へ向けて、FISC 安全対策基準を前提としつつ⾦融で 利⽤する様々なシステムの サンプルアーキテクチャとテンプ レートを提供 • OpenAPI/FAPI の実現パターンとし て Cognito, Authlete, Keycloak を 想定したものを提供 https://github.com/aws-samples/baseline-environment- on-aws-for-financial-services-institute
  24. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. まとめ • AWS 上に実現する認可サービスのアーキテクチャについて、 典型的なパターンをご紹介しました。 • ユーザー認証関連処理と認可関連処理をオフロードするアーキテク チャは、⾼いカスタマイズ性と、ビジネスに役⽴つ⾼度な OIDC 拡 張仕様・ユースケースを達成するために検討に値するアプローチです。 • ビジネス要件や達成したい⽬標に合わせ、AWS のサービスを活⽤し てお客様にとって最適な認可サービスを実現していきましょう。
  25. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Thank you! 勝原 達也 (Tatsuya Katsuhara) アマゾン ウェブ サービス ジャパン合同会社 セキュリティ ソリューション アーキテクト
  26. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. おまけ「頭の体操」︓ 利⽤可能なベーシックな OIDC 対応の認可サービスがあるが、 機能強化や改修できないため、サーバレス認可機能でラップして強化 ALB (OIDC 連携機能) Authlete RP 認可サービス (既存) API GW + Lambda (サーバレス認可 EP) UA /authorization 認可要求 認可要求の受付要求 ticket※ Redirect to https://{ALB}/issue?ticket={ticket} /issue リスナールールで保護 (要 認可サーバとの OIDC 連携) 認可要求(認可サーバ:既存) /auth/authorization /auth/authorization/issue ログイン画⾯&認証実施 認可応答 トークン要求&応答 オリジナルの URL へ誘導 w/ALB 認証済み cookie Redirect to https://{ALB}/issue?ticket={ticket} 認可応答の返却要求 認可応答のパラメータ 認可応答 トークン要求 ticket + userid Query String: ticket Header: ユーザー情報 /token トークン応答のパラメータ トークン応答 ログイン済み画⾯ RP とサーバレス認可 EP との OIDC 連携 ※Authlete 活⽤ ALB と認可サービス (既存) との OIDC 連携 ※ALB 機能 /token ※ticket 値のフロントエンドへの露出を回避する場合はセッションDBと組合せ ユーザー情報取得 w/トークン /userinfo
  27. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Appendix. トークンベースアクセス制御
  28. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. CIAM システムにおけるトークンベースアクセス制御 1 フェデレーション (OpenID Connect) 2 IdP トークン 3 トークンを利⽤して API 呼び出し(API 認可) AWS API 群 Amazon S3, Amazon DynamoDB, AWS Lambda など トークンベース アクセス制御 Amazon API Gateway, AWS AppSync など バックエンド (AWS の多様なサービスの組合せ) 5 ⼀時クレデンシャル 取得 6 AWS API に アクセス クライアント アプリ 認可サーバ トークン変換 Amazon Cognito ID Pool, AWS STS など 4 トークンと引き換えに ⼀時クレデンシャルを取得
  29. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. トークンベースの API アクセス制御のメカニズム Amazon API Gateway とオーソライザー Lambda オーソライザー • 任意ロジックで⼊⼒ (例 :JWT) を検証 • マネージド認可サービスと連携(後述) API クライアント Token (主に JWT 形式) オーソライザー (認可判断) アプリケーション (ビジネスロジック) トークン検証のための代表的なメカニズム JWT オーソライザー • 汎⽤的な JWT 形式のトークンの妥当 性を設定だけで容易に検証 Amazon API Gateway ※Cognito 発⾏のトークン専⽤のオーソライザーもあり
  30. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Amazon Verified Permissions 認可判断 トークンカスタマイズ機能を⼀元的な認可処理と連携 3 IdP トークンを 認可処理に利⽤する Lambda オーソライザー 許可/拒否 4 5 6 Amazon API Gateway トークン中に埋め込まれた アイデンティティ情報を⽤いて ⼀元的に認可判断 IdP 機能でトークンに埋め込んだアイデンティティ情報 (カスタム属性) ”cust-username": "dave", "cust-groups": ["Clients","T123"], "cust-clinicID": "T123", "cust-type": "Client", "cust-personID": "Dave", "runtime:primaryDoctor": "Jane", "runtime:insuranceOnFile": "true" } 1 フェデレーション (OpenID Connect) 2 外部 IdP トークン 認可サーバ クライアント アプリ バックエンド (AWS の多様なサービスの組合せ)
  31. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS STS によるアイデンティティ情報の橋渡しで、 AWS サービスを統合してアプリケーションを強化 AWS STS (Security Token Service) DynamoDB Amazon S3 1. アプリケーションが トークンを取得 2. トークンを AWS STS の機能で AWS の資格情報に変換 3. AWS の多様な API 呼び出し … AWS に依存しないアイデンティティの世界 AWS のアイデンティティ (AWS IAM) の世界 アプリケーション (ビジネスロジック) 認証 アプリケーション利⽤ ⼀時クレデンシャル Amazon Cognito ID プール (クレデンシャルブローカー) 認可サーバ