Slide 1

Slide 1 text

API Gatewayご紹介 日本オラクル株式会社 2024年9月

Slide 2

Slide 2 text

Copyright © 2024, Oracle and/or its affiliates. 2 API Gateway概要

Slide 3

Slide 3 text

ビジネスとビジネスを繋ぎ、拡大するAPIエコノミー APIの公開は企業やサービスの価値に直接的に影 響を及ぼすようになっている 金融機関のAPI公開によるFintechの拡大 • FinTech事業者は、家計簿アプリや貯金アプリ など幅広いサービスを提供 倉庫や配送などの物流API公開 • 物流APIを活用し、利用者は常に最新の配送 状況がわかる 自動車業界にも拡がるAPI • 渋滞情報や走行データのAPI化により、MaaS 事業や自動運転の実現に繋がる 政府保有情報のオープンデータ化 • 各自治体や公共事業者は、政府統計のAPIを 活用してサービスを構築可能 近年ますます広がり続けるAPIの世界 デジタルビジネスを拡大するためには、APIを 活用した事業サイクルは不可欠 ①データの 蓄積 ②APIの開 発と公開 ③APIの収 益化 ④新事業 の構築 Copyright © 2024, Oracle and/or its affiliates. 3

Slide 4

Slide 4 text

API利用者 バックエンドサービス APIの利用/公開の両方で機能する「玄関」が必要 拡がるAPIに反して、煩雑化するその管理 • 複数の認証方法とアクセスポイン トがある場合、APIを利用する際 の実装や管理が複雑 • 公開するAPIのバックエンドごとに、 サービスの監視やライフサイクル 管理が発生 • APIを横通ししてセキュリティレベ ルの維持や利用状況の把握・制 御を行うことが困難 Faa S メインフレーム データベース コンテナアプリ ERPアプリ APIの公開 APIの公開 APIの公開 Mobile SaaS Device 開発者 Copyright © 2024, Oracle and/or its affiliates. 4

Slide 5

Slide 5 text

バックエンドサービス API利用者 プラットフォームを利用することによる、API管理の一元化 API管理プラットフォームがもたらす、管理のシンプル化 Faa S メインフレーム データベース コンテナアプリ ERPアプリ Mobile SaaS Device 開発者 API管理プラットフォーム 認証方法やアクセスポイントが統一さ れており、APIを利用する側の実装や 管理がシンプルに APIサービスの監視先やライフサイクル の管理先を一元化 Copyright © 2024, Oracle and/or its affiliates. 5

Slide 6

Slide 6 text

APIエコノミーに参加、活用する上で求められるもの 堅牢性/セキュリティ • 認証/認可 • 流入制限 • インバウンド/アウトバウンドアクセ スの量を制限 可観測性 • モニタリング • ロギング • アクセスやバックエンド実行の監視 /観測が必要 APIデザインの管理 • 開発者ポータル • ドキュメント • OpenAPI仕様への対応による APIの標準化 ライフサイクル管理 • 設計 • 開発/公開 • バージョニング より重要になっていくAPIの管理 > Copyright © 2024, Oracle and/or its affiliates. 6

Slide 7

Slide 7 text

バックエンドサービスの入り口として機能するセキュアな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

Slide 8

Slide 8 text

シンプルでセキュアな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

Slide 9

Slide 9 text

Copyright © 2024, Oracle and/or its affiliates. 9 API Gatewayとリソースの監視

Slide 10

Slide 10 text

• OCI Monitoringとネイティブに統合される • “oci_apigateway”というメトリック・ネームスペー スでメトリックの収集が行われる • デフォルトで使用可能なメトリック • BytesReceived • BytesSent • HttpRequests • HttpResponses • BackendHttpResponses • Latency • IntegrationLatency • InternalLatency OCI Monitoringとの統合 Copyright © 2024, Oracle and/or its affiliates. 10

Slide 11

Slide 11 text

• OCI Loggingとネイティブに統合される • デプロイメント単位ごとにログ出力の要否が設定 可能 • OCI Loggingのインターフェースを利用して閲覧 • Service Connector Hubと併用することでログ出 力を元にした統合的な運用を可能に • 以下の2種類のログが出力可能 • アクセスログ: API Gatewayを介してデプロイメン トとの間で送受信されるリクエスト/レスポンスデー タのサマリー • 実行ログ: API Gateway内の処理に関するリク エスト/レスポンスの実行ログ OCI Loggingとの統合 Copyright © 2024, Oracle and/or its affiliates. 11 デプロイメント単位にログ出力を有効化 アクセスログ 実行ログ

Slide 12

Slide 12 text

Copyright © 2024, Oracle and/or its affiliates. 12 API Gatewayとリソースの保護

Slide 13

Slide 13 text

Oracle指定の認証局から発行されたTLS証明書ではなく、ユーザーが取得したTLS証明書が使用可能 カスタム・ドメインとTLS証明書 Copyright © 2024, Oracle and/or its affiliates. 13 証明書の取得先 ドメイン名 Public IP との紐づけ 証明書の 有効期限と更新処理 Oracle指定の認証局 (デフォルト) .apigateway..oci.customer-oci.com 自動 期限切れとなる前に自動更新 証明書サービス 独自ドメイン ユーザーが実施 期限切れとなる前にユーザーが更新 サード・パーティ 独自ドメイン ユーザーが実施 期限切れとなる前にユーザーが更新

Slide 14

Slide 14 text

• デフォルトのCAバンドルに加えて、証明書サービスで作成した他のCA(カスタムCA)のルート証明書および他のCA バンドル(カスタムCAバンドル)をAPI Gatewayのトラスト・ストアに追加可能 • ユースケース • セキュリティ上の理由でプライベートなCAのみを含むカスタムトラスト・ストアを使いたい • mTLS(相互TLS)をサポートしたい TLS証明書検証のためのトラスト・ストアのカスタマイズ Copyright © 2024, Oracle and/or its affiliates. 14

Slide 15

Slide 15 text

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にオフロード

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

認可プロバイダ・ファンクション • 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

Slide 18

Slide 18 text

• CORS(Cross-Origin Resource Sharing) • あるオリジンで動作しているWebアプリケーションに異 なるオリジンに存在するリソースへのアクセス権を HTTPリクエストによって与えるための仕組み • API Gatewayを使用し、デプロイされるAPIに対する CORSサポートを有効にできる • 各API単位の対応が不要になるため、効率的にポリ シーの適応が可能 CORSサポート Copyright © 2024, Oracle and/or its affiliates. 18

Slide 19

Slide 19 text

Copyright © 2024, Oracle and/or its affiliates. 19 APIの呼び出しとパラメータ化

Slide 20

Slide 20 text

コンテキスト変数 Copyright © 2024, Oracle and/or its affiliates. 20 Functions バックエンド API Gateway User Context Table 一時的に保存 ポリシーやデプロイメント定義で ${[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エンコードされた証明書)

Slide 21

Slide 21 text

Copyright © 2024, Oracle and/or its affiliates. 21 リクエスト・ポリシーとレスポンス・ポリシー

Slide 22

Slide 22 text

• API Gatewayのバックエンドに対して、グローバルにレート制限を設定可能 • 過剰なリクエストからバックエンドを保護することで、可用性やリソースの公平な使用を維持する • DoS攻撃の防止 • API使用を収益化するために利用を制限する • etc. • 1秒当たりのリクエスト数の上限を全リクエストの合計 or クライアントIP単位で指定する 流入制限 Copyright © 2024, Oracle and/or its affiliates. 22 API Gateway Functions User

Slide 23

Slide 23 text

• 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

Slide 24

Slide 24 text

• 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に対して、上書きの設定を追加をする ・・・

Slide 25

Slide 25 text

Copyright © 2024, Oracle and/or its affiliates. 25 APIの開発支援機能

Slide 26

Slide 26 text

• 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をデプロイ

Slide 27

Slide 27 text

• 開発初期のモックサーバー構築が容易 • APIの内部実装が完成した後は、URLを変更する ことなく固定値から実APIへ置き換え可能 • OpenAPI仕様から作成したAPIリソースを用いて、 APIデプロイメント作成した場合は、デフォルトでモック サーバーとして提供される • 様々なポリシーと組み合わせることで高度なモックサー バーを構築可能 • 認証・認可 • リクエストのバリデーション • レート制限 • ロギング • … モックサーバー(Stock Response)の提供 Copyright © 2024, Oracle and/or its affiliates. 27

Slide 28

Slide 28 text

• 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(); } } }

Slide 29

Slide 29 text

• 外部に構築したキャッシュ・サーバーと統合することで、 同一リクエスト(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

Slide 30

Slide 30 text

Copyright © 2024, Oracle and/or its affiliates. 30 APIの利用管理

Slide 31

Slide 31 text

リソースの全体像 API の使用計画をサブスクライバごとに設定し、利用の制限とメトリックの収集がサブスクライバ単位で可能に 使用計画には、レート制限(1 秒あたり n 回まで)と割り当て制限(分/時間/日/週/月あたり n 回まで)を設けるこ とができる 制限は、クライアント/コンシューマーごとに一意に設定したクライアント・トークンを用いて行われる 使用計画(使用プラン)とサブスクライバ Copyright © 2024, Oracle and/or its affiliates. 31 使用計画 資格 レート制限 割り当て制限 ターゲット・ デプロイメント クライアント サブスクライバ クライアント・トークン 1 n n 1 1 1 1 n n 1 1 1

Slide 32

Slide 32 text

クライアント・トークン API Gateway はクライアント/コンシューマー毎に払い出したクライアント・トークンを元に使用計画の判定を行う クライアント/コンシューマーは以下の場所のいずれかにクライアント・トークンを含めてリクエストを発行する • 認可プロバイダ・ファンクションによって返却される認証パラメータ or JWT のペイロード • リクエスト・ヘッダー • クエリーパラメータ • パス・パラメータ • リクエストの Host ヘッダー 使用計画とサブスクライバ Copyright © 2024, Oracle and/or its affiliates. 32

Slide 33

Slide 33 text

No content