Google Cloud Armor のリクエストごとのログには、セキュリティ ポリシー名、一致ルールの優先度、関連するアクション、関連情報が含まれ、外部アプリケーション ロードバランサと外部プロキシ ネットワーク ロードバランサのロギングの一環として記録されます。新しいバックエンド サービスではロギングはデフォルトで無効になっているため、Cloud Armor の完全なロギング情報を記録するにはロギングを手動で有効にする必要があります。
Cloud Armor ログは、Cloud Load Balancing ログの一部です。つまり、Cloud Armor ログの生成には、ロードバランサに対して構成されたログ サンプリング レートが適用されます。ロードバランサのサンプリング レートを下げると、Cloud Armor のリクエストログのサンプリング レートも下がります。さらに、プロジェクト間のサービス参照を使用する場合、ログはロードバランサのフロントエンドと URL マップを含むホストまたはサービス プロジェクト内に生成されます。したがって、フロントエンド プロジェクトの管理者が、ログと指標を読み取るための権限をバックエンド プロジェクトの管理者に付与することをおすすめします。
ロギングを使用すると、Cloud Armor のセキュリティ ポリシーによって評価されたすべてのリクエストとその結果(優先度が最も高い一致ルールに基づいて行われたアクション)を確認できます。たとえば、拒否されたリクエストを表示するには、jsonPayload.enforcedSecurityPolicy.outcome="DENY" や jsonPayload.statusDetails="denied_by_security_policy" などのフィルタを使用します。
また、さまざまなロギングレベルを設定して、セキュリティ ポリシーとルールが意図したとおりに機能しているかどうか評価することもできます。詳細については、詳細ログをご覧ください。
セキュリティ ポリシーのログエントリ
次に示すログ エクスプローラのログエントリは、Cloud Armor のセキュリティ ポリシーとルールのロギング用です。次の構造のエントリが jsonPayload に含まれます。HTTP リクエストの詳細は、httpRequest メッセージに表示されます。
statusDetails: レスポンス コードを説明するテキスト。redirected_by_security_policy: リクエストがリダイレクト ルールによってリダイレクトされました。GOOGLE_RECAPTCHAまたはEXTERNAL_302のいずれかになります。denied_by_security_policy: Cloud Armor セキュリティ ポリシーの理由で、リクエストがロードバランサによって拒否されました。body_denied_by_security_policy: 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: レート制限のキー値(最大 36 バイト)。キータイプが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。threatIntelligence: Google Threat Intelligence から得られた、一致した IP アドレスリストに関する情報(該当する場合)。categories: 一致した IP アドレスリストの名前。
addressGroup: 一致したアドレス グループに関する情報(該当する場合)。names: 一致したアドレス グループの名前。
previewSecurityPolicy: リクエストがプレビュー用に構成されたルールと一致した場合に入力されます(プレビュー ルールの優先度が実際に適用されるルールより高い場合のみ)。name: セキュリティ ポリシーの名前priority: セキュリティ ポリシーの一致ルールの数値による優先度。configuredAction: 一致ルールで構成したアクションの名前 - 例:ALLOW、DENY、GOOGLE_RECAPTCHA、EXTERNAL_302、THROTTLE(スロットル ルールの場合)、RATE_BASED_BAN(レートベースの禁止ルールの場合)rateLimitAction: スロットル ルールまたはレートベースの禁止ルールが一致した際のレート制限アクションに関する情報。key: レート制限のキー値(最大 36 バイト)。キータイプが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。threatIntelligence: Threat Intelligence から得られた、一致した IP アドレスリストに関する情報(該当する場合)。categories: 一致した IP アドレスリストの名前。
addressGroup: 一致したアドレス グループに関する情報(該当する場合)。names: 一致したアドレス グループの名前。
enforcedEdgeSecurityPolicy: 適用されたエッジ セキュリティ ポリシー ルール。name: セキュリティ ポリシーの名前priority: セキュリティ ポリシーの一致ルールの優先度。configuredAction: 一致ルールで構成したアクションの名前(ALLOW、DENYなど)。outcome: 構成されたアクションの実行結果(ACCEPT、DENYなど)。
previewEdgeSecurityPolicy: リクエストがプレビュー用に構成されたエッジ セキュリティ ポリシー ルールと一致する場合に入力されます。previewEdgeSecurityPolicyログエントリは、プレビュー ルールが適用済みのルールよりも優先される場合にのみ存在します。name: セキュリティ ポリシーの名前priority: セキュリティ ポリシーの一致ルールの数値による優先度。configuredAction: 一致ルールで構成したアクションの名前(ALLOW、DENYなど)。outcome: 構成されたアクションの実行結果(ACCEPT、DENYなど)。
ログの表示
Cloud Armor セキュリティ ポリシーのログは、Google Cloud コンソールでのみ表示できます。
コンソール
Google Cloud コンソールで、[Cloud Armor ポリシー] に移動します。
[アクション] をクリックします。
[ログを表示] を選択します。
データロギングをリクエストする
Cloud Armor で使用する場合、jsonPayload には次の追加フィールドがあります。
securityPolicyRequestData: セキュリティ ポリシーによって処理中のリクエストに関するデータ。最終的にどのルールが一致するかは関係ありません。recaptchaActionToken: reCAPTCHA アクション トークンに関連するデータ。score: reCAPTCHA アクション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA アクション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。詳細については、reCAPTCHA 評価の適用をご覧ください。
recaptchaSessionToken: reCAPTCHA セッション トークンに関連するデータ。score: reCAPTCHA セッション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA セッション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。
tlsJa4Fingerprint: JA4 TTL / SSL フィンガープリント(クライアントがHTTPS、HTTP/2、HTTP/3のいずれかを使用して接続している場合)。フィンガープリントが利用可能で、リクエストを評価するセキュリティ ポリシーがある場合にのみ存在します(ポリシー内の式がリクエストと一致するかどうかは無関係です)。tlsJa3Fingerprint: JA3 TTL / SSL フィンガープリント(クライアントがHTTPS、HTTP/2、HTTP/3のいずれかを使用して接続している場合)。フィンガープリントが利用可能で、リクエストを評価するセキュリティ ポリシーがある場合にのみ存在します(ポリシー内の式がリクエストと一致するかどうかは無関係です)。
ログの例
以下に、リクエストをブロックするスロットル ルールのログ詳細の例を示します。
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"
次のステップ
- Cloud Armor に関する問題のトラブルシューティングについて学習する。