Google Cloud Armor のセキュリティ ポリシーの問題をトラブルシューティングするには、こちらの手順を使用してください。
一般的な問題
セキュリティ ポリシーのデバッグ
特定のイベントによって事前構成済みのルールがトリガーされる原因に関する追加情報が必要な場合は、リクエスト ロギングの使用を参照し、詳細ログを有効にします。Cloud Logging によってログに詳細が記録されます。このログを使用して、ポリシーとルールを分析し、デバッグできます。
Cloud Armor セキュリティ ポリシーで拒否ルールを構成しているにもかかわらずトラフィックが許可される
この問題を解決する手順は次のとおりです。
Cloud Armor セキュリティ ポリシーがターゲットのバックエンド サービスに接続されていることを確認します。たとえば、次のコマンドを実行すると、バックエンド サービス
BACKENDに関連付けられているすべてのデータが表示されます。返される結果に、このバックエンド サービスに関連付けられている Cloud Armor セキュリティ ポリシーの名前が含まれています。gcloud compute backend-services describe BACKEND
HTTP(S) ログを確認して、トラフィックに一致したポリシーとルール、および関連するアクションを特定します。ログを表示するには、Cloud Logging を使用します。
許可されたリクエストのログの例を以下に示します。注意が必要なフィールドはハイライト表示されています。次のフィールドを確認して、トラフィックを拒否するように構成したルールと一致することを確認します。
configuredActionは、ルールで構成されたアクションと一致する必要があります。nameは、このバックエンド サービスに接続された Cloud Armor セキュリティ ポリシーの名前と一致する必要があります。outcomeはconfiguredActionと一致する必要があります。priorityは、ルールの優先度の数字と一致する必要があります。
httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/ responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: mydev-policy-log-test1 outcome: ACCEPT priority: 2147483647 statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE_NAME forwarding_rule_name: FORWARDING_RULE_NAME project_id: PROJECT_ID target_proxy_name: TARGET_HTTP_PROXY_NAME url_map_name: URL_MAP_NAME zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'ルールの階層を確認して、確実に正しいルールが一致するようにします。allow アクションを含むより優先度の高いルールがトラフィックと一致している可能性があります。Google Cloud CLI で
security-policiesのdescribeコマンドを使用して、Cloud Armor セキュリティ ポリシーの内容を表示します。たとえば、次の例では、より優先度の高い許可ルール(優先度 100)が IP アドレス 1.2.3.4 からのトラフィックに一致します。そのため、優先度の低い拒否ルール(優先度 200)はトリガーされず、このトラフィックはブロックされません。
gcloud compute security-policies describe POLICY_NAME
出力:
creationTimestamp: '2017-04-18T14:47:58.045-07:00 description: '' fingerprint: Yu5spBjdoC0= id: '2560355463394441057' kind: compute#securityPolicy name: POLICY_NAME rules: -action: allow description: allow high priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.4/32' preview: false priority: 100 -action: deny description: deny lower priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.0/24 preview: false priority: 200 -action: deny description: default rule kind: compute#securityPolicyRule match: srcIpRanges: -'*' preview: false priority: 2147483647 selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
事前構成済みのルールが偽陽性を返す
XSS と SQLi の検出は、HTTP リクエスト ヘッダーと他の L7 パラメータの静的なシグネチャ マッチングに基づいています。これらの正規表現パターンでは、偽陽性となる可能性が高くなります。XSS や SQLi の検出用の事前構成済みルールをプレビュー モードで使用した後、ログに偽陽性がないかを確認できます。
偽陽性が見つかった場合は、トラフィックの内容を OWASP CRS のルールと比較できます。ルールが無効または不適切な場合は、evaluatePreconfiguredWaf 式を使用してルールを無効にし、exclude ID list 引数でルールの ID を指定します。
ログを確認してすべての偽陽性を削除した後、プレビュー モードを無効にします。
事前構成済みのルールをプレビュー モードで追加するには:
プレビュー モードで事前構成済みの式セットとともにセキュリティ ポリシーを作成します。
gcloud compute security-policies rules create 1000 --security-policy POLICY_NAME --expression "evaluatePreconfiguredWaf('xss-stable')" --action deny-403 --previewHTTP(S) ログで
urlやcookieなどの HTTP リクエスト フィールドを確認します。この例では、requestUrlが OWASP CRS ルール ID 941180 に対して陽性となっています。httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/foo?document.cookie=1010" responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: POLICY_NAME outcome: ACCEPT priority: 2147483647 preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ] statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE forwarding_rule_name: mydev-forwarding-rule project_id: mydev-staging target_proxy_name: mydev-target-http-proxy url_map_name: mydev-url-map zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'Cloud Armor セキュリティ ポリシーのルールを更新して、OWASP CRS ルール ID 941180 を除外します。
gcloud compute security-policies rules update 1000 \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \ --action deny-403 \ --previewログをもう一度確認してから、プレビュー モードを無効にしてルールを実装します。
拒否されたシグネチャを持つクライアントがブロックまたは拒否されない
Cloud Armor と Cloud CDN を併用している場合、セキュリティ ポリシーが適用されるのは、動的コンテンツやキャッシュミスに関するリクエスト、または CDN オリジン サーバーが宛先であるその他のリクエストに限られます。そのリクエストが CDN オリジン サーバーに到達するのを防ぐ Cloud Armor セキュリティ ポリシーがダウンストリームにある場合でも、キャッシュ ヒットは処理されます。
名前付き IP アドレスリストに関する問題
このセクションでは、名前付き IP アドレスリストに関する問題の解決について説明します。
名前付き IP アドレスリストに含まれる IP アドレス
リスト内の IP アドレスは、Cloud Armor の名前付き IP アドレスリスト ガイドに記載されているプロバイダ ウェブサイトから取得された IP アドレスと常に一致します。リストについてご不明な点がある場合は、Cloud サポートチームにお問い合わせください。
Cloud Armor の名前付き IP アドレスリスト内の IP アドレスが最新でない
Cloud Armor は、IP アドレスリストを IP アドレスリスト プロバイダと毎日同期します。プロバイダのデータよりも数時間または 1 日遅れている古いデータが存在する可能性があります。ただし、古いデータが想定よりも長く残っていると思われる場合(1 週間を超える場合など)は、Cloud サポートチームにお問い合わせください。
名前付き IP アドレスリストを参照するセキュリティ ポリシーの作成が難しい
次のようなコマンドを使用して、名前付き IP アドレスリストを参照するセキュリティ ポリシーを作成できます。
gcloud compute security-policies rules create 750 \
--security-policy my \
--expression "evaluatePreconfiguredExpr('sourceiplist-example')" \
--action "allow"
コマンドが失敗した場合、次のようなエラーが表示されます。
ERROR: (gcloud.compute.security-policies.rules.create) Could not fetch resource:
- Invalid value for field 'resource.match.expr': '{ "expression": "evaluatePreconfiguredExpr(\u0027sourceiplist-example\u0027)"}'.
Error parsing Cloud Armor rule matcher expression: sourceiplist-example
is not a valid preconfigured expression set.
特定のプロバイダがサポートされていることと、IP アドレスリストの名前が正しく指定されていることを確認します。これを行うには、次の gcloud コマンドを使用して、現在の事前構成済みの式セットを一覧表示します。
gcloud compute security-policies list-preconfigured-expression-sets
名前付き IP アドレスの許可リストに事前構成済みのルールがあるにもかかわらず、トラフィックがブロックされている
名前付き IP アドレスリストにある IP アドレスからのトラフィックがブロックされている場合があります。
トラフィックが名前付き IP アドレスの許可リスト上の IP アドレスから発信されていることを確認します。
トラフィックをブロックする可能性のある他のセキュリティ ルールがあるかどうかを確認します。問題が解決しない場合は、Cloud サポートチームにお問い合わせください。
セキュリティ ポリシーが正しいバックエンド サービスに接続されていることを確認します。
gcloud compute backend-services describe BACKEND_SERVICE
セキュリティ ポリシーにあるルールを確認します。次に例を示します。
gcloud compute security-policies describe POLICY_NAME
コマンドから次のような情報が返されます。
--- … name: POLICY_NAME rules: -action: allow description: allow fastly ip addresses kind: compute#securityPolicyRule match: expr: expression: evaluatePreconfiguredExpr('sourceiplist-fastly') preview: false priority: 100 -action: deny(403) description: Default rule, higher priority overrides it kind: compute#securityPolicyRule match: config: srcIpRanges: -'*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 -action: deny(404) description: deny altostrat referer kind: compute#securityPolicyRule match: expr: expression: request.headers['Referer'].contains('altostrat') preview: false priority: 50 …上記のセキュリティ ポリシーには、3 つのルールがあります。デフォルトの拒否ルール、Fastly の IP アドレスの許可ルール、
altostratを含むリファラーの拒否ルールです。また、それぞれの優先度も表示されます。ログを調べて、トラフィックに一致するルールと、関連するアクションを決定します。ロギングの詳細については、ログ エクスプローラの使用をご覧ください。
ログの例を次に示します。
httpRequest: { referer: "http://www.altostrat.com/" remoteIp: "23.230.32.10" requestMethod: "HEAD" requestSize: "79" requestUrl: "http://www.example.com/" responseSize: "258" status: 404 userAgent: "Mozilla/5.0" } … jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" enforcedSecurityPolicy: { configuredAction: "DENY" name: "POLICY_NAME" outcome: "DENY" priority: 50 } statusDetails: "denied_by_security_policy" } …上記のログからのリクエストは
23.230.32.10からのもので、Fastly のパブリック IP アドレスリストから取得されます。ただし、リクエストは、優先度 50 の拒否ルールと一致しています。これをセキュリティ ポリシーの内容と比較すると、このルールはaltostratを含むリファラーの拒否ルールに対応しています。このリクエストにはhttp://www.altostrat.com/というリファラーがあるため、セキュリティ ルールの適用は正しく動作しています。
Security Command Center の検出に関する問題
このセクションでは、Security Command Center の検出結果に関する問題について説明します。
Cloud Armor カードが Security Command Center に表示されない
Security Command Center インターフェースで Cloud Armor の検出結果を有効にします。
Cloud Armor の検出結果が Security Command Center に表示されない
Cloud Armor の検出結果が Security Command Center に表示されない場合、バックエンド サービスへのトラフィックが検出結果を表示するための基準を満たしていない可能性があります。
バックエンドへのトラフィック量に関する質問については、