セキュリティ ポリシー名、一致ルールの優先度、関連するアクション、関連情報のリクエストごとの Google Cloud Armor ログは、外部 HTTP(S) ロードバランサ、外部 TCP プロキシ ロード ロードバランサ、外部 SSL プロキシ ロードバランサのロギングの一環として記録されます。新しいバックエンド サービスのロギングは、デフォルトでは無効になっているため、Google Cloud Armor の全ロギング情報を記録するには、ロギングを有効にする必要があります。
Google Cloud Armor ログは Cloud Load Balancing のログの一部であるため、Google Cloud Armor のログの生成には、ロードバランサに構成されたログ サンプリング レートが適用されます。ロードバランサのサンプリング レートを減らすと、Google Cloud Armor のリクエストログは、そのレートでサンプリングされます。
ロギングを使用すると、Google Cloud Armor セキュリティ ポリシーで評価されたすべてのリクエストと、結果またはアクションを確認できます。たとえば、拒否されたリクエストを表示するには、jsonPayload.enforcedSecurityPolicy.outcome="DENY"
や jsonPayload.statusDetails="denied_by_security_policy"
などのフィルタを使用します。
外部 HTTP(S) ロードバランサのロギングを有効にするには、外部 HTTP(S) ロードバランサのロギングとモニタリングをご覧ください。外部 TCP プロキシ ロードバランサと外部 SSL プロキシ ロードバランサの場合は、上述の外部 HTTP(S) ロードバランサのロギングとモニタリングに記載されている Google Cloud CLI コマンドを使用できます。Google Cloud コンソールを使用して外部 TCP プロキシ ロードバランサと外部 SSL プロキシ ロードバランサのロギングを有効にすることはできません。
また、さまざまなロギングレベルを設定して、セキュリティ ポリシーとルールが意図したとおりに機能しているかどうか評価することもできます。詳細については、詳細ログをご覧ください。
セキュリティ ポリシーのログエントリ
次に示すログ エクスプローラのログエントリは、Google Cloud Armor のセキュリティ ポリシーとルールのロギング用です。jsonPayload
でエントリの構造は次のとおりです。HTTP リクエストの詳細は、httpRequest
メッセージに表示されます。
statusDetails
(文字列): レスポンス コードを説明するテキスト。redirected_by_security_policy
: リクエストがリダイレクト ルールによってリダイレクトされました。GOOGLE_RECAPTCHA
またはEXTERNAL_302
のいずれかになります。denied_by_security_policy
: Google Cloud Armor セキュリティ ポリシーのために、リクエストがロードバランサによって拒否されました。body_denied_by_security_policy
: Google Cloud Armor セキュリティ ポリシーのために、リクエスト本文がロードバランサによって拒否されました。
enforcedSecurityPolicy
: 適用されたセキュリティ ポリシー ルール。name
(文字列): セキュリティ ポリシーの名前。priority
(数値): セキュリティ ポリシーの一致ルールの優先度。adaptiveProtection
: 自動的にデプロイされる Adaptive Protection ルールに関する情報(該当する場合)。autoDeployAlertId
: Adaptive Protection が検出したイベントのアラート ID。
configuredAction
(文字列): 一致ルールに構成したアクションの名前。例:ALLOW
、DENY
、GOOGLE_RECAPTCHA
、EXTERNAL_302
、THROTTLE
(スロットル ルールの場合)、RATE_BASED_BAN
(レートベースの禁止ルールの場合)rateLimitAction
: スロットル ルールまたはレートベースの禁止ルールが一致したときのレート制限アクションの情報。key
(文字列): レート制限のキー値(最大 32 バイト)。鍵タイプがALL
の場合、または鍵タイプがHTTP-HEADER
かHTTP-COOKIE
であり、指定したヘッダーまたは Cookie がリクエストに含まれていない場合、このフィールドは省略されます。outcome
(文字列): 有効な値は次のとおりです。"RATE_LIMIT_THRESHOLD_CONFORM"
- 構成されたレート制限のしきい値を下回る場合。"RATE_LIMIT_THRESHOLD_EXCEED"
- 構成されたレート制限のしきい値を超えた場合。"BAN_THRESHOLD_EXCEED"
- 構成された禁止しきい値を超えた場合。
outcome
(文字列): 構成されたアクションの実行結果(ACCEPT
、DENY
、REDIRECT
、EXEMPT
など)。preconfiguredExprIds
(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID。
previewSecurityPolicy
: リクエストがプレビュー用に構成されたルールに一致する場合に入力されます(プレビュー ルールが適用済みのルールよりも優先される場合のみ)。name
(文字列): セキュリティ ポリシーの名前priority
(数値): セキュリティ ポリシーの一致ルールの優先度。configuredAction
(文字列): 一致ルールに構成したアクションの名前。例:ALLOW
、DENY
、GOOGLE_RECAPTCHA
、EXTERNAL_302
、THROTTLE
(スロットル ルールの場合)、RATE_BASED_BAN
(レートベースの禁止ルールの場合)rateLimitAction
: スロットル ルールまたはレートベースの禁止ルールが一致したときのレート制限アクションの情報。key
(文字列): レート制限のキー値(最大 32 バイト)。鍵タイプがALL
の場合、または鍵タイプがHTTP-HEADER
かHTTP-COOKIE
であり、指定したヘッダーまたは Cookie がリクエストに含まれていない場合、このフィールドは省略されます。outcome
(文字列): 有効な値は次のとおりです。"RATE_LIMIT_THRESHOLD_CONFORM"
- 構成されたレート制限のしきい値を下回る場合。"RATE_LIMIT_THRESHOLD_EXCEED"
- 構成されたレート制限のしきい値を超えた場合。"BAN_THRESHOLD_EXCEED"
- 構成された禁止しきい値を超えた場合。
outcome
(文字列): 構成された実行結果。outcome
(文字列): 構成されたアクションの実行結果(ACCEPT
、DENY
、REDIRECT
、EXEMPT
など)。preconfiguredExprIds
(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID。
enforcedEdgeSecurityPolicy
(プレビュー): 適用されたエッジ セキュリティ ポリシー ルール。name
(文字列): セキュリティ ポリシーの名前。priority
(数値): セキュリティ ポリシーの一致ルールの優先度。configuredAction
(文字列): 一致ルールで構成したアクションの名前(ALLOW
、DENY
など)outcome
(文字列): 構成されたアクションの実行結果(ACCEPT
、DENY
など)
previewEdgeSecurityPolicy
(プレビュー): リクエストが、プレビュー用に構成されたエッジ セキュリティ ポリシー ルールに一致する場合に入力されます(プレビュー ルールが適用済みのルールよりも優先される場合のみ)。name
(文字列): セキュリティ ポリシーの名前。priority
(数値): セキュリティ ポリシーの一致ルールの優先度。configuredAction
(文字列): 一致ルールで構成したアクションの名前(ALLOW
、DENY
など)outcome
(文字列): 構成されたアクションの実行結果(ACCEPT
、DENY
など)
詳細ロギング
事前に構成された WAF ルールが特定のリクエストでトリガーされた理由がわからないことがあります。Google Cloud Armor のデフォルトのイベントログには、トリガーされたルールとサブ署名が含まれています。ただし、トラブルシューティング、ルールの検証、またはルールの調整を目的として、ルールをトリガーした受信リクエストの詳細を特定することが必要な場合があります。
--log-level
フラグを使用すると、ポリシーに記録される詳細レベルを変更できます。このフラグの値は NORMAL
または VERBOSE
のいずれかです。
--log-level=[NORMAL | VERBOSE]
次に例を示します。
gcloud compute security-policies update ca-policy-1 \ --log-level=VERBOSE
最初にポリシーを作成するとき、ポリシーを変更するとき、またはポリシーのトラブルシューティングを行うときに、詳細ログを有効にすることをおすすめします。
詳細ロギングが有効な場合に記録される値
詳細ロギングが有効になっている場合、Cloud Logging に送信されるロード バランシング リクエスト ログに追加情報が記録されます。詳細ロギングが有効になっている場合、リクエストに次の追加フィールドが含まれます。
matchedFieldType
(文字列): 一致を引き起こすフィールドのタイプです。ARG_NAMES
ARG_VALUES
BODY
- ログに
BODY
フィールドが含まれている場合、投稿の本文全体がルールに一致することを意味します。
- ログに
COOKIE_VALUES
COOKIE_NAMES
FILENAME
HEADER_VALUES
RAW_URI
REFERER
REQUEST_LINE
URI
USER_AGENT
HEADER_NAMES
ARGS_GET
X_FILENAME
ARG_NAME_COUNT
TRANSFER_ENCODING
REQUEST_METHOD
matchedFieldName
(文字列): Key-Value ペアの値の部分と一致すると、このフィールドに Key-Value が保存されます。それ以外の場合は空になります。matchedFieldValue
(文字列): フィールド内で照合する部分の接頭辞。最大 16 バイトです。matchedFieldLength
(整数): フィールドの合計長。matchedOffset
(整数): 一致の原因となるフィールド内の開始オフセット。matchedLength
(整数): 一致の長さ。
たとえば、SQL インジェクション WAF ルールが有効なプロジェクトにリクエストを送信できます。
curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz
ログ エクスプローラのエントリは次のようになります。
enforcedSecurityPolicy: { name: "user-staging-sec-policy" priority: 100 configuredAction: "DENY" outcome: "DENY preconfiguredExprIds: [ 0: "owasp-crs-v030001-id942140-sqli" ] matchedFieldType: "ARG_VALUES" matchedFieldName: "sql_table" matchedFieldValue: "pg_catalog" matchedFieldLength: 18 matchedOffset: 4 matchedLength: 10 }
詳細ログが有効な場合のプライバシーの維持
詳細ロギングを使用すると、Google Cloud Armor は、事前構成された特定の WAF ルールをトリガーする受信リクエストの要素の一部をログに記録します。これらのスニペットには、リクエスト ヘッダー、リクエスト パラメータ、POST 本文の要素などが含まれることがあります。リクエスト ヘッダーや本文の内容、WAF ルールがトリガーする内容によっては、スニペットに IP アドレスやその他の機密データが含まれる場合があります。
詳細ログを有効にすると、機密性のあるデータが Logging のログに記録される可能性があります。詳細ロギングは、ルールの作成と検証中、またはトラブルシューティングでのみ有効にすることをおすすめします。通常の処理では、詳細ログを無効にしておくことをおすすめします。
ログの表示
Google Cloud Armor セキュリティ ポリシーのログは、Google Cloud Console でのみ表示できます。
Console
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページのセキュリティ ポリシーの行で、ログを表示したいポリシーの [
メニュー] をクリックします。[ログを表示] を選択します。
bot 管理
Google Cloud Armor が reCAPTCHA Enterprise トークンをどのように評価するかを可視化するため、jsonPayload
には次の追加フィールドがあります。
securityPolicyRequestData
: セキュリティ ポリシーによって処理されるリクエストに関するデータ。最終的にどのルールに一致するかは関係ありません。recaptchaActionToken
: reCAPTCHA Enterprise アクション トークンに関連するデータ。score (float)
: reCAPTCHA Enterprise アクション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA Enterprise アクション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。詳細については、reCAPTCHA Enterprise の評価の適用をご覧ください。
recaptchaSessionToken
: reCAPTCHA Enterprise セッション トークンに関連するデータ。score (float)
: reCAPTCHA Enterprise セッション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA Enterprise セッション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。詳細については、reCAPTCHA Enterprise の評価の適用をご覧ください。
ログの例
以下に、リクエストをブロックするスロットル ルールのログ詳細の例を示します。
jsonPayload: { enforcedSecurityPolicy: { priority: 100 name: "sample-prod-policy" configuredAction: "THROTTLE" outcome: "DENY" rateLimitAction: { key:"sample-key" outcome:"RATE_LIMIT_THRESHOLD_EXCEED" } } @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" statusDetails: "denied_by_security_policy" } httpRequest: {8} resource: {2} timestamp: "2021-03-17T19:16:48.185763Z"
以下に、リクエストをブロックするレートベースの禁止ルールのログ詳細の例を示します。
jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" enforcedSecurityPolicy: { priority: 150 name: "sample-prod-policy" outcome: "DENY" configuredAction: "RATE_BASED_BAN" rateLimitAction: { key:"sample-key" outcome:"BAN_THRESHOLD_EXCEED" } } statusDetails: "denied_by_security_policy" } httpRequest: {8} resource: {2} timestamp: "2021-03-17T19:27:17.393244Z"
次のステップ
Google Cloud Armor に関する問題のトラブルシューティングについて学習する。