arrow_back

Cloud Armor によるエッジ キャッシュの保護

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

Cloud Armor によるエッジ キャッシュの保護

ラボ 1時間 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP878

概要

Google Cloud Armorエッジ セキュリティ ポリシーを使用すると、Cloud CDN(コンテンツ配信ネットワーク)と Cloud Storage でキャッシュに保存されたオブジェクトへのアクセスを制限できます。エッジ セキュリティ ポリシーは、Cloud CDN キャッシュが保存される場所のアップストリームにある、Google ネットワークの最も外側の境界でデプロイされ、適用されます。この理由の一つは、制限されている地域からストレージ バケット内のオブジェクトにユーザーがアクセスできないようにしたり、許可を受けている地域でのみメディア配信が行われるようにフィルタを適用したりするためです。

このラボでは、Google Cloud Storage バケットを作成して画像をアップロードし、バケットをロードバランサにバインドしてから、バケットに対して Cloud CDN と Cloud Armor のエッジ セキュリティ ポリシーを有効にします。

学習内容

このラボでは、次の方法について学びます。

  • Cloud Storage バケットを設定して、キャッシュ可能なコンテンツを格納する
  • コンテンツを保護するエッジ セキュリティ ポリシーを作成する
  • エッジ セキュリティ ポリシーが想定どおりに機能していることを確認する

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでも [ユーザー名] を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでも [パスワード] を確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

始める前に

  • Cloud Shell でプロジェクト ID を設定し、その環境変数を作成します。
export PROJECT_ID=$(gcloud config get-value project) echo $PROJECT_ID gcloud config set project $PROJECT_ID

タスク 1. Cloud Storage バケットを作成してオブジェクトをアップロードする

Cloud Storage バケットが Cloud CDN のコンテンツ配信元となります。

  1. コンソールで、ナビゲーション メニュー(ナビゲーション メニュー> [Cloud Storage] > [バケット] に移動します。

  2. [作成] をクリックして、新しい Cloud Storage バケットを作成します。

  3. バケット名を「-bucket」に設定します。

  4. [続行] をクリックします。

  5. [ロケーション タイプ] で [リージョン] を選択してから、[] を選択します。

  6. [続行] をクリックします。

  7. バケットのデフォルト ストレージ クラスは [Standard] です。[続行] をクリックします。

  8. [公開アクセスの防止] で [このバケットに対する公開アクセス禁止を適用する] チェックボックスをオフにします。

  9. [アクセス制御] で [きめ細かい管理] を選択します。

  10. [続行] をクリックします。

  11. [作成] をクリックします。

これで Cloud Storage バケットの作成は完了です。

バケットにオブジェクトをアップロードする

次に、バケットにオブジェクトをアップロードします(このオブジェクトは後ほど使用します)。Cloud Storage バケットはデフォルトで非公開になっています。このラボでは、オブジェクトをインターネットに公開します。

  1. Cloud Shell で次のコマンドを実行し、Cloud Shell に画像をダウンロードします。ここでは Google ホームページにある Google 画像を使用します。
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
  1. gsutil cp コマンドを使用して、Cloud Shell から上の手順で作成したバケットに画像をアップロードします。
gsutil cp google.png gs://{{{project_0.startup_script.project_id|Bucket Name}}}
  1. ダウンロードした画像を Cloud Shell から削除します。
rm google.png
  1. [Cloud Storage] > [バケット] > [] に移動して、バケットにアップロードしたオブジェクトを見つけます。

  2. アップロードしたオブジェクトの右側にあるその他アイコンをクリックし、[アクセス権の編集] をクリックします。

  3. [エントリを追加] をクリックして、プルダウン リストでエンティティを [公開] に設定します。

  4. [保存] をクリックします。

エンティティの一覧、[保存] ボタン、[キャンセル] ボタンが表示されている [アクセス権の編集] ページ

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Storage バケットを作成してオブジェクトをアップロードする

タスク 2. ロードバランサを作成する

Cloud CDN と Cloud Armor は、Google のグローバルな Cloud Load Balancing に関連付けることができるコンポーネントです。このセクションでは、HTTP ロードバランサを作成します

  1. [ネットワーキング] > [ネットワーク サービス] > [ロード バランシング] をクリックします。
  2. [+ロードバランサを作成] をクリックします。
  3. [ロードバランサのタイプ] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
  7. [構成] ボタンをクリックします。
  8. ロードバランサに「edge-cache-lb」という名前を付けます。

フロントエンドの構成を作成する

フロントエンドの構成を作成するには:

  1. [フロントエンドの構成] をクリックします。

  2. フロントエンドの構成では、HTTP(証明書がある場合は HTTPS も使用可)とエフェメラル IP アドレスを使用し、プレミアム ティア ネットワークが選択されていることを確認します。これはデフォルトで選択されています。

  3. [完了] をクリックします。

ロードバランサの説明が表示されている [フロントエンドの構成] ページ

バックエンドの構成を作成する

バックエンドの構成を作成するには:

  1. [バックエンドの構成] をクリックします。

  2. [バックエンド サービスとバックエンド バケット] で、[バックエンド バケットを作成] をクリックします。

  3. [バックエンド バケット名] を「lb-backend-bucket」に設定します。

  4. 次の項目で [参照] ボタンをクリックし、先ほど作成した Cloud Storage バケットを選択します。

  5. 他の値はすべてデフォルト値のままにします。

  6. [作成] をクリックします。

ホストとパスのルールを作成する

ホストとパスのルールを作成するには:

  1. 左側にある [ルーティング ルール] をクリックします。

  2. すべてのリクエストをバケットに送信するために、[モード] で [単純なホストとパスのルール] を選択します。これはデフォルトのオプションです。

HTTP ロードバランサを確認して作成する

HTTP ロードバランサを確認して作成するには:

  1. [確認と完了] をクリックします。
  2. [バックエンド サービス] と [フロントエンド] を確認します。
  3. [作成] をクリックします。

ロードバランサの IP を取得する

コンソールからロードバランサの IP を取得するには:

  • ロードバランサのリストで、このプロジェクトのロードバランサの名前をクリックします。ロードバランサの IPv4 アドレスをメモします(次のタスクで使用します)。以降の手順では、IPv4 アドレスを挿入する部分が [LOAD_BALANCER_IP] と表記されます。

[IP:ポート] で IP アドレスがハイライト表示されている [詳細] ページ

ロードバランサにクエリを実行する

数分経ったら、ロードバランサに対して、アップロードしたオブジェクトのクエリを実行します。ロードバランサの IP アドレスと画像名が必要です。

  1. Cloud Shell で次のコマンドを実行します。LOAD_BALANCER_IP はロードバランサの IPv4 アドレスに置き換えてください。
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png 注: HTTP ロードバランサへのアクセスには最大で 5 分ほどかかることがあります。

出力:

student-cloudshell% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
  1. 次のコマンドを使ってクエリを何度か実行します。
for i in `seq 1 50`; do curl http://LOAD_BALANCER_IP/google.png; done

Cloud CDN から配信されているコンテンツを確認する

  • [ネットワーク サービス] > [Cloud CDN] に移動して、CDN またはロード バランシングのモニタリングで、コンテンツが CDN から配信されていることを確認します。

1 つの結果が表示されている Cloud CDN の概要ページ

100% に近いヒット率を達成できているはずです。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ロードバランサを作成する

タスク 3. Cloud Storage バケットからオブジェクトを削除する

キャッシュにデータが保存されたので、バケットからオブジェクトを削除します。これにより、ポリシーをバックエンドではなくキャッシュに確実に適用できます。

  1. [Cloud Storage] > [バケット] > [-bucket] > [オブジェクト] に移動します。

  2. オブジェクトを選択し、上部の [削除] ボタンをクリックして削除します。

  3. 確認のプロンプトで [削除] をクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Storage バケットからオブジェクトを削除する

タスク 4. エッジ セキュリティ ポリシーを作成する

Cloud Armor ポリシーは HTTP ロードバランサの外部で実装されます。Cloud Armor ポリシーをデプロイしたら、HTTP ロードバランサのバックエンド サービスまたはバックエンド バケットの 1 つ以上のリソース(以降、「ターゲット」と呼びます)にポリシーを関連付けることができます。

  1. [ネットワーク セキュリティ] > [Cloud Armor ポリシー] に移動して、[ポリシーを作成] をクリックします。
  1. 以下の値を設定し、他はすべてデフォルト値のままにして、[次のステップ] をクリックします。
プロパティ 値(値を入力するか、指定されたオプションを選択)
名前 edge-security-policy
ポリシータイプ Edge のセキュリティ ポリシー
デフォルトのルール アクション 拒否
  1. [ターゲットへのポリシーの適用] で [ターゲットを追加] をクリックし、以下の値を設定します。
プロパティ
タイプ 1 バックエンド バケット(外部アプリケーション ロードバランサ)
バックエンド バケットのターゲット 1 lb-backend-bucket
  1. [完了] をクリックします。

  2. [ポリシーの作成] をクリックします。

エッジ セキュリティ ポリシーを確認する

バックエンド バケットの前面にエッジ セキュリティ ポリシーを作成したので、ポリシーが想定どおりに機能していることを確認します。

セキュリティ ポリシーを確認する

数分経過したら、Cloud Armor ポリシーが動作していることを確認できます。

コマンドラインで次のコマンドを実行すると、403 エラーが返されます。

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

403 エラーは、ウェブページまたはウェブサーバー上のコンテンツへのアクセス権限がない場合に発生します。

出力:

curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer

ログを調べる

次に、適用されているエッジ セキュリティ ポリシーをログで確認します。

  1. [オブザーバビリティ] > [ロギング] > [ログ エクスプローラ] に移動します。

  2. 以下のスニペットをクエリボックスに入力し、[クエリを実行] をクリックします。

resource.type:(http_load_balancer) AND jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" AND severity>=WARNING
  1. 403 レスポンスと適用されているセキュリティ ポリシーに注目します。

403 レスポンス メッセージとそのセキュリティ ポリシーがハイライト表示されているクエリページ

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Armor のエッジ セキュリティ ポリシーを作成する

セキュリティ ポリシーを削除する

オブジェクトが CDN キャッシュから配信されていることを証明するために、Cloud Armor セキュリティ ポリシーを削除してからオブジェクトをクエリします。元のオブジェクトは Cloud Storage から削除されているため、エッジ キャッシュからオブジェクトが配信されていることが示されます。

  1. [ネットワーク セキュリティ] > [Cloud Armor ポリシー] > [edge-security-policy] > [ターゲット] に移動します。
  2. [lb-backend-bucket] ターゲットを選択し、[削除] をクリックしてターゲット バケットを削除します。[削除] をクリックして、削除を確定します。
  1. 数分経過したら、Cloud Storage バケット内のリソースにもう一度 curl を送信します。
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

今回は 200 レスポンスが返されます。ウェブページは想定どおりに動作しています。

出力:

student-cloudshell% curl -svo /dev/null http://34.98.81.123/google.png Trying 34.98.81.123... TCP_NODELAY set Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) GET /google.png HTTP/1.1 Host: YOUR_IP User-Agent: curl/7.64.1 Accept: */* HTTP/1.1 200 OK X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M Date: Mon, 13 Dec 2021 23:06:46 GMT Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT ETag: "8f9327db2597fa57d2f42b4a6c5a9855" x-goog-generation: 1639431957957903 x-goog-metageneration: 2 x-goog-stored-content-encoding: identity x-goog-stored-content-length: 5969 Content-Type: image/png x-goog-hash: crc32c=TeiHTA== x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== x-goog-storage-class: STANDARD Accept-Ranges: bytes Content-Length: 5969 Server: UploadServer Age: 1621 Cache-Control: public,max-age=3600 { [775 bytes data] Connection #0 to host 34.98.81.123 left intact Closing connection 0

同じコマンドをさらに数回実行して、403 ステータス コードが返されるかどうかを確認します。

お疲れさまでした

Cloud Storage バケットを作成して画像をアップロードし、バケットをロードバランサにバインドしてから、バケットに対して Cloud CDN と Cloud Armor のエッジ セキュリティ ポリシーを有効にしました。

マニュアルの最終更新日: 2024 年 7 月 16 日

ラボの最終テスト日: 2024 年 7 月 16 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします