このページでは、Google Cloud Armor セキュリティ ポリシーで使用できるオプション機能である POST 本文コンテンツの解析を構成する方法について説明します。
デフォルトでは、Google Cloud Armor は、事前構成された WAF ルールのシグネチャと照合して、POST 本文全体を均一な文字列として評価します(本文サイズの制限があります)。JSON などの代替エンコードを含むリクエストの場合、メッセージの構造コンポーネント(ユーザー指定ではない)が、事前構成された WAF 署名との照合をトリガーする可能性があります。ノイズを避け、誤検出のリスクを軽減するために、保護されたワークロードが以下を行うときは、サポートされている任意の Content-Type に対して代替解析が有効になるよう 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
ヘッダー値のリストを構成します。次の例では、セキュリティ ポリシー POLICY_NAME を更新して JSON 解析を有効にし、コンテンツ タイプ 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 を超える場合、Google Cloud Armor は、事前構成された WAF ルールで検査される最初の 8 KB のコンテンツに JSON 解析を適用します。
- JSON パーサーが結果を返さない場合は、URI 解析が試行される可能性があります。URI パーサーが name-value パラメータを返さないか、部分的な name-value パラメータのみを返す場合、文字列全体または部分的な文字列が検査のパラメータ名として使用されます。