Cloud Armor セキュリティ ポリシーを管理する

このページでは、Google Cloud Armor セキュリティ ポリシーを管理し、アプリケーションへの受信トラフィックをフィルタリングする方法について説明します。Cloud Armor セキュリティ ポリシーは、分散型サービス拒否(DDoS)攻撃やその他のインターネット脅威からウェブ アプリケーションとサービスを保護するのに役立ちます。強固なセキュリティ ポスチャーを適用するには、セキュリティ ポリシーの作成、テスト、統合を通じて管理する必要があります。セキュリティ ポリシーを作成または表示するには、Cloud Armor セキュリティ ポリシーを作成して表示するをご覧ください。

セキュリティ ポリシーを管理する

以降のセクションでは、セキュリティ ポリシーの一覧表示、更新、削除、テストを行う方法について説明します。

セキュリティ ポリシーを一覧表示する

このセクションの手順に沿って、プロジェクト内の Cloud Armor セキュリティ ポリシーを一覧表示します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. ポリシーを表示するには、ポリシーのリストで、その特定のポリシーの名前をクリックします。

gcloud

gcloud compute security-policies list

次に例を示します。

gcloud compute security-policies list

出力:

NAME: my-policy
REGION: us-central1

詳細については、gcloud compute security-policies list をご覧ください。

セキュリティ ポリシーを更新する

このセクションの手順では、Cloud Armor のセキュリティ ポリシーを更新する方法について説明します。ポリシーの説明の変更、デフォルトのルールの変更、ターゲット バックエンド サービスの変更、ルールの追加を行うことができます。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. ポリシーのリストで、更新するポリシーの名前を見つけて、そのポリシーの [メニュー] をクリックします。

    • 説明またはデフォルトのルール アクションを更新するには、[編集] を選択して変更した後で [更新] をクリックします。
    • ルールを追加するには、[ルールを追加] を選択し、セキュリティ ポリシーにルールを追加するの手順に沿って操作します。
    • ターゲット バックエンド サービスを置き換えるには、[ターゲットへのポリシーの適用] を選択し、[ターゲットを追加] をクリックしてターゲットを選択してから、[追加] をクリックします。

gcloud

セキュリティ ポリシーを更新するには、次の Google Cloud CLI の手順を行います。

セキュリティ ポリシーの削除

このセクションでは、Cloud Armor セキュリティ ポリシーを削除する方法について説明します。ポリシーを削除する前に、ポリシーからすべてのバックエンド サービスを削除します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. 削除するポリシーの横にあるチェックボックスをオンにします。

  3. ページの右上で [削除] をクリックします。

gcloud

gcloud compute security-policies delete NAME を使用してください。NAME は、セキュリティ ポリシーの名前に置き換えます。

gcloud compute security-policies delete NAME

セキュリティ ポリシーをテストする

すべての新しいルールをプレビュー モードでデプロイしてから、リクエストログを調べて、ポリシーとルールが期待どおりに動作していることを確認することをおすすめします。

セキュリティ ポリシーのルールを管理する

以降のセクションでは、セキュリティ ポリシーのルールの一覧表示、追加、更新、削除を行う方法について説明します。

セキュリティ ポリシーのルールを一覧表示する

このセクションの手順に沿って、Cloud Armor セキュリティ ポリシーのルールを一覧表示します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. 特定のセキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページの [ルール] タブにポリシールールが表示されます。

gcloud

次の gcloud コマンドを使用して、セキュリティ ポリシー内のすべてのルールを一覧表示します。

gcloud compute security-policies describe NAME \

次の gcloud コマンドを使用して、指定されたリージョンの 1 つのセキュリティ ポリシー内のすべてのルールを、ポリシーの説明とともに一覧表示します。

gcloud compute security-policies describe NAME \
  --region REGION

次の gcloud コマンドを使用して、ルールの説明を取得します。

gcloud compute security-policies rules describe PRIORITY \
    --security-policy POLICY_NAME

たとえば、次のコマンドは、セキュリティ ポリシー my-policy の優先度が 1, 000 のルールを記述します。

gcloud compute security-policies rules describe 1000 \
    --security-policy my-policy

出力:

action: deny(403)
description: block traffic from 192.0.2.0/24 and 198.51.100.0/24
kind: compute#securityPolicyRule
match:
  srcIpRanges:
  - '192.0.2.0/24'
  - '198.51.100.0/24'
preview: false
priority: 1000

詳細については、gcloud compute security-policies describe をご覧ください。

セキュリティ ポリシーにルールを追加する

このセクションの手順に沿って、Cloud Armor セキュリティ ポリシーにルールを追加します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. セキュリティ ポリシーの名前をクリックして、[ポリシーの詳細] ページを開きます。

  3. ページ中央の [ルール] タブをクリックします。

  4. [ルールを追加] をクリックします。

  5. (省略可)ルールの説明を入力します。

  6. モードを選択します。

    • 基本モード: IP アドレスまたは IP 範囲に基づいて、トラフィックを許可または拒否します。
    • 詳細モード: ルール式に基づいてトラフィックを許可または拒否します。
  7. [一致] フィールドで、ルールが適用される条件を指定します。

    • 基本モード: ルールで照合する IP アドレス範囲の数を 1 ~ 10 の間で入力します。追加できる IP アドレス範囲は 10 個までです。上限については、Cloud Armor の割り当てと上限をご覧ください。

    • 詳細モード:

    • 次の式は、User-Agent ヘッダーに文字列 example を含む IP アドレス 1.2.3.4 からのリクエストと一致します。

        inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
      
    • 次の式は、特定の値を含む Cookie を持つリクエストと一致します。

          has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
        

    • 次の式は、リージョン AU からのリクエストと一致します。

          origin.region_code == 'AU'
        

    • 次の式は、指定された IP 範囲に存在しないリージョン AU からのリクエストを照合します。

          origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
        

    • 次の式は、URI が正規表現に一致する場合、リクエストを照合します。

          request.path.matches('/example_path/')
        

    • 次の式は、user-id ヘッダーに Base64 でエンコードされた値が含まれており、その値をデコードすると特定の文字列が含まれている場合に、リクエストを照合します。

          has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
        

    • 事前構成された式セットを使用する次の式は、SQLi 攻撃を照合します。

          evaluatePreconfiguredWaf('sqli-stable')
        

  8. [アクション] リストで、[許可] または [拒否] を選択します。

  9. 拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。

  10. ルールのプレビュー モードを有効にするには、[有効にする] を選択します。

  11. [優先度] フィールドに正の整数を入力します。

  12. [追加] をクリックします。

gcloud

gcloud compute security-policies rules create PRIORITY コマンドを使用します。PRIORITY は、ポリシー内のルールの優先度に置き換えます。

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME \
    --description DESCRIPTION \
    --src-ip-ranges IP_RANGES | --expression EXPRESSION \
    --action=[ allow | deny-403 | deny-404 | deny-502 ] \
    --preview

たとえば、次のコマンドは、優先度 1000 のルールを追加して、IP アドレス範囲 192.0.2.0/24 と 198.51.100.0/24 からのトラフィックをブロックします。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
    --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
    --action "deny-403"

条件を指定するには、--expression フラグを使用します。次のコマンドは、User-Agent ヘッダーに文字列 example を含む IP アドレス 1.2.3.4 からのトラフィックを許可するルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \
    --action allow \
    --description "Block User-Agent 'example'"

次のコマンドは、リクエストの Cookie に特定の値が含まれている場合に、リクエストをブロックするルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')" \
    --action deny-403 \
    --description "Cookie Block"

次のコマンドは、リージョン AU からのリクエストをブロックするルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "origin.region_code == 'AU'" \
    --action deny-403 \
    --description "AU block"

次のコマンドは、指定した IP 範囲にないリージョン AU からのリクエストをブロックするルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')" \
    --action deny-403 \
    --description "country and IP block"

次のコマンドは、正規表現に一致する URI を含むリクエストをブロックするルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "request.path.matches('/example_path/')" \
    --action deny-502 \
    --description "regex block"

次のコマンドは、Base64 デコードされた user-id ヘッダーの値に特定の値が含まれている場合に、リクエストをブロックするルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
    --action deny-403 \
    --description "country and IP block"

次のコマンドは、SQLi 攻撃を緩和する目的で設定された事前構成済みの式を使用するルールを追加します。

gcloud compute security-policies rules create 1000 \
    --security-policy my-policy \
    --expression "evaluatePreconfiguredWaf('sqli-stable')" \
    --action deny-403

セキュリティ ポリシー内の単一のルールを更新する

このセクションでは、Cloud Armor セキュリティ ポリシーの単一のルールを更新する方法について説明します。複数のルールをアトミックに更新するには、セキュリティ ポリシーで複数のルールをアトミックに更新するをご覧ください。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. セキュリティ ポリシーの名前をクリックして、[ポリシーの詳細] ページを開きます。

  3. ページ中央の [ルール] タブをクリックします。

  4. 更新するルールの横にある [編集] をクリックします。[ルールの編集] ページが表示されます。

  5. 変更を加え、[更新] をクリックします。

gcloud

ルールを更新するには、次のコマンドを使用します。一度に更新できるセキュリティ ポリシーは 1 つだけです。

gcloud compute security-policies rules update PRIORITY [ \
    --security-policy POLICY_NAME  \
    --description DESCRIPTION  \
    --src-ip-ranges IP_RANGES  | --expression EXPRESSION \
    --action=[ allow | deny-403 | deny-404 | deny-502 ]  \
    --preview
  ]
  

たとえば、次のコマンドは、IP アドレス範囲 192.0.2.0/24 からのトラフィックを許可する優先度 1111 のルールを更新します。

gcloud compute security-policies rules update 1111 \
    --security-policy my-policy \
    --description "allow traffic from 192.0.2.0/24" \
    --src-ip-ranges "192.0.2.0/24" \
    --action "allow"

上記のコマンドの詳細については、gcloud compute security-policies rules update をご覧ください。

ルールの優先度を更新するには、REST API を使用します。securityPolicies.patchRule をご覧ください。

一致条件作成ツールを使用する

一致条件作成ツールは、 Cloud de Confiance コンソールのビジュアル インターフェースです。これにより、Common Expression Language(CEL)コードを記述せずに複雑な Cloud Armor ルール式を作成できます。コードを記述する代わりに、ビルダーの構造化された UI を使用して条件とグループ ロジックを組み合わせることができます。これにより、構文エラーを回避し、ルール構造をより適切に可視化できます。ビルダーは、フラット リストと 5 レベルまでのネストされたロジックをサポートしています。このツールは、マルチクラウド バックエンドまたはハイブリッド デプロイを保護するルールを構成するときに使用します。この場合、トラフィックをルーティングする前に特定のリクエスト属性を検査する必要がある場合があります。

一致条件作成ツールの機能

一致条件作成ツールには次の機能があります。

  • ロジックとネスト: AND 演算子と OR 演算子を使用して複数の条件を組み合わせます。ビルダーは、最大 5 つの式をグループ化してネストすることをサポートしています。
  • 文字列変換: 文字列ベースの属性(request.pathrequest.headers など)の場合、評価前に変換を適用してデータを正規化します。サポートされている変換は次のとおりです。
    • 小文字と大文字
    • Base64 デコード
    • URL デコードと URL デコード(Unicode)
    • UTF-8 から Unicode への変換
  • 双方向解析: 視覚的な一致条件ビルダーと未加工テキストの一致条件エディタを切り替えます。UI は、未加工の CEL コードをビジュアル ブロックに自動的に解析します。
  • 関数サポート: ビルダーは、事前構成された WAF ルール、アドレス グループ、Threat Intelligence などの関数ベースの式用の UI コントロールを提供します。

制限事項

一致条件作成ツールは、高度なルールを作成するためのデフォルトのインターフェースです。式にサポートされていないロジック(不明なマクロなど)が含まれている場合、ビルダーは無効になります。このような場合は、[一致条件エディタ] の未加工のテキストを使用してルールを編集します。

また、ビルダーで使用できる特定の式は、プロジェクトの Google Cloud Armor Enterprise ティアとセキュリティ ポリシーのタイプによって異なります。

セキュリティ ポリシーの複数のルールをアトミックに更新する

アトミック更新機能を使用すると、1 回の更新で複数のルールに変更を適用できます。単一ルールの更新では、古いルールと新しいルールが短期間重複する可能性があるため、エラーなどの意図しない動作が発生することがあります。

複数のルールをアトミックに更新するには、現在のセキュリティ ポリシーを JSON ファイルまたは YAML ファイルにエクスポートして、ファイルを変更します。変更したファイルを使用してセキュリティ ポリシーを作成し、バックエンド サービスのセキュリティ ポリシーを切り替えます。

gcloud

  1. 次の例に示すように、更新するポリシーをエクスポートします。

    gcloud compute security-policies export my-policy \
        --file-name my-file \
        --file-format yaml
    

    エクスポートされたポリシーは、たとえば次の例のようになります。

        description: my description
        fingerprint: PWfLGDWQDLY=
        id: '123'
        name: my-policy
        rules:
        - action: deny(404)
          description: my-rule-1
          match:
            expr:
              expression: evaluatePreconfiguredWaf('xss-stable')
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 1
        - action: allow
          description: my-rule-2
          match:
            config:
              srcIpRanges:
              - '1.2.3.4'
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 2
        - action: deny
          description: default rule
          kind: compute#securityPolicyRule
          match:
            config:
              srcIpRanges:
              - '*'
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 2147483647
        selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
    
  2. テキスト エディタを使用してポリシーを変更します。たとえば、既存のルールの優先度を変更したり、ルールを追加したりできます。

        description: my description
        fingerprint: PWfLGDWQDLY=
        id: '123'
        name: my-policy
        rules:
        - action: deny(404)
          description: my-rule-1
          match:
            expr:
              expression: evaluatePreconfiguredWaf('xss-stable')
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 1
        - action: allow
          description: my-new-rule
          match:
            config:
              srcIpRanges:
              - '1.2.3.1'
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 10
        - action: allow
          description: my-rule-2
          match:
            config:
              srcIpRanges:
              - '1.2.3.4'
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 11
        - action: deny
          description: default rule
          kind: compute#securityPolicyRule
          match:
            config:
              srcIpRanges:
              - '*'
            versionedExpr: SRC_IPS_V1
          preview: false
          priority: 2147483647
        selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
    
  3. 次の例に示すように、新しい Cloud Armor セキュリティ ポリシーを作成し、変更したファイルの名前と形式を指定します。

    gcloud compute security-policies create new-policy \
        --file-name modified-policy \
        --file-format yaml
    
  4. 次の例に示すように、関連するバックエンド サービスから古いセキュリティ ポリシーを削除します。

    gcloud compute backend-services update my-backend \
        --security-policy ""
    
  5. 次の例に示すように、新しいセキュリティ ポリシーをバックエンド サービスに追加します。

    gcloud compute backend-services update my-backend \
        --security-policy new-policy
    
  6. 古いポリシーが使用されていない場合は、ポリシーを削除します。

    gcloud compute security-policies delete my-policy
    

セキュリティ ポリシーからルールを削除する

このセクションの手順に沿って、Cloud Armor セキュリティ ポリシーからルールを削除します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. セキュリティ ポリシーの名前をクリックして、[ポリシーの詳細] ページを開きます。

  3. ページ中央の [ルール] タブで、削除するルールの横にあるチェックボックスをオンにします。

  4. [削除] をクリックします。

gcloud

ルールを削除するには、次のコマンドを使用します。一度に変更できるセキュリティ ポリシーは 1 つだけですが、一度に複数のルールを削除できます。

gcloud compute security-policies rules delete PRIORITY [...] [
    --security-policy POLICY_NAME \
  ]

次に例を示します。

gcloud compute security-policies rules delete 1000 \
    --security-policy my-policy

セキュリティ ポリシーの接続と削除

以降のセクションでは、セキュリティ ポリシーの関連付けと削除の方法について説明します。

セキュリティ ポリシーをバックエンド サービスに接続する

このセクションの手順に沿って、Cloud Armor セキュリティ ポリシーをバックエンド サービスに接続します。セキュリティ ポリシーは複数のバックエンド サービスに接続できますが、1 つのバックエンド サービスに接続できるセキュリティ ポリシーは種類ごとに 1 つだけです。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. セキュリティ ポリシーの名前をクリックして、[ポリシーの詳細] ページを開きます。

  3. ページ中央の [ターゲット] タブをクリックします。

  4. [新しいターゲットにポリシーを適用] をクリックします。

  5. [ターゲットを追加] をクリックします。

  6. [ターゲット] リストでターゲットを選択し、[追加] をクリックします。

gcloud

バックエンド セキュリティ ポリシーをバックエンド サービスに接続する場合は、gcloud compute backend-services コマンドと --security-policy フラグを使用します。

gcloud compute backend-services update my-backend \
    --security-policy my-policy

エッジ セキュリティ ポリシーをバックエンド サービスに接続する場合は、gcloud compute backend-services コマンドと --edge-security-policy フラグを使用します。

gcloud compute backend-services update my-backend \
    --edge-security-policy my-policy

バックエンド サービスからセキュリティ ポリシーを削除する

このセクションの手順に沿って、Cloud Armor セキュリティ ポリシーをバックエンド サービスから削除します。

コンソール

  1. Cloud de Confiance コンソールで、[Cloud Armor ポリシー] ページに移動します。

    [Cloud Armor ポリシー] に移動

  2. セキュリティ ポリシーの名前をクリックして、[ポリシーの詳細] ページを開きます。

  3. ページ中央の [ターゲット] タブをクリックします。

  4. ポリシーを削除する対象のバックエンド サービスを選択します。

  5. [削除] をクリックします。

  6. [ターゲットを削除] メッセージで、[削除] をクリックします。

gcloud

バックエンド セキュリティ ポリシーを削除する場合は、gcloud compute backend-services コマンドと --security-policy フラグを使用します。

gcloud compute backend-services update my-backend \
    --security-policy ""

エッジ セキュリティ ポリシーを削除する場合は、gcloud compute backend-services コマンドと --edge-security-policy フラグを使用します。

gcloud compute backend-services update my-backend \
    --edge-security-policy ""