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 コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 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 のコンテンツ配信元となります。
-
コンソールで、ナビゲーション メニュー(
)> [Cloud Storage] > [バケット] に移動します。
-
[作成] をクリックして、新しい Cloud Storage バケットを作成します。
-
バケット名を「-bucket」に設定します。
-
[続行] をクリックします。
-
[ロケーション タイプ] で [リージョン
] を選択してから、[] を選択します。
-
[続行] をクリックします。
-
バケットのデフォルト ストレージ クラスは [Standard
] です。[続行] をクリックします。
-
[公開アクセスの防止] で [このバケットに対する公開アクセス禁止を適用する
] チェックボックスをオフにします。
-
[アクセス制御] で [きめ細かい管理] を選択します。
-
[続行] をクリックします。
-
[作成] をクリックします。
これで Cloud Storage バケットの作成は完了です。
バケットにオブジェクトをアップロードする
次に、バケットにオブジェクトをアップロードします(このオブジェクトは後ほど使用します)。Cloud Storage バケットはデフォルトで非公開になっています。このラボでは、オブジェクトをインターネットに公開します。
- Cloud Shell で次のコマンドを実行し、Cloud Shell に画像をダウンロードします。ここでは Google ホームページにある Google 画像を使用します。
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
-
gsutil cp
コマンドを使用して、Cloud Shell から上の手順で作成したバケットに画像をアップロードします。
gsutil cp google.png gs://{{{project_0.startup_script.project_id|Bucket Name}}}
- ダウンロードした画像を Cloud Shell から削除します。
rm google.png
-
[Cloud Storage] > [バケット] > [] に移動して、バケットにアップロードしたオブジェクトを見つけます。
-
アップロードしたオブジェクトの右側にあるその他アイコンをクリックし、[アクセス権の編集] をクリックします。
-
[エントリを追加] をクリックして、プルダウン リストでエンティティを [公開] に設定します。
-
[保存] をクリックします。
![エンティティの一覧、[保存] ボタン、[キャンセル] ボタンが表示されている [アクセス権の編集] ページ](https://cdn.qwiklabs.com/b7J%2FDa%2FQs1ii9RJbtLB9PEBijeY9rdhukZsgf0V76Y0%3D)
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを作成してオブジェクトをアップロードする
タスク 2. ロードバランサを作成する
Cloud CDN と Cloud Armor は、Google のグローバルな Cloud Load Balancing に関連付けることができるコンポーネントです。このセクションでは、HTTP ロードバランサを作成します
-
ナビゲーション メニュー(
)で、[すべてのプロダクトを表示] > [ネットワーク サービス] > [ロード バランシング] をクリックします。
- [+ロードバランサを作成] をクリックします。
- [ロードバランサのタイプ] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
- [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
- [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
- [構成] ボタンをクリックします。
- ロードバランサに「
edge-cache-lb
」という名前を付けます。
フロントエンドの構成を作成する
フロントエンドの構成を作成するには:
-
[フロントエンドの構成] をクリックします。
-
フロントエンドの構成では、HTTP(証明書がある場合は HTTPS も使用可)とエフェメラル IP アドレスを使用し、プレミアム ティア ネットワークが選択されていることを確認します。これはデフォルトで選択されています。
-
[完了] をクリックします。
![ロードバランサの説明が表示されている [フロントエンドの構成] ページ](https://cdn.qwiklabs.com/W%2Ftq7MRoTnPDw%2Bvl3uNSZwxbwFEE1txmCee%2FHTIZ8yM%3D)
バックエンドの構成を作成する
バックエンドの構成を作成するには:
-
[バックエンドの構成] をクリックします。
-
[バックエンド サービスとバックエンド バケット] で、[バックエンド バケットを作成] をクリックします。
-
[バックエンド バケット名] を「lb-backend-bucket
」に設定します。
-
次の項目で [参照] ボタンをクリックし、先ほど作成した Cloud Storage バケットを選択します。
-
他の値はすべてデフォルト値のままにします。
-
[作成] をクリックします。
ホストとパスのルールを作成する
ホストとパスのルールを作成するには:
-
左側にある [ルーティング ルール] をクリックします。
-
すべてのリクエストをバケットに送信するために、[モード] で [単純なホストとパスのルール] を選択します。これはデフォルトのオプションです。
HTTP ロードバランサを確認して作成する
HTTP ロードバランサを確認して作成するには:
- [確認と完了] をクリックします。
- [バックエンド サービス] と [フロントエンド] を確認します。
- [作成] をクリックします。
ロードバランサの IP を取得する
コンソールからロードバランサの IP を取得するには:
- ロードバランサのリストで、このプロジェクトのロードバランサの名前をクリックします。ロードバランサの IPv4 アドレスをメモします(次のタスクで使用します)。以降の手順では、IPv4 アドレスを挿入する部分が
[LOAD_BALANCER_IP]
と表記されます。
![[IP:ポート] で IP アドレスがハイライト表示されている [詳細] ページ](https://cdn.qwiklabs.com/gEIAdRhQ0Wllm2LutPBRlMAcAgXNbrZH%2FUMny9AgaGI%3D)
ロードバランサにクエリを実行する
数分経ったら、ロードバランサに対して、アップロードしたオブジェクトのクエリを実行します。ロードバランサの IP アドレスと画像名が必要です。
- 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
- 次のコマンドを使ってクエリを何度か実行します。
for i in `seq 1 50`; do curl http://LOAD_BALANCER_IP/google.png; done
Cloud CDN から配信されているコンテンツを確認する
-
[ネットワーク サービス] > [Cloud CDN] に移動して、CDN またはロード バランシングのモニタリングで、コンテンツが CDN から配信されていることを確認します。

100% に近いヒット率を達成できているはずです。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ロードバランサを作成する
タスク 3. Cloud Storage バケットからオブジェクトを削除する
キャッシュにデータが保存されたので、バケットからオブジェクトを削除します。これにより、ポリシーをバックエンドではなくキャッシュに確実に適用できます。
-
ナビゲーション メニュー(
)で、[Cloud Storage] > [バケット] > [-bucket] > [オブジェクト] をクリックします。
-
オブジェクトを選択し、上部の [削除] ボタンをクリックして削除します。
-
確認のプロンプトで [削除] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットからオブジェクトを削除する
タスク 4. エッジ セキュリティ ポリシーを作成する
Cloud Armor ポリシーは HTTP ロードバランサの外部で実装されます。Cloud Armor ポリシーをデプロイしたら、HTTP ロードバランサのバックエンド サービスまたはバックエンド バケットの 1 つ以上のリソース(以降、「ターゲット」と呼びます)にポリシーを関連付けることができます。
-
ナビゲーション メニュー(
)で、[すべてのプロダクトを表示] > [ネットワーク セキュリティ] > [Cloud Armor ポリシー] をクリックし、[ポリシーを作成] をクリックします。
- 以下の値を設定し、他はすべてデフォルト値のままにして、[次のステップ] をクリックします。
プロパティ |
値(値を入力するか、指定されたオプションを選択) |
名前 |
edge-security-policy |
ポリシータイプ |
Edge のセキュリティ ポリシー |
デフォルトのルール アクション |
拒否 |
- [ターゲットへのポリシーの適用] で [ターゲットを追加] をクリックし、以下の値を設定します。
プロパティ |
値 |
タイプ 1 |
バックエンド バケット(外部アプリケーション ロードバランサ) |
バックエンド バケットのターゲット 1 |
lb-backend-bucket |
-
[完了] をクリックします。
-
[ポリシーの作成] をクリックします。
エッジ セキュリティ ポリシーを確認する
バックエンド バケットの前面にエッジ セキュリティ ポリシーを作成したので、ポリシーが想定どおりに機能していることを確認します。
セキュリティ ポリシーを確認する
数分経過したら、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
ログを調べる
次に、適用されているエッジ セキュリティ ポリシーをログで確認します。
-
ナビゲーション メニュー(
)で、[すべてのプロダクトを表示] > [オブザーバビリティ] > [ロギング] > [ログ エクスプローラ] をクリックします。
-
以下のスニペットをクエリボックスに入力し、[クエリを実行] をクリックします。
resource.type:(http_load_balancer) AND jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" AND severity>=WARNING
-
403 レスポンス
と適用されているセキュリティ ポリシーに注目します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Armor のエッジ セキュリティ ポリシーを作成する
セキュリティ ポリシーを削除する
オブジェクトが CDN キャッシュから配信されていることを証明するために、Cloud Armor セキュリティ ポリシーを削除してからオブジェクトをクエリします。元のオブジェクトは Cloud Storage から削除されているため、エッジ キャッシュからオブジェクトが配信されていることが示されます。
-
ナビゲーション メニュー(
)で、[すべてのプロダクトを表示] > [ネットワーク セキュリティ] > [Cloud Armor ポリシー] > [edge-security-policy] > [ターゲット] をクリックします。
- [
lb-backend-bucket
] ターゲットを選択し、[削除] をクリックしてターゲット バケットを削除します。[削除] をクリックして、削除を確定します。
- 数分経過したら、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 年 12 月 10 日
ラボの最終テスト日: 2023 年 12 月 4 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。