Google Cloud コンソールを使用してサービスへのトラフィックを保護する
このページでは、API Gateway に API をデプロイして、バックエンド サービスへのトラフィックを保護する方法について説明します。
Google Cloud コンソールを使用して Cloud Functions でバックエンド サービスにアクセスする新しい API をデプロイするには、次の手順に沿って操作します。このクイックスタートでは、API キーを使用してバックエンドを不正アクセスから保護する方法についても説明します。
準備
Google Cloud コンソールで [API Gateway] ページに移動し、Google Cloud プロジェクトを選択または作成します。
API Gateway では、次の Google サービスを有効にする必要があります。
名前 タイトル apigateway.googleapis.com
API Gateway API servicemanagement.googleapis.com
Service Management API servicecontrol.googleapis.com
Service Control API 選択したプロジェクトでこれらのサービスをまだ有効にしていない場合は、有効にするように求められます。
お支払いが有効になっていることを確認します。
API バックエンドをデプロイする
API Gateway は、デプロイされたバックエンド サービスの前にあり、すべての受信リクエストを処理します。このクイックスタートでは、API Gateway は、以下に示す関数を含む helloGET
という名前の Cloud Functions バックエンドに受信呼び出しをルーティングします。
/** * HTTP Cloud Function. * This function is exported by index.js, and is executed when * you make an HTTP request to the deployed function's endpoint. * * @param {Object} req Cloud Function request context. * More info: https://expressjs.com/en/api.html#req * @param {Object} res Cloud Function response context. * More info: https://expressjs.com/en/api.html#res */ exports.helloGET = (req, res) => { res.send('Hello World!'); };
クイックスタート: Google Cloud CLI の使用の手順に沿ってサンプル Cloud Functions コードをダウンロードし、Cloud Functions 関数のバックエンド サービスをデプロイします。
API 定義を作成する
API Gateway は API 定義を使用してバックエンド サービスに呼び出しを転送します。特殊なアノテーションを含む OpenAPI 仕様を使用して、必要な API Gateway の動作を定義できます。このクイックスタートの OpenAPI 仕様には、Cloud Functions の関数のバックエンドへの転送手順が含まれています。
# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET responses: '200': description: A successful response schema: type: string
上記の OpenAPI 仕様を使用して API を定義するには:
コマンドラインから、
openapi2-functions.yaml
という名前の新しいファイルを作成します。新しく作成したファイルに OpenAPI 仕様の内容をコピーして貼り付けます。
ファイルを次のように編集します。
title
フィールドで、API_ID を API の名前(次のステップで作成します)に置き換え、optional-string を任意の簡単な説明に置き換えます。このフィールドの値は、この API へのアクセス権を付与する API キーを作成するときに使用されます。API ID の命名ガイドラインについては、API ID の要件をご覧ください。address
フィールドで、PROJECT_ID を実際の Google Cloud プロジェクトの名前に置き換えます。
ゲートウェイを作成する
これで、API Gateway でゲートウェイを作成してデプロイする準備が整いました。
Google Cloud コンソールで [API Gateway] ページを開きます。
[Create Gateway] をクリックします。
[API] セクションで、次の操作を行います。
- 新しい API を作成するか、[API を選択] プルダウンから既存の API を選択できます。このチュートリアルでは、[Create a new API] を選択します。
- API の表示名を入力します。
- API の API ID を入力します。
- (省略可)Key-Value 形式を使用して API にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[API Config] セクションで、次の操作を行います。
- 新しい API 構成を作成するか、[構成を選択] プルダウンから既存の API 構成を選択できます。このチュートリアルでは、[Create a new API config] を選択します。
- API の定義に使用する
openapi2-functions.yaml
をファイル ブラウザを使用してアップロードします。 - API 構成の表示名を入力します。
プルダウン リストからサービス アカウントを選択します。 選択したサービス アカウントが API Gatewayの ID として使用されます。
(省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。 複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[Gateway details] セクションで、次の操作を行います。
- ゲートウェイの表示名を入力します。ゲートウェイの URL は自動的に生成されます。
- ゲートウェイの場所をプルダウン メニューから選択します。
- (省略可)ゲートウェイに Key-Value 形式でラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[Create Gateway] をクリックします。
これにより、新しく作成されたゲートウェイに API 構成がデプロイされます。ゲートウェイに API 構成をデプロイすると、API クライアントで API へのアクセスに使用できる外部 URL が定義されます。
オペレーションが完了するまでに数分かかることがあります。次の図に示すように、作成およびデプロイのプロセスのステータスを確認するには、メイン ナビゲーション バーの [通知] アイコンをクリックしてステータス通知を表示します。
正常に完了すると、Gateway のランディング ページでゲートウェイの詳細を表示できます。
ゲートウェイ URL をメモします。これは、次のステップでデプロイをテストするために使用されます。
API デプロイのテスト
これでゲートウェイのデプロイ時に生成された URL を使用して API にリクエストを送信できるようになりました。
ブラウザに次の URL を入力します。
- GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
hello
は、API 構成で指定されたパスです。
https://GATEWAY_URL/hello
次に例を示します。
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
ブラウザに「Hello World!
」というメッセージが表示されます。
API Gateway が正常に作成されてデプロイされました。
API キーを使用してアクセスを保護する
API バックエンドへのアクセスを保護するには、プロジェクトに関連付けられた API キーを生成し、そのキーに API を呼び出す権限を付与します。詳しくは、API キーで API アクセスを制限するをご覧ください。
このクイックスタートで使用している Google Cloud プロジェクトに関連付けられた API キーがまだ存在しない場合は、API キーの作成の手順に沿って追加できます。
API キーを使用してゲートウェイへのアクセスを保護するには:
- サービスの API キーサポートを有効にします。
- Google Cloud コンソールで、[API とサービス] の [ライブラリ] に移動します。
- 検索バーに、作成した API のマネージド サービス名を入力します。この値は、API ランディング ページの API の [マネージド サービス] 列で確認できます。次に例を示します。
my-api-123abc456def1.apigateway.my-project.cloud.goog
- サービスのランディング ページで、[有効にする] をクリックします。
- API 構成の作成に使用される OpenAPI 仕様を変更して、すべてのトラフィックに API キー検証セキュリティ ポリシーを適用する手順を含めます。以下に示すように、
security
タイプとsecurityDefinitions
を追加します。# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET security: - api_key: [] responses: '200': description: A successful response schema: type: string securityDefinitions: # This section configures basic authentication with an API key. api_key: type: "apiKey" name: "key" in: "query"
securityDefinition
は、仕様で定義されているすべてのパスへのアクセスをリクエストするときに、key
という名前のクエリ パラメータとして渡される API キーをリクエストするように API を構成します。 - 新しい API 構成を作成して既存のゲートウェイにデプロイします。
- [Gateways] ランディング ページに移動します。
- リストからゲートウェイを選択して、詳細を表示します。
- [Edit] をクリックしてゲートウェイ構成ペインを開きます。
- [API config] セクションで次の操作を行います。
- 使用可能なプルダウンから [Create a new API config] を選択します。
- ファイル ブラウザを使用して、変更した OpenAPI 仕様をアップロードします。
- 新しい API 構成の表示名を入力します。
- プルダウン リストからサービス アカウントを選択します。選択したサービス アカウントが API Gatewayの ID として使用されます。
- (省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
- [更新] をクリックします。
API キーのテスト
変更した API を作成してデプロイしたら、API にリクエストを送信してみてください。
ブラウザに次の URL を入力します。
- GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
hello
は、API 構成で指定されたパスです。
https://GATEWAY_URL/hello
次に例を示します。
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
これにより次のエラーが発生するはずです。
UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.
ブラウザに次の URL を入力します。
- GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
hello
は、API 構成で指定されたパスです。- API_KEY は、API キーを使用してアクセスを保護するで作成した API キーを指定します。
https://GATEWAY_URL/hello?key=API_KEY
ブラウザに「Hello World!
」と表示されます。
これで完了です。これで API バックエンドは API Gateway で正常に保護されました。追加の API キーを生成して、新しい API クライアントのオンボーディングを開始できます。
API の活動を追跡する
Google Cloud コンソールの [API Gateway] ページで API のアクティビティ グラフを確認します。API をクリックして、[概要] ページにアクティビティ グラフを表示します。グラフにリクエストが反映されるまでにしばらく時間がかかる場合があります。
[ログビューア] ページで API のリクエストログを確認します。[ログ エクスプローラ] ページへのリンクは、Google Cloud コンソールの [API Gateway] ページにあります。
[API Gateway] ページで次の操作を行います。- 表示する API を選択します。
- [詳細] タブをクリックします。
- [ログ] の下にあるリンクをクリックします。
クリーンアップ
このクイックスタートで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。
このチュートリアルで使用した Google Cloud プロジェクトの削除もできます。
次のステップ
- API Gateway についての詳細を確認する
- 開発環境の構成を確認する