このページでは、Google Cloud Armor のセキュリティ ポリシーで使用できるオプションの機能である POST 本文のコンテンツ解析を構成する方法について説明します。
Google Cloud Armor では、デフォルトで POST 本文のコンテンツ全体が均一な文字列として評価され(本文サイズの制限が適用されます)、事前構成済み WAF ルールのシグネチャと照合されます。JSON などの代替エンコードを含むリクエストは、メッセージの構造コンポーネント(ユーザー指定のコンポーネントではない)が原因で、事前構成済み WAF ルールのシグネチャと一致したと判定される可能性があります。ノイズを避けて偽陽性のリスクを減らすため、保護対象のワークロードが次の条件を満たす場合は、対応するコンテンツ タイプで代替解析が有効になるように Google Cloud Armor を構成することをおすすめします。
- REST API を提供している
- GraphQL を使用している
- JSON エンコードされたコンテンツが含まれるリクエストを受信する
POST リクエストの JSON 本文の解析は、セキュリティ ポリシーごとに有効または無効にできます。Content-Type
ヘッダーが application/json
に設定されている場合は、Google Cloud CLI で --json-parsing
フラグを使用します。
デフォルトではこのオプションは無効になっています。フラグの構文は次のとおりです。
--json-parsing=[STANDARD | STANDARD_WITH_GRAPHQL | DISABLED]
このフラグは gcloud compute security-policies update
でのみ使用できます。このオプションを使用して新しいセキュリティ ポリシーを作成するには、ファイル内でセキュリティ ポリシーを作成してからそのファイルをインポートする必要があります。詳細については、セキュリティ ポリシーのインポートをご覧ください。
JSON 解析を使用する
次の例では、代替解析を適用するカスタムの Content-Type
ヘッダー値のリストを構成します。この例は、JSON 解析が有効になるようにセキュリティ ポリシー POLICY_NAME を更新し、application/json
、application/vnd.api+json
、application/vnd.collection+json
、application/vnd.hyper+json
のコンテンツ タイプを指定します。
gcloud compute security-policies update POLICY_NAME \ --json-parsing STANDARD \ --json-custom-content-types "application/json,application/vnd.api+json,application/vnd.collection+json,application/vnd.hyper+json"
GraphQL 解析を使用する
GraphQL 解析を構成するには、次の例のようにセキュリティ ポリシーを更新し、--json-parsing
フラグを STANDARD_WITH_GRAPHQL
に設定します。
gcloud compute security-policies update POLICY_NAME \ --json-parsing STANDARD_WITH_GRAPHQL
ロギング
Google Cloud Armor のセキュリティ ポリシーに対して評価された各 HTTP(S) リクエストは、Cloud Logging によってログに記録されます。ログには、適用されたセキュリティ ポリシーの名前、一致したルール、ルールが適用されたかどうかなどの詳細が記録されます。新しいバックエンド サービス リソースのリクエスト ロギングは、デフォルトで無効になっています。Google Cloud Armor リクエストを確実にログに記録するため、セキュリティ ポリシーで保護されているバックエンド サービスごとに HTTP(S) ロギングを有効にする必要があります。詳細については、グローバル外部アプリケーション ロードバランサのロギングとモニタリングをご覧ください。
制限事項
JSON 解析を構成する際は、次の制限事項を考慮してください。
- POST 本文の検査は最初の 8 KB に制限されます。JSON コンテンツが 8 KB より大きい場合は、事前構成済み WAF ルールによって検査される最初の 8 KB のコンテンツに JSON 解析が適用されます。
- JSON パーサーが結果を返さない場合は、URI 解析が試行される可能性があります。URI パーサーが name-value パラメータを返さないか、部分的な name-value パラメータのみを返す場合、文字列全体または部分的な文字列が検査のパラメータ名として使用されます。