
始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Create shared flow and flow hook
/ 40
Add a Cloud Armor security policy
/ 40
Wait for instance to be ready
/ 20
このラボでは、Apigee X 脅威対策ポリシーを使用して、コンテンツベースの脅威から API を保護します。また、グローバル外部 HTTPS ロードバランサに Cloud Armor を追加して、分散型サービス拒否攻撃(DDoS)からの保護、OWASP Top 10 リスクの軽減、IP ベースと位置情報ベースのアクセス制御などのウェブ アプリケーション ファイアウォール機能を提供します。
ランタイム インスタンスへのアクセスを提供するために、ロードバランサと、ブリッジ VM のマネージド インスタンス グループが作成されています。この構成のアーキテクチャは次のとおりです。
受信 API 呼び出しは、グローバル外部 HTTPS ロードバランサを介して顧客プロジェクトに入ります。外部 HTTPS ロードバランサは、テナント プロジェクトへの呼び出しを転送できません。代わりに、ロードバランサはリクエストを、お客様のプロジェクト内のブリッジ VM のマネージド インスタンス グループに転送します。これらのブリッジ VM は、Apigee ランタイム インスタンスに接続されたピアリングされたネットワーク内にあり、VM が API 呼び出しをランタイム インスタンスに転送できるようにします。
ロードバランサに送信された HTTP トラフィックは、ブリッジ VM に転送されてから、Apigee ランタイム インスタンスに転送されます。Cloud Armor セキュリティ ポリシーを追加して、特定のトラフィックがランタイムに送信されないようにします。
JSON 攻撃と XML 攻撃では、JSON パーサーと XML パーサーに過剰な負荷をかけてアプリケーション レベルのサービス拒否攻撃を引き起こすように構築されたペイロードが使用されます。Cloud Armor ではこのような攻撃は検出されませんが、Apigee では検出できます。JSONThreatProtection ポリシーと XMLThreatProtection ポリシーは、ペイロードをパーサーに読み込むことなく、これらの悪意のあるペイロードを検出できます。JSONThreatProtection ポリシーを使用して、不正な形式の JSON ペイロードから保護します。
このラボの手順は、有料組織と評価組織の両方に適用できます。
このラボでは、次のタスクの実行方法について学びます。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] ペインでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] ペインでもパスワードを確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
ウィンドウで次の操作を行います。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
このタスクでは、JSONThreatProtection ポリシーを含む共有フローを作成し、フローフックを使用してすべての Apigee API で有効にします。
JSONThreatProtection ポリシーは、指定された上限を超える受信 JSON リクエストを拒否します。ポリシーを共有フローに配置し、フローフックで共有フローを接続することで、ポリシーは環境にデプロイされたすべてのプロキシに対するリクエストを保護できます。
Apigee コンソールを開くには、次の手順に沿って操作します。
Apigee
」と入力し、検索結果で [Apigee API Management] をクリックします。Apigee コンソールが開き、よく使用される場所へのクイックリンクがランディング ページに表示されます。
Apigee がナビゲーション メニューに固定されます。
ナビゲーション メニューで、[プロキシ開発] > [共有フロー] を選択します。
[作成] をクリックします。
共有フローには、一連のポリシーと条件を含めることができ、FlowCallout ポリシーを使用して API プロキシや他の共有フローで実行できます。このラボでは、フローフックで共有フローを使用します。これにより、評価組織にデプロイされたすべてのプロキシに共有フローが接続チされます。
共有フローに protect-json
という名前を付け、[作成] をクリックします。
[開発] タブをクリックします。
共有フローの左側のメニューで、[共有フロー] セクションの [デフォルト] をクリックします。
[sharedflows/default.xml
] ペインで、ポリシーステップを追加()をクリックします。
[ポリシーを選択] で、[新しいポリシーを作成] を選択します。
[JSON Threat Protection] を選択し、[表示名] と [名前] を JTP-Protect
に設定します。
[追加] をクリックします。
JSONThreatProtection ポリシーには、受信する JSON リクエストに上限を設けるための要素がいくつか含まれています。通常、これらの上限は API の最大値に基づいて設定します。この場合、ポリシーのデフォルト構成を維持します。
このポリシーは、リクエストの Content-Type ヘッダーが application/json に設定されている場合にのみ実行されます。これは、受信リクエストに JSON ペイロードが含まれていることを示します。
[保存] をクリックします。
[デプロイ] をクリックし、[環境] で [eval] を選択します。
[デプロイ]、[確認] の順にクリックします。
共有フローはプロキシ前フローフックに接続され、プロキシが実行される前に実行されます。
[管理] > [環境] に移動します。
[eval] > [フローフック] をクリックします。
[プロキシ前] 行のプルダウンから [protect-json] 共有フローを選択し、[保存] をクリックします。
このフローフックは、後のタスクでテストします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このタスクでは、ロードバランサを保護し、API へのアクセスを制御するために、Cloud Armor セキュリティ ポリシーを追加します。
Cloud Armor は、Google Cloud のウェブ アプリケーション ファイアウォールです。ロードバランサに対して指定できる Cloud Armor ポリシーは 1 つだけです。このラボでは、Cloud Armor セキュリティ ポリシーを使用して、特定のトラフィックが Apigee ランタイム インスタンスに到達する前に拒否し、API を保護します。
Cloud コンソールのタブで、ナビゲーション メニュー()から [すべてのプロダクトを表示] をクリックし、[ネットワーキング] セクションで [ネットワーク セキュリティ] を選択して、[Cloud Armor ポリシー] に移動します。
[ポリシーを作成] をクリックします。
[名前] に「protect-apis
」を指定します。
このセキュリティ ポリシーでは、ルールを使用して、Apigee API 宛ての特定のトラフィックをブロックします。
[デフォルトのルール アクション] で [拒否] を選択します。
トラフィックを明示的に許可するルールに一致しない限り、ユーザーは API へのアクセスを拒否されます。
[拒否ステータス] プルダウンで [403(アクセス拒否)] を選択します。
トラフィックを許可するルールにリクエストが一致しない場合は、ステータス コード 403 Forbidden がユーザーに返されます。
[次のステップ] をクリックします。
このルールでは、指定した国からのリクエストのみが許可されます。
[ルールの追加] をクリックします。
[詳細モード] をクリックします。
基本モードのルールでは、一致する IP アドレスまたは IP アドレス範囲のみを指定できます。この場合、許可する国コードを指定します。
[一致] に次の式を指定します。
Cloud Armor の場合、region_code は ISO 3166-2 リージョンとして指定されます。このルールは、米国からのリクエストに一致します。
[アクション] で [許可] を指定します。
[優先度] を 1000
に設定し、[ルールの変更を保存] をクリックします。
このルールは、SQL インジェクションにつながる可能性のある SQL 入力を含むリクエストをブロックします。
[ルールの追加] をクリックします。
[詳細モード] をクリックします。
[一致] に次の式を指定します。
この式は、事前構成済みの Cloud Armor ルールを指定します。事前構成されたルールでは、オープンソースの業界標準シグネチャを使用して悪意のあるリクエストを検出します。無効にするシグネチャの名前を指定することで、特定のシグネチャを無効にできます。
この場合、感度レベル 3 と 4 のシグネチャはオフになります。シグネチャの感度レベル(パラノイア レベルとも呼ばれます)は、偽陽性の数が増える代わりにセキュリティ レベルが高くなるというトレードオフを指定します。
レベル 1 はデフォルトのセキュリティ レベルで、誤検出はほとんど、あるいはまったく発生しません。レベル 2 では、高度で難読化された攻撃に対する保護が強化されます。レベル 3 と 4 のシグネチャはよりアグレッシブで、偽陽性を引き起こす可能性が大幅に高くなります。たとえば、単純な JSON ペイロードを含む POST リクエストは、レベル 3 または 4 のシグネチャによってフラグが立てられる可能性があります。
[アクション] は [拒否] のままにし、[拒否ステータス] は [403(アクセス拒否)] のままにします。
[優先度] を「500
」に設定します。
Cloud Armor ポリシーのルールが評価される際、リクエストに一致する最初のルールによって、実行されるアクションが指定されます。SQL インジェクションのチェックは、リージョンのチェックよりも前に行う必要があります。これは、許可されたリージョンからのリクエストであっても、SQL インジェクション パターンが含まれている場合は拒否するためです。優先順位の数値を小さくすると、リージョン チェックの前に SQL インジェクション チェックが行われます。
[ルールの変更を保存] をクリックします。
右側の概要をご覧ください。ポリシーには 3 個のルールが含まれています。ルールは、優先度の数値が小さい順に評価され、最初に一致したルールが使用されます。
最初のルールは、SQL インジェクション パターンが検出された場合にアクセスを拒否します。
2 つ目のルールでは、送信元が米国の場合にアクセスが許可されます。
最後のルールは、すべてのトラフィックのアクセスを拒否します。
[ポリシーの作成] をクリックします。
[ポリシー] タブには、新しい protect-apis ポリシーのターゲットが 0 と表示されます。これは、まだロードバランサに接続していないためです。
[protect-apis] の横にあるポリシー メニューボタン()をクリックし、[ターゲットにポリシーを適用] をクリックします。
[Backend Service 1] プルダウンで [apigee-proxy-backend] を選択し、[追加] をクリックします。
[protect-apis] ポリシーの詳細ページに、ポリシーが 1 つのターゲットに適用されていることがすぐに表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このタスクでは、Apigee 評価組織のプロビジョニングが完了するまで待ちます。
Apigee 組織のプロビジョニングが完了するまでには、かなりの時間がかかる場合があります。組織のプロビジョニングの進行状況は、Apigee API を使用してモニタリングできます。
Cloud Shell で、次のコマンドを使用して、GOOGLE_CLOUD_PROJECT 変数にプロジェクト名が含まれていることを確認します。
変数 GOOGLE_CLOUD_PROJECT には、プロジェクトの名前(Apigee 組織名と同じ)が含まれている必要があります。
GOOGLE_CLOUD_PROJECT 変数が設定されていない場合、{project} をプロジェクト名に置き換えて、次のようなコマンドを使用して変数を手動で設定します。
以下のコマンドを Cloud Shell に貼り付けます。
この一連のコマンドでは、Apigee API を使用して、Apigee ランタイム インスタンスが作成されて eval 環境が接続されたことを確認します。
インスタンスが使用可能になるまで待ちます。
***ORG IS READY TO USE***
というテキストが表示されたら、インスタンスは使用可能です。
組織の準備ができるまで待つ場合は、その間に Cloud Armor の概要、カスタムルール、事前構成済みルールの詳細をご覧ください。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このタスクでは、Cloud Armor セキュリティ ポリシーが API を保護していること、許可されたリージョンからの許容可能なトラフィックを許可していること、フローフックが JSON 脅威から保護していることを確認します。
apigeex-test-vm という名前の仮想マシンが自動的に作成されています。このマシンを使用して、米国から API を呼び出すことができます。
Cloud Shell で、米国にあるテスト VM への SSH 接続を開きます。
[Do you want to continue (Y/n)?
] というメッセージが表示されたら、Y
キーを押して続行します。
Cloud Shell で確認されるすべての項目について、Enter キーまたは Return キーを押して、デフォルトの入力を指定します。
プロジェクトのオーナーとしてログインしているため、このマシンへの SSH は許可されます。
これで、Cloud Shell セッションが VM 内で実行できるようになります。
hello-world API プロキシにアクセスできることを確認します。
hello-world プロキシがデプロイされ、外部ロードバランサを介してプロキシが利用可能になるまでには、しばらく時間がかかる場合があります。これらのコマンドが ***HELLO-WORLD IS ACCESSIBLE***
を返したら、hello-world プロキシが利用可能になります。
eval 環境にデプロイした hello-world API プロキシを呼び出します。
ホスト名 eval.example.com の DNS エントリは、ロードバランサの受信 IP アドレスを使用して作成されています。
-i オプションは、レスポンスのステータス コードとヘッダーを表示します。
-k オプションは、ロードバランサの TLS 証明書の検証をスキップします。これは、ロードバランサに使用される TLS 証明書が、既知の認証局によって検証された証明書ではなく、自己署名証明書であるためです。
VM は米国に配置されているため、curl コマンドは hello-world プロキシによって生成された Hello, Guest!
レスポンスを正常に返します。
次のコマンドを使用して hello-world プロキシを呼び出します。
このリクエストは、共有フローに含まれる JSONThreatProtection ポリシーで指定された ObjectEntryNameLength の上限を超えています。共有フローは、プロキシ前のフローフックを使用してすべての API プロキシに接続されます。
レスポンスは次のようになります。
次のコマンドを使用して、hello-world API プロキシを呼び出してみます。
item クエリ パラメータは、文字列を連結して SQL クエリを構築する場合に意図しない結果をもたらす可能性がある SQL インジェクション パターンを使用します。
SQL インジェクション パターンが Cloud Armor によって正常に検出され、リクエストがブロックされて 403 Forbidden レスポンスが返されます。
「exit
」と入力して、米国仮想マシンへの SSH 接続を閉じます。
このタスクでは、Cloud Armor セキュリティ ポリシーで、許可リストに登録されていないリージョンのトラフィックが許可されないことを確認します。
apigeex-outside-us という名前の VM がゾーン
承認するよう求められた場合は、[承認] をクリックします。
Cloud Shell で確認されるすべての項目について、Enter キーまたは Return キーを押して、デフォルトの入力を指定します。
プロジェクトのオーナーとしてログインしているため、このマシンへの SSH は許可されます。
これで、Cloud Shell セッションが VM 内で実行できるようになります。
eval 環境にデプロイした hello-world API プロキシを呼び出します。
VM は米国にないため、Cloud Armor はリクエストをブロックし、403 を返します。
このタスクでは、Cloud Monitoring で Cloud Armor ポリシー ダッシュボードを確認します。
Cloud コンソールのタブで、[Monitoring] > [ダッシュボード] に移動します。
[ネットワーク セキュリティ ポリシー] をクリックします。
このダッシュボードには、すべての Cloud Armor ポリシーについて、許可されたリクエストとブロックされたリクエストの割合が表示されます。現在、ポリシーは 1 つのみです。
[ポリシー] ペインで、[protect-apis] をクリックします。
このダッシュボードには、protect-apis ポリシーで許可されたリクエストとブロックされたリクエストの割合が表示されます。
個々のリクエストの詳細をログに記録するには、ロードバランサのリクエスト ロギングを有効にする必要があります。
このラボでは、Cloud Armor ポリシーを作成し、そのポリシーを使用して、Cloud Armor ルールに基づいて受信トラフィックを拒否または許可しました。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 1 月 28 日
ラボの最終テスト日: 2025 年 1 月 28 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください