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

API Gateway 概要

API Gateway 概要

oracle4engineer

December 21, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. ビジネスとビジネスを繋ぎ、拡大するAPIエコノミー APIの公開は企業やサービスの価値に直接的に影 響を及ぼすようになっている 金融機関のAPI公開によるFintechの拡大 • FinTech事業者は、家計簿アプリや貯金アプリ など幅広いサービスを提供 倉庫や配送などの物流API公開 • 物流APIを活用し、利用者は常に最新の配送

    状況がわかる 自動車業界にも拡がるAPI • 渋滞情報や走行データのAPI化により、MaaS 事業や自動運転の実現に繋がる 政府保有情報のオープンデータ化 • 各自治体や公共事業者は、政府統計のAPIを 活用してサービスを構築可能 近年ますます広がり続けるAPIの世界 デジタルビジネスを拡大するためには、APIを 活用した事業サイクルは不可欠 ①データの 蓄積 ②APIの開 発と公開 ③APIの収 益化 ④新事業 の構築 Copyright © 2024, Oracle and/or its affiliates. 3
  2. API利用者 バックエンドサービス APIの利用/公開の両方で機能する「玄関」が必要 拡がるAPIに反して、煩雑化するその管理 • 複数の認証方法とアクセスポイン トがある場合、APIを利用する際 の実装や管理が複雑 • 公開するAPIのバックエンドごとに、

    サービスの監視やライフサイクル 管理が発生 • APIを横通ししてセキュリティレベ ルの維持や利用状況の把握・制 御を行うことが困難 Faa S メインフレーム データベース コンテナアプリ ERPアプリ APIの公開 APIの公開 APIの公開 Mobile SaaS Device 開発者 Copyright © 2024, Oracle and/or its affiliates. 4
  3. バックエンドサービス API利用者 プラットフォームを利用することによる、API管理の一元化 API管理プラットフォームがもたらす、管理のシンプル化 Faa S メインフレーム データベース コンテナアプリ ERPアプリ

    Mobile SaaS Device 開発者 API管理プラットフォーム 認証方法やアクセスポイントが統一さ れており、APIを利用する側の実装や 管理がシンプルに APIサービスの監視先やライフサイクル の管理先を一元化 Copyright © 2024, Oracle and/or its affiliates. 5
  4. APIエコノミーに参加、活用する上で求められるもの 堅牢性/セキュリティ • 認証/認可 • 流入制限 • インバウンド/アウトバウンドアクセ スの量を制限 可観測性

    • モニタリング • ロギング • アクセスやバックエンド実行の監視 /観測が必要 APIデザインの管理 • 開発者ポータル • ドキュメント • OpenAPI仕様への対応による APIの標準化 ライフサイクル管理 • 設計 • 開発/公開 • バージョニング より重要になっていくAPIの管理 </ > Copyright © 2024, Oracle and/or its affiliates. 6
  5. バックエンドサービスの入り口として機能するセキュアなAPIエンドポイント 主な機能 ※それぞれの詳細については後ほどご紹介します • Gateway機能 • カスタムドメイン/TLS証明書 • ヘッダー/クエリ変換 •

    リザルトキャッシュ(OCI Cache with Redisとの統合) • API利用管理 • 堅牢性の提供 • カスタム認証 • JWT検証 • リクエスト検証 • 流入制限 • CORSサポート • ゲートウェイやAPIの監視 • OCI Logging, OCI Monitoringとの統合 • ライフサイクル管理 • GUI/JSONなど用途に合わせたGatewayの操作 • モックサーバ(Stock Response)の提供 • SDK生成 • デザイン管理 • OpenAPI 2.0/3.0のサポート API Gateway Copyright © 2024, Oracle and/or its affiliates. 7 Network (Public/Private) Other Public API Services On-Prem API Server Oracle Cloud Infrastructure API Gateway Authentication Load Balancer Container Engine For Kubernetes Dynamic Routing Gateway Functions ▪ 価格 1,000,000 APIコールごとに¥465
  6. シンプルでセキュアなAPIを簡単に公開 OCIリソースのAPIエンドポ イント • OKEやComputeなど に実装した複数のAPI サーバのエンドポイント を統一化 OCI FunctionsのAPIエ

    ンドポイント • OCI Functionsを社 内外に公開できる • システムやアプリケーショ ンにFunctionsを組み 込むことが可能 オンプレミスAPIサーバとの 接続 • FastConnectやDRG を利用し、 既存のオン プレミスAPIサーバをそ のまま利用可能 3rdパーティAPIと組み合わ せたソリューションの構築 • 外部のAPIサービスもま とめて管理し、自由な システム構成が実現で きる OCI API Gatewayのユースケース Copyright © 2024, Oracle and/or its affiliates. 8
  7. • OCI Monitoringとネイティブに統合される • “oci_apigateway”というメトリック・ネームスペー スでメトリックの収集が行われる • デフォルトで使用可能なメトリック • BytesReceived

    • BytesSent • HttpRequests • HttpResponses • BackendHttpResponses • Latency • IntegrationLatency • InternalLatency OCI Monitoringとの統合 Copyright © 2024, Oracle and/or its affiliates. 10
  8. • OCI Loggingとネイティブに統合される • デプロイメント単位ごとにログ出力の要否が設定 可能 • OCI Loggingのインターフェースを利用して閲覧 •

    Service Connector Hubと併用することでログ出 力を元にした統合的な運用を可能に • 以下の2種類のログが出力可能 • アクセスログ: API Gatewayを介してデプロイメン トとの間で送受信されるリクエスト/レスポンスデー タのサマリー • 実行ログ: API Gateway内の処理に関するリク エスト/レスポンスの実行ログ OCI Loggingとの統合 Copyright © 2024, Oracle and/or its affiliates. 11 デプロイメント単位にログ出力を有効化 アクセスログ 実行ログ
  9. Oracle指定の認証局から発行されたTLS証明書ではなく、ユーザーが取得したTLS証明書が使用可能 カスタム・ドメインとTLS証明書 Copyright © 2024, Oracle and/or its affiliates. 13

    証明書の取得先 ドメイン名 Public IP との紐づけ 証明書の 有効期限と更新処理 Oracle指定の認証局 (デフォルト) <unique>.apigateway.<region>.oci.customer-oci.com 自動 期限切れとなる前に自動更新 証明書サービス 独自ドメイン ユーザーが実施 期限切れとなる前にユーザーが更新 サード・パーティ 独自ドメイン ユーザーが実施 期限切れとなる前にユーザーが更新
  10. API Gatewayを活用したWeb APIに対する認証・認可処理 • API Gatewayの機能を活用することで、各アプリケーションに実装していた認証・認可処理をオフロード • バックエンド実行基盤は、よりビジネスロジックに集中できる • API

    Gatewayで一元管理することで、認証強度や鍵のライフサイクル管理を統一できる Copyright © 2024, Oracle and/or its affiliates. 15 User Functions Functions Functions ビジネスロジック + 認証・認可処理 ビジネスロジック + 認証・認可処理 ビジネスロジック + 認証・認可処理 API Gateway User Functions Functions Functions ビジネスロジック ビジネスロジック ビジネスロジック API Gateway 認証・認可処理を API Gatewayにオフロード
  11. API Gatewayで行われる認証・認可処理の基本的な動き 1. エンドユーザーが認証・認可のために必要な情報(ID/Password, トークン, etc.)含めてリクエストを送信 2. API Gatewayにて、認証やトークンの検証処理が行われる。方法は以下の2通り。 •

    Oracle Functionsで実装したロジックを用いて、認証を行う → 認可プロバイダ・ファンクション • 設定値に基づき、トークンの検証を行う → OAuth 2.0/OpenID Connect 1.0 3. 認証結果、検証済みのトークンに含まれるscopeを用いて、各パス単位に認可処理を行う • スキップ(認可処理を実行しない)も可能 Copyright © 2024, Oracle and/or its affiliates. 16 User Functions Functions Functions API Gateway 1. ID/PW、トークン 2. ID/PWやトークンを 用いて認証や検証処理を行う 3. 各パス単位にscopeを 用いた認可処理 list:greet create:greet update:greet delete:greet list:greet list:greet create:greet create:greet create:greet
  12. 認可プロバイダ・ファンクション • HTTPリクエスト(ヘッダー or クエリーパラメーター) に含まれる情報で認証処理を行うOracle Functionsへ渡し、その情報を検証する事で認証処 理を行う • (オプション)返却された認証結果に含まれる

    scopeを用いてパスに対する認可処理を行う OAuth 2.0/OpenID Connect 1.0 • HTTPリクエスト(ヘッダー or クエリーパラメーター or Cookie)に含まれるID/アクセストークンをAPI Gatewayで検証する • (オプション)アクセストークンに含まれているscope を用いて、パスに対する認可処理を行う 提供されている認証・認可のための機能 Copyright © 2024, Oracle and/or its affiliates. 17 Functions Functions Functions API Gateway Functions Functions Functions API Gateway Functions Identity Provider 認証依頼 認証結果 (オプション)認証結果に含まれる scopeを用いて認可処理 (オプション)アクセストークンのPayloadに 含まれるscopeを用いて認可処理 Identity Domains/IDCS Auth0 Okta Keycloak etc. User User ID/Access Token
  13. • CORS(Cross-Origin Resource Sharing) • あるオリジンで動作しているWebアプリケーションに異 なるオリジンに存在するリソースへのアクセス権を HTTPリクエストによって与えるための仕組み • API

    Gatewayを使用し、デプロイされるAPIに対する CORSサポートを有効にできる • 各API単位の対応が不要になるため、効率的にポリ シーの適応が可能 CORSサポート Copyright © 2024, Oracle and/or its affiliates. 18
  14. コンテキスト変数 Copyright © 2024, Oracle and/or its affiliates. 20 Functions

    バックエンド API Gateway User Context Table 一時的に保存 ポリシーやデプロイメント定義で ${<context table name>[key]} の形式で参照可能 • APIコール等に含まれるパラメータをポリシーやデプロイ メント定義で使用可能にするために、API Gatewayが一時的に保持する変数のこと • ユースケース例 • バックエンドが解釈できる形へリクエストの形式を変 更したい(request.path/queryを用いて、URL の形式を書き換える) • 認証結果に含まれる情報(ユーザーID、etc.) をバックエンドに伝搬したい Context Table Name 概要 request.path APIデプロイメント仕様で定義したパス・パラメータ request.query APIリクエストに含まれるクエリー・パラメータ request.headers APIリクエストに含まれるヘッダー・パラメータ request.auth Authorizer Functionsによって返却されるパラメータ (context)、JWTのPayloadに含まれるclaim request.cert 証明書パラメータ(mTLSハンドシェイク中に正常に検証 されたBase64エンコードされた証明書)
  15. • API Gatewayのバックエンドに対して、グローバルにレート制限を設定可能 • 過剰なリクエストからバックエンドを保護することで、可用性やリソースの公平な使用を維持する • DoS攻撃の防止 • API使用を収益化するために利用を制限する •

    etc. • 1秒当たりのリクエスト数の上限を全リクエストの合計 or クライアントIP単位で指定する 流入制限 Copyright © 2024, Oracle and/or its affiliates. 22 API Gateway Functions User
  16. • API GatewayでHTTPリクエストに対するバリデー ションが可能 • バックエンドサービスに対して不要な負荷をかけないよ うにするために、HTTPリクエストのバリデーション処理 をAPI Gatewayにオフロードする •

    検証のポリシー • Enforcing: すべてのリクエストに対して検証を実 施し、検証が成功したリクエストのみバックエンドへ ルーティングする • Permissive: すべてのリクエストに対して検証を実 施するが、検証結果によらずすべてのリクエストを バックエンドへルーティングする • Disabled: 検証を実施しない リクエストのバリデーション Copyright © 2024, Oracle and/or its affiliates. 23 API Gateway Functions Container Engine For Kubernetes Public API バックエンドサービス ・・・ 【検証可能な項目】 • 特定のヘッダーを含むか • 特定のクエリーパラメーターを含むか • リクエストボディーのコンテンツタイプが期待通りか User
  17. • API Gatewayで、HTTP Request/Responseの 一部の情報に対して変更が可能 • ユースケース • バックエンドサービスが要求するヘッダー(e.g. Accept-Encoding)を一律で付与する

    • セキュリティ上の理由で、レスポンスに含まれる特定 のヘッダー(e.g. Server)を削除する • バックエンドサービスが解釈できるような形にリクエス トのURLを書き換える • etc. ヘッダー/クエリー変換 Copyright © 2024, Oracle and/or its affiliates. 24 Functions バックエンド API Gateway User Functions Functions • ヘッダーの追加、削除、変更 • クエリーパラメーターの追加、削除、変更 • リクエストURLの書き換え • ヘッダーの追加、削除、変更 e.g. Request Headerに対して、上書きの設定を追加をする ・・・
  18. • API GatewayでOpenAPI仕様(2.0 & 3.0)をサ ポート • デザイン・ファーストなAPIの開発サイクルに貢献 • API用のリファレンスドキュメントの共有

    • 開発初期のモックサーバーを容易に生成 • 認証・認可等のポリシーを追加し、さらに高度なスタブと して活用可能 • OpenAPI仕様を元にAPIクライアント用のSDKが各 言語で生成可能 • Android Java • Java • JavaScript • Swift • TypeScript OpenAPI 2.0/3.0のサポート Copyright © 2024, Oracle and/or its affiliates. 26 openapi: '3.0.2' info: title: Employee API version: '1.0' servers: - url: https://oci-api-gateway-host paths: # ... /employee: get: responses: '200': description: return all employee. # ... examples: OpenAPI仕様の定義ファイル をアップロードし、APIリソースを作成 APIリソースを使用して、 API GatewayにAPIをデプロイ
  19. • 開発初期のモックサーバー構築が容易 • APIの内部実装が完成した後は、URLを変更する ことなく固定値から実APIへ置き換え可能 • OpenAPI仕様から作成したAPIリソースを用いて、 APIデプロイメント作成した場合は、デフォルトでモック サーバーとして提供される •

    様々なポリシーと組み合わせることで高度なモックサー バーを構築可能 • 認証・認可 • リクエストのバリデーション • レート制限 • ロギング • … モックサーバー(Stock Response)の提供 Copyright © 2024, Oracle and/or its affiliates. 27
  20. • OpenAPI仕様から作成したAPIリソースを元にAPI クライアント用のSDK(Software Development Kits)を作成可能 • 対応言語 • Android Java

    • Java • JavaScript • Swift • TypeScript クライアントSDKの生成 Copyright © 2024, Oracle and/or its affiliates. 28 SDKを用いたサンプルコード(Java): // Import classes: import com.example.sdk.ApiClient; import com.example.sdk.ApiException; import com.example.sdk.Configuration; import com.example.sdk.models.*; import com.example.sdk.api.DefaultApi; public class Example { public static void main(String[] args) { ApiClient defaultClient = Configuration.getDefaultApiClient(); defaultClient.setBasePath("https://hoyd2..."); DefaultApi apiInstance = new DefaultApi(defaultClient); Integer employeeId = 56; // Integer | try { apiInstance.employeeEmployeeIdDelete(employeeId); } catch (ApiException e) { System.err.println("Exception when calling DefaultApi#employeeEmplo yeeIdDelete"); System.err.println("Status code: " + e.getCode()); System.err.println("Reason: " + e.getResponseBody()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } } }
  21. • 外部に構築したキャッシュ・サーバーと統合することで、 同一リクエスト(GET, HEAD, OPTIONS)に対する レスポンスをキャッシュ・サーバーから返却する機能 • ユースケース • 同一リクエストに対する応答を高速化したい

    • バックエンド・サービスに対して必要以上に負荷をか けたくない レスポンス・キャッシュ Copyright © 2024, Oracle and/or its affiliates. 29 API Gateway Functions Container Engine For Kubernetes Public API バックエンドサービス ・・・ Cache Server [^1]: リクエストのURL、HTTP メソッド(GET, HEAD, OPTIONS)、 APIデプロイメントのOCIDから導出されるキャッシュ・サーバー内のレスポンスを 一意に識別するためのキー 3. API Response 1. API Request 2. キャッシュ・キー[^1]を 元に照合 2. キャッシュ・ヒットしない場合は バックエンドサービスに問い合わせ Key Vault キャッシュ・サーバー へのパスワードを格納 User OCI Cache with Redis
  22. リソースの全体像 API の使用計画をサブスクライバごとに設定し、利用の制限とメトリックの収集がサブスクライバ単位で可能に 使用計画には、レート制限(1 秒あたり n 回まで)と割り当て制限(分/時間/日/週/月あたり n 回まで)を設けるこ とができる

    制限は、クライアント/コンシューマーごとに一意に設定したクライアント・トークンを用いて行われる 使用計画(使用プラン)とサブスクライバ Copyright © 2024, Oracle and/or its affiliates. 31 使用計画 資格 レート制限 割り当て制限 ターゲット・ デプロイメント クライアント サブスクライバ クライアント・トークン 1 n n 1 1 1 1 n n 1 1 1