セキュリティ ポリシーの例

このページでは、さまざまなタイプのロードバランサ用のセキュリティ ポリシーの構成例について説明します。

外部アプリケーション ロードバランサ用のセキュリティ ポリシーを構成する

以下では、グローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサへのトラフィックを許可または拒否するルールを有効にするように Google Cloud Armor セキュリティ ポリシーを構成する手順について説明します。

  1. Google Cloud Armor セキュリティ ポリシーを作成します。
  2. IP アドレスのリスト、カスタム式、または事前に構成された式のセットに基づいて、セキュリティ ポリシーにルールを追加します。
  3. アクセスを制御するグローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサのバックエンド サービスにセキュリティ ポリシーを接続します。
  4. 必要に応じて、セキュリティ ポリシーを更新します。

次の例では、2 つの Google Cloud Armor セキュリティ ポリシーを作成し、そのポリシーを異なるバックエンド サービスに適用します。

2 つのセキュリティ ポリシーが異なるバックエンド サービスに適用されている例。
2 つのセキュリティ ポリシーが異なるバックエンド サービスに適用されている例(クリックして拡大)

この例における Google Cloud Armor セキュリティ ポリシーは、次のとおりです。

  • mobile-clients-policy は、games サービスの外部ユーザーに適用されます。
  • internal-users-policy は、組織の test-network チームに適用されます。

mobile-clients-policygames サービス(バックエンド サービスが games と呼ばれる)に適用し、internal-users-policy をテストチームの内部 test サービス(対応するバックエンド サービスが test-network と呼ばれる)に適用します。

バックエンド サービスのバックエンド インスタンスが複数のリージョンに存在する場合、サービスに関連付けられた Google Cloud Armor セキュリティ ポリシーがすべてのリージョンのインスタンスに適用されます。上記の例では、セキュリティ ポリシー mobile-clients-policyus-central のインスタンス 1、2、3、4 と us-east のインスタンス 5、6 に適用されます。

サンプルを作成する

前のセクションで説明したサンプルの構成を作成するには、以下の手順を使用します。

コンソール

以下の手順で外部ユーザー用のセキュリティ ポリシーを構成します。

  1. Google Cloud コンソールで、Google Cloud Armor ポリシーのページに移動します。

    Google Cloud Armor ポリシーに移動

  2. [ポリシーの作成] をクリックします。

  3. [名前] フィールドに「mobile-clients-policy」と入力します。

  4. [説明] フィールドに「Policy for external users」と入力します。

  5. [デフォルトのルール アクション] で [拒否] を選択します。

  6. [拒否ステータス] で [404(ファイル未検出)] を選択します。

  7. [次のステップ] をクリックします。

ルールを追加します。

  1. [ルールを追加] をクリックします。
  2. [説明] フィールドに「allow traffic from 192.0.2.0/24」と入力します。
  3. [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
  4. [一致] フィールドに「192.0.2.0/24」と入力します。
  5. [アクション] で [許可] を選択します。
  6. [優先度] に「1000」と入力します。
  7. [完了] をクリックします。
  8. [次のステップ] をクリックします。

ターゲットへのポリシーの適用:

  1. [ターゲットを追加] をクリックします。
  2. [ターゲット] リストで、ターゲットを選択します。
  3. [完了] をクリックします。
  4. [ポリシーを作成] をクリックします。

必要に応じて、Google Cloud Armor の適応型保護を有効にします。

  1. 適応型保護を有効にするには、[有効] チェックボックスをオンにします。

以下の手順で内部ユーザー用のポリシーを構成します。

  1. [ポリシーの作成] をクリックします。
  2. [名前] フィールドに「internal-users-policy」と入力します。
  3. [説明] フィールドに「Policy for internal test users」と入力します。
  4. [デフォルトのルール アクション] で [拒否] を選択します。
  5. [拒否ステータス] で [502(不正なゲートウェイ)] を選択します。
  6. [次のステップ] をクリックします。

ルールを追加します。

  1. [ルールを追加] をクリックします。
  2. [説明] フィールドに「allow traffic from 198.51.100.0/24」と入力します。
  3. [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
  4. [一致] フィールドに「198.51.100.0/24」と入力します。
  5. [アクション] で [許可] を選択します。
  6. [プレビューのみ] で [有効にする] チェックボックスをオンにします。
  7. [優先度] に「1000」と入力します。
  8. [完了] をクリックします。
  9. [次のステップ] をクリックします。

ターゲットへのポリシーの適用:

  1. [ターゲットを追加] をクリックします。
  2. [ターゲット] リストで、ターゲットを選択します。
  3. [完了] をクリックします。
  4. [ポリシーを作成] をクリックします。

gcloud

  1. Google Cloud Armor セキュリティ ポリシーを作成します。

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. セキュリティ ポリシーに対するデフォルトのルールを更新し、トラフィックを拒否します。

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. セキュリティ ポリシーにルールを追加します。

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-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 create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. セキュリティ ポリシーをバックエンド サービスに接続します。

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    
  5. 必要に応じて、適応型保護を有効にします。

    gcloud compute security-policies update mobile-clients-policy \
        --enable-layer7-ddos-defense
    
    gcloud compute security-policies update internal-users-policy \
        --enable-layer7-ddos-defense
    

セキュリティ ポリシーを作成する

セキュリティ ポリシーは、 Google Cloud コンソールまたは gcloud CLI を使用して作成できます。このセクションの手順では、既存のグローバル外部アプリケーション ロードバランサ、または従来のアプリケーション ロードバランサとバックエンド サービスに適用するセキュリティ ポリシーを構成することを想定しています。フィールドの入力方法の例については、サンプルを作成するをご覧ください。

コンソール

Google Cloud Armor のセキュリティ ポリシーとルールを作成し、セキュリティ ポリシーをバックエンド サービスに接続します。

  1. Google Cloud コンソールで、Google Cloud Armor ポリシーのページに移動します。

    Google Cloud Armor ポリシーに移動

  2. [ポリシーの作成] をクリックします。

  3. [名前] フィールドに、ポリシーの名前を入力します。

  4. (省略可)ポリシーの [説明] を入力します。

  5. [ポリシータイプ] で、[バックエンド セキュリティ ポリシー] または [Edge のセキュリティ ポリシー] を選択します。

  6. デフォルト ルールのアクションで、アクセスを許可するデフォルト ルールの場合は [許可] を選択します。IP アドレスまたは IP アドレス範囲へのアクセスを禁止するデフォルト ルールの場合は [拒否] を選択します。

    デフォルトのルールは、他に適用するルールがない場合にのみ適用される、最も優先度の低いルールです。

  7. 拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。これは、アクセス権のないユーザーがアクセスしようとしたときに Google Cloud Armor によって表示されるエラー メッセージです。

  8. 作成するルールのタイプに関係なく、[次のステップ] をクリックします。

ルールを追加します。

  1. [ルールを追加] をクリックします。
  2. 省略可: ルールの説明を入力します。
  3. モードを選択します。

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

    • 基本モード: ルールで一致する IP アドレスまたは IP 範囲を入力します。
    • 詳細モード: 受信リクエストに対して評価する式またはサブ式を入力します。式の作成方法については、カスタムルール言語属性の構成をご覧ください。
  5. ルールが一致する場合にトラフィックを許可または拒否するため、[アクション] で [許可] または [拒否] を選択します。

  6. プレビュー モードを有効にするには、[有効にする] チェックボックスをオンにします。プレビュー モードでは、ルールの動作を確認できますが、ルールは有効になっていません。

  7. ルールの優先度を入力します。0~2,147,483,646 の正の整数を指定できます。評価順序の詳細については、ルール評価の順序をご覧ください。

  8. [完了] をクリックします。

  9. さらにルールを追加するには、[ルールを追加] をクリックして前の手順を繰り返します。追加しない場合は、[次のステップ] をクリックします。

ターゲットへのポリシーの適用:

  1. [ターゲットを追加] をクリックします。
  2. [ターゲット] リストで、ターゲットを選択します。
  3. さらにターゲットを追加するには、[ターゲットを追加] をクリックします。
  4. [完了] をクリックします。
  5. [ポリシーを作成] をクリックします。

gcloud

  1. 新しい Google Cloud Armor セキュリティ ポリシーを作成するには、gcloud compute security-policies create コマンドを使用します。

    type フィールドでは、CLOUD_ARMOR(バックエンド セキュリティ ポリシーを作成する場合)または CLOUD_ARMOR_EDGE(エッジ セキュリティ ポリシーを作成する場合)を使用します。type フラグは省略可能です。タイプが指定されていない場合は、バックエンド セキュリティ ポリシーがデフォルトで作成されます。

    gcloud compute security-policies create NAME \
       [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \
       [--file-format=FILE_FORMAT | --description=DESCRIPTION] \
       [--file-name=FILE_NAME]
    
    

    次のように置き換えます。

    • NAME: セキュリティ ポリシーの名前
    • DESCRIPTION: セキュリティ ポリシーの説明

    次のコマンドは、以前に作成したポリシーを更新し、JSON の解析を有効にして、ログレベルを VERBOSE に変更します。

    gcloud compute security-policies update my-policy \
        --json-parsing=STANDARD \
        --log-level=VERBOSE
    
  2. セキュリティ ポリシーにルールを追加するには、gcloud compute security-policies rules create PRIORITY コマンドを使用します。

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

    PRIORITY は、ポリシー内でこのルールに割り当てる優先度に置き換えます。ルールの優先度の仕組みについては、ルール評価の順序をご覧ください。

    たとえば、次のコマンドは、IP アドレス範囲 192.0.2.0/24198.51.100.0/24 からのトラフィックをブロックするルールを追加します。このルールの優先度は 1000 で、my-policy という名前のポリシーに追加されます。

    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"
    

    --preview フラグを追加すると、ルールはポリシーに追加されますが適用されず、ルールをトリガーしたトラフィックのみがログに記録されます。

    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" \
        --preview
    

    カスタム条件を指定するには、--expression フラグを使用します。詳細については、カスタムルール言語属性の構成をご覧ください。次のコマンドは、IP アドレス 1.2.3.4 からのトラフィックを許可するルールを追加し、user-agent ヘッダーに文字列 example を含めます。

    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('cookie_name=cookie_value')" \
        --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-403" \
        --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"
    

    次のコマンドは、事前構成された式を使用して、名前付き IP アドレスリストのすべての IP アドレスからのアクセスを許可するルールを追加します。

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredWaf('sourceiplist-fastly')" \
        --action "allow"
    

リージョン外部アプリケーション ロードバランサ用のセキュリティ ポリシーを構成する

このセクションでは、リージョン スコープの Google Cloud Armor セキュリティ ポリシーをリージョン外部アプリケーション ロードバランサ用に構成する方法について説明します。

リージョンでロード バランシングされたワークロードを保護する

リージョン スコープのバックエンド サービスを保護するセキュリティ ポリシーを構成するには、次の操作を行います。

  1. リージョン スコープのセキュリティ ポリシーを作成します。

    gcloud compute security-policies create POLICY_NAME \
       --type=CLOUD_ARMOR \
       --region=REGION
    
  2. リージョン スコープのセキュリティ ポリシーをリージョン スコープのバックエンド サービスに接続します。BACKEND_NAME は、既存のリージョン スコープのバックエンド サービスの名前に置き換えます。

    gcloud compute backend-services update BACKEND_NAME \
       --security-policy=POLICY_NAME \
       --region=REGION
    

リージョン スコープの Google Cloud Armor セキュリティ ポリシーを適用する

すべてのバックエンド ワークロードと WAF ルールが特定のリージョンにデプロイされていることを求める所在地要件をセキュリティ管理者が満たそうとしている場合について考えてみましょう。事前に次の作業を済ませているものとします。

  1. リージョン スコープのロード バランシング バックエンド サービスを目的のリージョンで作成する。
  2. デプロイで既存のグローバル スコープのセキュリティ ポリシーを無効にする。
  3. 前のセクションと同様に、リージョン スコープのセキュリティ ポリシーを作成して同じリージョンに追加する。

以下のサンプル コマンドを使用することで、要件を満たしながら WAF ルールやその他の高度なルールをポリシーに追加できます。

  • ポリシーに WAF ルールを追加します。

    gcloud compute security-policies rules create 1000 --action=deny-404 \
      --expression="evaluatePreconfiguredWaf('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • ポリシーに高度なルールを追加します。

    gcloud compute security-policies rules create 1000 --action=allow \
      --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • ポリシーにレート制限ルールを追加します。

    gcloud compute security-policies rules create 1000 --action=throttle \
      --src-ip-ranges="1.1.1.1/32" \
      --rate-limit-threshold-count=1000 \
      --rate-limit-threshold-interval-sec=120 \
      --conform-action="allow" \
      --exceed-action="deny-429" \
      --enforce-on-key=IP \
      --ban-duration-sec=999 \
      --ban-threshold-count=5000 \
      --ban-threshold-interval-sec=60 \
      --security-policy=POLICY_NAME \
      --region=REGION
    

次のステップ