以降の手順では、アプリケーションを攻撃から保護するために Cloud Armor の事前構成されたウェブ アプリケーション ファイアウォール(WAF)ルールを設定して調整します。事前構成済みの WAF ルールの詳細については、概要をご覧ください。
事前構成済みの WAF ルールを設定する
このセクションでは、 Trusted Cloud コンソールにコピーしてユースケースに合わせてカスタマイズできる、事前構成済みの WAF ルールのテンプレートを紹介します。それぞれの Google Cloud CLI コマンド例で、名前が POLICY_NAME
で優先度が PRIORITY
のセキュリティ ポリシーを構成します。
最初の例では、ルール名が RULE_NAME
で感度レベルが SENSITIVITY
のルールを設定します。これにより、感度が SENSITIVITY
以下のすべてのシグネチャが有効になります。ルールの感度の詳細については、感度レベルを選択するをご覧ください。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前RULE_NAME
: 設定する WAF ルールの名前SENSITIVITY
: WAF ルールの感度レベル
2 つ目の例は 1 つ目と似ていますが、ルールで SIGNATURE_1
と SIGNATURE_2
のシグネチャを無効にします。つまり、この WAF ルールの評価時にこの 2 つのシグネチャは評価されません。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前RULE_NAME
: 設定する WAF ルールの名前SENSITIVITY
: WAF ルールの感度レベルSIGNATURE_1
: 無効にする WAF シグネチャの名前SIGNATURE_2
: 無効にする WAF シグネチャの名前
3 つ目の例は 2 つ目の例と似ていますが、2 つのシグネチャを無効にするのとは逆に、ルールで 2 つのシグネチャを有効にします。ルールでシグネチャを有効にできるのは、感度レベルを 0
に設定した場合のみです。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前RULE_NAME
: 設定する WAF ルールの名前SIGNATURE_1
: 無効にする WAF シグネチャの名前SIGNATURE_2
: 無効にする WAF シグネチャの名前
これまでの例では、ルールごとに 1 つの式のみを使用しています。論理 OR(||
)論理演算子を使用すれば式を組み合わせることができますが、式の最大サイズを超えないようにするためのベスト プラクティスとして、ルールごとに 1 つの式のみを使用することをおすすめします。
事前構成済みの WAF ルールの検査上限を更新する
Cloud Armor の事前構成済みの WAF ルールでは、リクエスト本文の最初の最大 64 KB(8 KB、16 KB、32 KB、48 KB、64 KB のいずれか)のみを検査できます。事前構成済みの WAF ルールにこれらの検査上限のいずれかを使用するように、セキュリティ ポリシーを手動で構成できます。
次のコマンドは、--request-body-inspection-size
フラグを使用して、POLICY_NAME
ポリシーで使用可能なすべての事前構成済みの WAF ルールの検査上限を 8 KB に設定します。事前構成済みの WAF ルールの検査上限の詳細については、POST および PATCH 本文の検査における制限をご覧ください。
gcloud compute security-policies update POLICY_NAME \ --request-body-inspection-size = 8 kB
POLICY_NAME
は、設定するセキュリティ ポリシーの名前に置き換えます。
同様に、--request-body-inspection-size
フラグを使用して、POLICY_NAME
ポリシーで使用可能なすべての事前構成済みの WAF ルールの検査上限を 16 KB、32 KB、48 KB、64 KB のいずれかに設定できます。
構成済みの検査上限を超えるリクエスト本文のリスクを軽減する
Cloud Armor セキュリティ ポリシー内の事前構成済みの WAF ルールが評価されるとき、リクエスト本文の最初の最大 64 KB(8 KB、16 KB、32 KB、48 KB、64 KB のいずれか)について、WAF ルールに対するシグネチャの一致が検査されます。
検査されていないコンテンツがバックエンドに到達しないようにするルールをセキュリティ ポリシーに作成すると、サイズの大きいリクエストのリスクを軽減できます。たとえば、リクエスト本文のサイズが構成済みの検査上限の 8 KB(8,192 バイト)を超えるトラフィックを拒否するルールを作成します。次のコマンドは、このルールを作成する方法を示しています。
gcloud compute security-policies rules create 10 \ --security-policy my-policy \ --expression "int(request.headers['content-length']) > 8192" \ --action deny-403 \ --description "Block requests greater than 8 kB"
同様に、リクエスト本文のサイズが構成済みの検査上限(16 KB、32 KB、48 KB、64 KB のいずれか)を超えるトラフィックを拒否するルールを作成できます。たとえば、次のコマンドは、検査上限が 64 KB(65,536 バイト)の場合のルールを作成する方法を示しています。
gcloud compute security-policies rules create 10 \ --security-policy my-policy \ --expression "int(request.headers['content-length']) > 65536" \ --action deny-403 \ --description "Block requests greater than 64 kB"
例
このセクションの例では、感度レベルやシグネチャ例外など、事前構成済み WAF ルールの作成と調整に関する重要な側面を説明します。すべての gcloud CLI コマンド例で、POLICY_NAME
という名前のセキュリティ ポリシーを優先度 PRIORITY
で作成します。
特定の感度レベルでルールを作成する
この例では、WAF ルール sqli-v33-stable
内にある感度レベルが 4 未満のすべてのシグネチャを使用します。そのため、感度レベル 3 でルールを作成して、感度レベルが 3 以下のすべてのシグネチャを含めます。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 3})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 3})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前
1 つ以上のシグネチャを無効にするルールを作成する
この例では、WAF ルール xss-v33-stable
内にある感度レベル 1 と 2 のシグネチャをほぼすべて使用しますが、JavaScript グローバル変数の有無をチェックするシグネチャ owasp-crs-v030301-id941370-xss
は除外します。そのため、感度レベル 2 でルールを作成し、引数 opt_out_rule_ids
を使用して owasp-crs-v030301-id941370-xss
シグネチャを無効にします。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前
複数のシグネチャをルールから除外するには、引数 opt_out_rule_ids
でシグネチャのカンマ区切りのリストを指定します。次に例を示します。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前
1 つ以上のシグネチャを有効にするルールを作成する
この例では、WAF ルール xss-v33-stable
内にあるシグネチャ owasp-crs-v030001-id941150-xss
のみを使用します。これは、許可されていない HTML 属性の有無をチェックする感度レベル 2 のシグネチャです。そのため、感度レベル 0 でルールを作成し、opt_in_rule_ids
引数を使用して owasp-crs-v030001-id941150-xss
シグネチャを有効にします。ルールでシグネチャを有効にできるのは、感度レベルを 0
に設定した場合のみです。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前
ルールに複数のシグネチャを含める場合は、引数 opt_in_rule_ids
でシグネチャのカンマ区切りのリストを指定します。次に例を示します。
コンソール
[詳細モード] を選択し、[一致] フィールドで次の式を使用します。
evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})" \ --action deny-403
次のように置き換えます。
PRIORITY
: セキュリティ ポリシーの優先度POLICY_NAME
: 設定するセキュリティ ポリシーの名前
次のステップ
- WAF ルールの調整の詳細については、Cloud Armor の事前構成 WAF ルールを調整するをご覧ください。