Cloud Armor NamedIP リスト

1. はじめに

Google Cloud Armor の名前付き IP アドレスリストを使用すると、サードパーティ プロバイダが管理する IP アドレスと IP 範囲のリストを参照できます。セキュリティ ポリシー内で名前付き IP アドレスリストを構成できます。各 IP アドレスまたは IP 範囲を個別に手動で指定する必要はありません。

学習内容

  • Cloud Armor の名前付き IP アドレスリストのメリット
  • Cloud Armor セキュリティ ポリシーの作成
  • Cloud Armor の名前付き IP アドレスリストをデプロイする
  • グローバル ロードバランサの作成
  • サンプル テスト アプリケーションを含むマネージド インスタンス グループを作成する

必要なもの

  • セキュリティ ポリシーとロードバランサの使用経験

2. 許可されたサードパーティ プロバイダからのトラフィックのみを許可する

一般的なユースケースでは、許可されたサードパーティ パートナーの IP アドレスを含む許可リストを作成し、そのパートナーからのトラフィックのみがロードバランサとバックエンドにアクセスできるようにします。

たとえば、CDN プロバイダは配信元サーバーからコンテンツを定期的に取得して、独自のキャッシュに配信する必要があります。Google とのパートナーシップにより、CDN プロバイダと Google ネットワーク エッジを直接接続できます。Google Cloud の CDN ユーザーは、送信元の pull 時にこの直接接続を使用できます。この場合、CDN ユーザーは、特定の CDN プロバイダからのトラフィックのみを許可するセキュリティ ポリシーを構築できます。

この例では、CDN プロバイダが IP アドレスリスト「23.235.32.0/20, 43.249.72.0/22, ⋯,」を公開しています。CDN ユーザーが、これらの IP アドレスからのトラフィックのみを許可するセキュリティ ルールを構成します。その結果、2 つの CDN プロバイダ アクセス ポイント(23.235.32.10 と 43.249.72.10)が許可され、それらのトラフィックも許可されます。不正アクセス ポイント 198.51.100.1 からのトラフィックはブロックされます。

27243e72ee25ee16.png

Google Cloud Armor の名前付き IP アドレス

3. 事前構成済みのルールを使用して構成と管理を簡素化

多くの場合、CDN プロバイダはよく知られた IP アドレスを使用します。アドレスは多くの CDN ユーザーが使用する必要があります。プロバイダが IP アドレスを追加、削除、更新するたびに、これらのリストは変化します。

セキュリティ ポリシー ルールで名前付き IP アドレスリストを使用すると、Google Cloud Armor が CDN プロバイダからの情報を毎日自動的に同期するため、IP アドレスの構成と管理のプロセスが簡素化されます。これにより、大規模な IP アドレスリストを手動で管理するという、時間のかかるエラーの原因となりやすいプロセスが不要になります。

IP アドレスリスト プロバイダ

次の表の IP アドレスリスト プロバイダは、Google Cloud Armor でサポートされています。これらは Google と提携している CDN プロバイダです。IP アドレスリストは、個々の公開 URL を介して公開されます。

これらのパートナーは、IPv4 アドレスと IPv6 アドレスのリストを別々に提供しています。Google Cloud Armor は、指定された URL を使用してリストを取得し、そのリストを名前付き IP アドレスのリストに変換します。表内の名前でリストを参照します。

7e9c09a008e04656.png

または、Cloud Shell を使用して、事前構成済みの名前付き IP アドレスリストのリストを取得します。

Cloudshell にログインしてプロジェクト ID を設定する

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

Cloud Shell から

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

次の結果が返されます。

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

4. Codelab トポロジ

68a800f9adbf4570.png

5. 設定と要件

セルフペース型の環境設定

  1. Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください)。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、$300 USD 分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

bce75f34b2c53987.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

f6ef2b5f13479f3a.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

6. VPC ネットワークを作成

VPC ネットワーク

Cloud Shell から

gcloud compute networks create 

named-list-vpc

 --subnet-mode custom

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create named-ip-subnet \
        --network 

named-list-vpc

 --range 10.0.0.0/24 --region us-east1

ファイアウォール ルールを作成する

Cloud Shell から

gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 

ロードバランサを作成する

インスタンス テンプレートを作成する

Cloud Shell から

gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any

マネージド インスタンス グループを作成する

Cloud Shell から

gcloud compute --project=$projectid  instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b

7. バックエンドを確認する

両方のリージョンで VM インスタンスが作成されていることを確認し、それらの HTTP サイトにアクセスします。

  1. 引き続き Compute Engine で、左側のメニューの [VM インスタンス] をクリックします
  2. 「us-east1-mig」で始まるインスタンスに注目してください。これらのインスタンスは、マネージド インスタンス グループの一部です。
  3. us-east1-mig のインスタンスの外部 IP をクリックします。クライアント IP(IP アドレス)とホスト名(us-east1-mig で始まる)が表示されます。

HTTP ロードバランサを構成する

  1. Cloud コンソールのナビゲーション メニュー(mainmenu.png)>[ネットワーク サービス] >[ロードバランサを作成] をクリックします。
  2. [HTTP(S) ロード バランシング] で [構成を開始] をクリックします。

start_config.png

  1. [インターネットから自分の VM へ] を選択し、[続行] をクリックします。
  2. [名前] を http-lb に設定します。

バックエンドを構成する

バックエンド サービスによって、受信トラフィックが、接続されている 1 つ以上のバックエンドに振り向けられます。各バックエンドは、1 つのインスタンス グループと、追加の提供容量メタデータで構成されます。

  1. [バックエンドの構成] をクリックします。
  2. バックエンド サービスと[作成または選択] をクリックし、バックエンド サービスを作成し、[バックエンド サービス]、[バックエンド サービスを作成] の順にクリックします。
  3. バックエンド タイプがインスタンス グループ
  4. 18bf7a852f0759ee.png の値を設定し、他はすべてデフォルト値のままにします。
  5. [完了] をクリックします。
  6. [ヘルスチェック] で [ヘルスチェックの作成] を選択します。health_check.png
    1. d2f85af1e988532b.png の値を設定し、他はすべてデフォルト値のままにします。
  7. [保存して次へ]をクリックします
  8. [作成] をクリックしてバックエンド サービスを作成します。

b00c217bf592f0.png

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

ホストとパスのルールで、トラフィックの転送方法を決定します。たとえば、動画のトラフィックと静的トラフィックをそれぞれ異なるバックエンドに転送できます。ただし、このラボではホストとパスのルールは構成しません。

  1. [フロントエンドの構成] をクリックします。
  2. http-front-end
  3. 次のように指定し、他はすべてデフォルトの 51ae16211e72142f.png のままにします。
  4. [完了] をクリックします。

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

  1. [確認と完了] をクリックします。

8efe5b462a80071d.png

  1. バックエンド サービスとフロントエンドを確認します。

30b06910bf7fae29.png

  1. [作成] をクリックします。
  2. ロードバランサが作成されるまで数分待つ
  3. ロードバランサの名前(http-lb)をクリックします。
  4. 次のタスクで http-lb として参照されるロードバランサの IPv4 アドレスをメモします。

9. 不正アクセスの成功を検証する

名前付き IP アドレス ポリシーを実装する前に、ラボのバランサと後続のウェブ アプリケーションへの不正アクセスが成功したことを確認します。名前付き IP アドレス ポリシーが実装されると、ウェブ アプリケーションへのアクセスは、プロビジョニングされた式セットに制限されます。

  1. 前の手順で作成したロードバランサの IP アドレス(http-lb)を特定し、ウェブブラウザに貼り付けます。出力は以下のスクリーンショットのようになります。

注: このステップには数分かかります。ウェブページの生成後、クライアントの IP はワークステーションの IP ではなく Google Front End のものになります。

f93410e9568f1f32.png

以下に示すように、ワークステーションから同様の検証を行います。

bash-3.2$ curl <load-balancer-IP>

10. 出力例

bash-3.2$ curl <load-balancer-ip>
<h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b

11. 名前付き IP リストの構成

名前付き IP リスト用に新しい Cloud Amour ポリシーを作成する

Cloud Shell から

gcloud compute --project=$projectid security-policies create ca-policy

Cloud Shell から

gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*

利用可能な CDN 名前付き IP リストのアドレスを特定します。

Cloud Shell から

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

次の結果が返されます。

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

Cloud Shell から、CDN 使用可能な式セットに基づいて名前付き IP アドレスリストを構成します。

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('expression_set')" \
    --action "allow"

Cloudflare の使用例

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \
    --action "allow"

12. CA セキュリティ ポリシーを適用する

CA セキュリティ ポリシーを適用し、グローバル ポリシーが反映されるまで数分待ちます。

gcloud compute backend-services update http-backend --security-policy ca-policy --global

13. 名前付き IP アドレスの検証

  1. セキュリティ ポリシーが実装されているため、ワークステーションからのロードバランサへのアクセスは承認されません。
  2. 検証するには、ワークステーションからターミナル ウィンドウを開き、ロードバランサの IP アドレスに対して curl を実行します。curl の出力で「403」が返されるワークステーションが許可されていないため、Forbidden エラーが発生しました。

ワークステーションから

bash-3.2$ curl <load-balancer-IP>
<!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden

クリーンアップ手順

gcloud -q compute backend-services update http-backend --security-policy "" --global

gcloud -q compute --project=$projectid security-policies delete ca-policy

gcloud -q compute forwarding-rules delete http-front-end --global

gcloud -q compute target-http-proxies delete http-lb-target-proxy

gcloud -q compute url-maps delete http-lb

gcloud -q compute backend-services delete http-backend --global

gcloud -q compute health-checks delete http-health-check

gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b

gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template

gcloud -q compute --project=$projectid firewall-rules delete default-allow-http

gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check

gcloud -q compute networks subnets delete named-ip-subnet --region us-east1

gcloud -q compute networks delete named-list-vpc

14. 完了

以上で、この Codelab は完了です。

学習した内容

  • Cloud Armor の名前付き IP アドレスリストのメリット
  • グローバル ロードバランサの作成
  • サンプル テスト アプリケーションを含むマネージド インスタンス グループを作成する
  • Cloud Armor セキュリティ ポリシーの作成
  • Cloud Armor の名前付き IP アドレスリストをデプロイする
  • 名前付き IP Cloud Armor ポリシーを検証する