API Gateway のアーキテクチャ
API Gateway は、API の管理、モニタリング、認証を可能にする API 管理システムです。API Gateway を構成するコンポーネントには、次のものがあります。
- API Gateway: デプロイされた API を全面的に管理します
- Service Control - API 管理ルールを適用します。
- Service Management: API 構成を管理します
- gcloud CLI: API のデプロイと管理に使用します。
- Google Cloud コンソール: ロギング、モニタリング、共有に使用します
アーキテクチャ
次の図は、API Gateway に関連する主要コンポーネントの概要図です。
処理の説明:
API プロバイダは、API Gateway での API の作成とデプロイを行います。各 API は、OpenAPI 2.0 仕様として記述されたファイルによって定義されます。
OpenAPI 仕様では、API 用の REST エンドポイントの一般公開 URL、API によってアクセスされるバックエンド サービス、API の他の特性(認証、データ形式、レスポンス オプションなど)を定義します。
API クライアントは、API Gateway でホストされている API に REST リクエストを行い、バックエンド サービスにアクセスします。API クライアントは、ブラウザ、モバイルアプリ、ウェブアプリなど、REST 呼び出しを実行できる任意のアプリです。
API クライアントで把握している必要があるのは、API の URL、リクエスト動詞(
GET
、PUT
、POST
、DELETE
など)、認証要件、API との間で送受信されるデータの形式だけです。API クライアントは、バックエンドの実装について何も把握している必要がありません。実際、API Gateway でホストされている 1 つの API が、リクエストで渡された情報に基づいてさまざまなバックエンドにアクセスするように構成できます。
API Gateway コンポーネント
API ゲートウェイ
API Gateway は、API をホストするためのフルマネージドの従量課金制ソリューションを提供します。API Gateway は、サービスの実装を問わず、すべてのサービスで一貫性して明確に定義された REST API を使用して、バックエンド サービスへの安全なアクセスを提供します。
API Gateway は Google Cloud と統合されているため、他の Google Cloud プロダクトで使用しているものと同じ開発、モニタリング、ロギング、トレースするためのツールを利用できます。
Google Cloud 外部でホストされているバックエンド サービスに接続している場合でも、API へのアクセスの制御に使用される認証サービスや認可サービスを含めて、すべての Google Cloud サービスを活用できます。
Service Control API
Service Control API は、API キー認証、モニタリング、ロギングなどの API 管理ルールを実行時に適用します。Service Control には、以下のメソッドが用意されています。
- チェック - 認証情報と API キーを確認して、呼び出しを許可すべきかどうかを示します。
- レポート - ロギングとモニタリングのレコードをシステムに通知します。
Service Management API
API を定義するには、OpenAPI 仕様を使用します。次に、gcloud CLI を使用して OpenAPI 仕様を Service Management にアップロードし、API 構成を作成します。構成に関連するその他のタスクもここで行います。たとえば他のデベロッパーとの API の共有、さまざまなプロジェクトでの API の有効化と無効化、API キーの生成に関するタスクが考えられます。
gcloud CLI
gcloud CLI には、さまざまな Google Cloud サービスを呼び出す際に使用可能な gcloud コマンドライン ツールが用意されています。Google Cloud CLI を使用して OpenAPI 仕様をアップロードし、これにより作成された API 構成をその後、API Gateway にデプロイします。
Cloud コンソール
Google Cloud コンソールは、Google Cloud のグラフィック ユーザー インターフェースです。Google Cloud コンソールを使用して、Service Control で記録されたモニタリング データとロギングデータを公開し、認証と認可を構成し、デベロッパーが API を呼び出すための API キーを生成します。
API リクエストの処理
API 構成には、次の 2 種類のエンドポイントがあります。
- API エンドポイント: クライアントが API を利用するために使用する一般公開エンドポイントを定義します。
- バックエンド エンドポイント: API がバックエンド サービスへの接続に使用するエンドポイントを定義します。HTTP アクセスや HTTPS アクセスなどのセキュリティ設定は、バックエンド サービスの実装によって定義されます。
API エンドポイントへのリクエストは、バックエンド エンドポイントに渡されます(リクエストの一部として渡されるデータも含まれます)。バックエンド サービスからのレスポンス(サービスから返されたデータを含む)がクライアントに渡されます。
リクエストのルーティング
リクエストが届くと、次の処理が行われます。
API Gateway によって、Cloud Trace 用のトレース トークンが作成されます。
API Gateway は、受信リクエストのパスをターゲット API と照合します。一致するルートが見つかると、API Gateway は指定された API に対して認証手順を実施します。
JWT の検証が必要な場合、API Gateway は署名者の公開鍵を使用して認証情報を検証し、JWT の audience フィールドを検証します。API キーが必要な場合は、Service Control API を呼び出してキーを検証します。
Service Control はキーを調べて検証し、そのキーに関連付けられたプロジェクトで API が有効になっていることを確認します。キーが無効な場合、またはプロジェクトで API が有効になっていない場合は、呼び出しが拒否され、Service Control API によってそれがログに記録されます。
Service Control がキーの検証に成功した場合は、リクエストとともに、元のすべてのヘッダーおよび JWT 検証ヘッダー(該当する場合)がバックエンドに転送されます。
API Gateway がバックエンドからのレスポンスを受信すると、呼び出し元にそれを返し、Trace に最後のタイミング情報を送ります。呼び出しポイントが Service Control API によってログに記録され、この API は指標とログを適切な場所に書き込みます。