Google Cloud Service 拡張機能
- English
- 日本語
Next-Gen WAF エージェントは、ユーザーが管理するコールアウト・バックエンド・サービスとして Google Cloud Service 拡張機能と統合され、Google Cloud Load Balancer のリクエスト処理パイプライン内でリアルタイムのトラフィック検査とセキュリティ保護を可能にします。
前提条件
ワークスペース用のエージェントキーをコピーしてください。デプロイの設定を行う際に必要になります。
Service Extensions API、Compute Engine API、ネットワークサービス API が有効になっている Google Cloud プロジェクト
Service Extensions とバックエンドサービスを作成するための適切なIAM権限
デプロイインフラストラクチャにおける HTTP/2 および gRPC のサポート
Fastly WAF Service 拡張機能統合の仕組み
Google Cloud Load Balancer により呼び出された Service Extensions は、リクエストライフサイクル全体を通じて Envoy の外部処理プロトコルを用い、gRPC を介して Next-Gen WAF エージェントと通信します。デプロイシナリオのサンプルをご確認ください。
| 加工段階 | 説明 |
REQUEST_HEADERS | ロードバランサーは、HTTP/HTTPS リクエストヘッダーを検査のために Next-Gen WAF エージェントに送信します。エージェントは、有効なルールとしきい値設定に基づいてヘッダーを分析します。 |
REQUEST_BODY | ロードバランサーは、リクエスト本文のチャンクを Next-Gen WAF エージェントにストリーム送信します。エージェントはペイロードデータを検査し、悪意のあるリクエストをブロックしたり、疑わしいコンテンツにタグを付けたりすることができます。 |
RESPONSE_HEADERS | ロードバランサーは、さらなる分析のためにレスポンスヘッダーをNext-Gen WAFエージェントに送信します。 |
Next-Gen WAF エージェントのコールアウト・バックエンド・サービスを設定する
このセクションでは、ユーザーが管理するコールアウト・バックエンド・サービスの設定方法について説明します。
ロードバランサーとテストクライアントを準備する
拡張機能をサポートするアプリケーションロードバランサーを作成し、設定します。この例では、 VM インスタンスグループのバックエンドを持つリージョン内部アプリケーションロードバランサーを設定します。言及されたサンプル値を使用してください。
テスト用のクライアントVMを作成します。
コールアウト・バックエンド・サービスを作成・設定する
Next-Gen WAF エージェントを動かすコールアウト・バックエンド・サービス用の仮想マシン (VM) インスタンスを作成します。
REGION=us-west2ZONE=us-west2-agcloud compute instances create callouts-vm \--zone=$ZONE \--network=lb-network \--subnet=backend-subnet \--machine-type=e2-medium \--image-family=cos-stable \--image-project=cos-cloud \--tags=allow-ssh,load-balanced-backend \--metadata-from-file=startup-script=startup-script-tls.shstartup-script-tls.shという名前の起動スクリプトを作成します。以下の例はスクリプトの一般的な構造を示しています。プレースホルダーの値はご自身の設定に置き換えてください。重要: gRPC サーバーが TLS を使用するように設定されていることを確認してください。TLS を使用しない場合、拡張サーバーへの接続は失敗します。
cat >startup-script-tls.sh <<EOF#!/bin/bash# Create certificate directorymkdir -p /etc/ssl/certs/sigsci# Generate self-signed certificates for the gRPC serviceopenssl req -x509 -newkey rsa:4096 \-keyout /etc/ssl/certs/sigsci/key.pem \-out /etc/ssl/certs/sigsci/cert.pem \-days 365 -nodes \-subj "/C=US/ST=CA/L=SF/O=Fastly/CN=ext11.com"# Set proper permissions for the sigsci user inside the containerchmod 644 /etc/ssl/certs/sigsci/key.pemchmod 644 /etc/ssl/certs/sigsci/cert.pem# Start Signal Sciences agent with TLS configurationdocker run -d \--name sigsci-agent \--restart unless-stopped \-p 443:443 \-v /etc/ssl/certs/sigsci:/etc/ssl/certs/sigsci:ro \-e SIGSCI_ACCESSKEYID=<YOUR_ACCESS_KEY_ID> \-e SIGSCI_SECRETACCESSKEY=<YOUR_SECRET_ACCESS_KEY> \-e SIGSCI_SERVER_FLAVOR=GCP \-e SIGSCI_ENVOY_GRPC_ADDRESS=0.0.0.0:443 \-e SIGSCI_ENVOY_EXTPROC_ENABLED=true \-e SIGSCI_ENVOY_GRPC_CERT=/etc/ssl/certs/sigsci/cert.pem \-e SIGSCI_ENVOY_GRPC_KEY=/etc/ssl/certs/sigsci/key.pem \signalsciences/sigsci-agent:latest# Log startup completionecho "Signal Sciences agent with TLS started at $(date)" >> /var/log/startup.logEOF管理されていないインスタンスグループに VM を追加し、コールアウト・バックエンド・サービスを作成し、以下のサンプルスクリプトで示すようにバックエンドを追加します。各コマンドの詳細な説明については、Google Cloudのドキュメントを参照してください。
REGION=us-west2ZONE=us-west2-a
gcloud compute instances create callouts-vm \ --zone=$ZONE \ --network=lb-network \ --subnet=backend-subnet \ --machine-type=e2-medium \ --image-family=cos-stable \ --image-project=cos-cloud \ --tags=allow-ssh,load-balanced-backend \ --metadata-from-file=startup-script=startup-script-tls.sh
##### Add the VM to an unmanaged instance group
# add the VM to an unmanaged instance groupgcloud compute instance-groups unmanaged create callouts-ig \ --zone=$ZONE# set port for instance groupgcloud compute instance-groups unmanaged set-named-ports callouts-ig \ --named-ports=http:80,grpc:443 \ --zone=$ZONE# add the new VM to the unmanaged instance groupgcloud compute instance-groups unmanaged add-instances callouts-ig \ --zone=$ZONE \ --instances=callouts-vm
####### create a callout backend service and add a backend# Create a basic HTTP health check for the instance# health check protocol of agent needs to be: Protocol gRPC with TLSgcloud compute health-checks create grpc-with-tls callouts-hc \ --region=$REGION \ --port=443# Create a callout backend service that uses the HTTP/2 protocolgcloud compute backend-services create l7-ilb-callout-service \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP2 \ --port-name=grpc \ --health-checks=callouts-hc \ --health-checks-region=$REGION \ --region=$REGION
# Add the instance group with the extension server as a backend to the backend service. The instance group runs the ext_proc service.gcloud compute backend-services add-backend l7-ilb-callout-service \ --balancing-mode=UTILIZATION \ --instance-group=callouts-ig \ --instance-group-zone=$ZONE \ --region=$REGIONService Extension の設定ファイルを作成する
traffic.yamlという名前のトラフィック拡張機能の設定ファイルを作成します。以下の例はスクリプトの一般的な構造を示しています。使用している拡張機能の種類に基づいて設定を変更してください。name: traffic-extforwardingRules:- https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-west2/forwardingRules/l7-ilb-forwarding-ruleloadBalancingScheme: INTERNAL_MANAGEDextensionChains:- name: "chain1"matchCondition:celExpression: 'request.path.startsWith("/")'extensions:- name: 'ext11'authority: ext11.comservice: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-west2/backendServices/l7-ilb-callout-servicefailOpen: truetimeout: 0.1smetadata:"key": "value""fr": "forwarding_rule_id"supportedEvents:- REQUEST_HEADERS- REQUEST_BODY- RESPONSE_HEADERSトラフィック拡張機能をインポートします。
gcloud service-extensions lb-traffic-extensions import traffic-ext \--source=traffic.yaml \--location=$REGIONService Extension が有効になっていることを確認します。
gcloud service-extensions lb-route-extensions describe traffic-ext \--location=$REGIONService Extension は、設定で指定された
celExpression: 'request.path.startsWith("/")'転送ルールに一致するリクエストに自動的に適用されます。
モニタリングとトラブルシューティング
デバッグを有効にして、Next-Gen WAF エージェントのログを確認する
コールアウトバックエンドサービスに以下の環境変数を追加してください。
-e SIGSCI_DEBUG_LOG_VERBOSITY=3 \環境変数を
startup-script-tls.shに追加してください。既存のVMを削除してください。
gcloud compute instances delete callouts-vm --zone=$ZONEVMを再作成します。
管理されていないインスタンスグループに VM を戻します。
gcloud compute instance-groups unmanaged add-instances callouts-ig --zone=$ZONE --instances=callouts-vmVM に SSH を接続します。
gcloud compute ssh callouts-vm --zone=$ZONEDockerのログを表示します。
docker logs sigsci-agent -f一般的なトラブルシューティング手順
Next-Gen WAF エージェントのヘルスステータスを確認します。
callouts-vmインスタンスが健全であり、ロードバランサーのヘルスチェックによってアクセス可能であることを確認します。gcloud compute backend-services get-health l7-ilb-callout-service --region=$REGIONヘルスチェックのプロトコルを確認します。Next-Gen WAF エージェントは
GRPC_WITH_TLSを使用します。