Google Cloud Armor セキュリティ ポリシーの構成

Google Cloud Armor セキュリティ ポリシーを作成して、HTTP(S) 負荷分散への受信トラフィックをフィルタする手順を説明します。Google Cloud Armor セキュリティ ポリシーのコンセプトに関する情報については、Google Cloud Armor のセキュリティ ポリシーの概要をご覧ください。

セキュリティ ポリシーを構成する前に、HTTP(S) 負荷分散のコンセプトについて理解しておいてください。

GKE での Google Cloud Armor の構成については、Google Cloud Armor の構成をご覧ください。

Google Cloud Armor セキュリティ ポリシーの IAM 権限

次のオペレーションでは、セキュリティ管理者のロール(roles/compute.securityAdmin)が必要です。

  • Google Cloud Armor セキュリティ ポリシーの作成、変更、更新、削除
  • 許可される API メソッド
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

ネットワーク管理者のロール(roles/compute.networkAdmin)を付与されたユーザーは、次のオペレーションを実行できます。

  • バックエンド サービスの Google Cloud Armor セキュリティ ポリシーの設定
  • 許可される API メソッド
    • BackendServices setSecurityPolicy

セキュリティ管理者とネットワーク管理者のロールを付与されたユーザーは、API メソッド SecurityPolicies getlistgetRule を使用して Google Cloud Armor セキュリティ ポリシーを表示できます。

カスタムロールのための IAM 権限

次の表に、基本的な IAM 役割の基本的な権限と、関連する API メソッドを示します。

IAM 権限 API メソッド
compute.securityPolicies.create SecurityPolicies insert
compute.securityPolicies.delete SecurityPolicies delete
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
compute.securityPolicies.list SecurityPolicies list
compute.securityPolicies.use BackendServices setSecurityPolicy
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
compute.backendServices.setSecurityPolicy BackendServices setSecurityPolicy

HTTP(S) 負荷分散のための Google Cloud Armor セキュリティ ポリシーの構成

以下で説明している概要は、Google Cloud Armor セキュリティ ポリシーを構成して、HTTP(S) 負荷分散へのトラフィックを許可または拒否するルールを有効にする手順です。

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

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

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

この例における 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 セキュリティ ポリシーはすべてのリージョンのインスタンスに適用されます。上記の例では、Google Cloud Armor セキュリティ ポリシー mobile-clients-policy は、us-central 内のインスタンス 1、2、3、4 と、us-east 内のインスタンス 5、6 に適用されます。

サンプルの作成

以降の手順を使用して、前のセクションで説明したサンプルを作成します。

Console

構成サンプルを作成するには、次の手順を行います。

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    [セキュリティ ポリシー] ページが表示されます。
  2. [ポリシーを作成] をクリックします。
  3. [名前] フィールドに「mobile-client-policy」と入力します。
  4. [説明] フィールドに「policy for external users」と入力します。
  5. [拒否] をクリックします。
  6. [次のステップ] をクリックします。
  7. [ルールを追加] をクリックします。
  8. [説明] フィールドに「allow traffic from 192.0.2.0/24」と入力します。
  9. [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
  10. [一致] フィールドに「192.0.2.0/24」と入力します。
  11. [アクション] で [許可] を選択します。
  12. [優先度] フィールドに「1000」と入力します。
  13. [完了] をクリックします。
  14. [次のステップ] をクリックします。
  15. [ターゲットを追加] をクリックします。
  16. プルダウン リストから [ターゲット] を選択します。
  17. [完了] をクリックします。
  18. [ポリシーを作成] をクリックします。Console に [セキュリティ ポリシー] ページが表示されます。
  19. [名前] フィールドに「internal-users-policy」と入力します。
  20. [説明] フィールドに「Policy for internal test users」と入力します。
  21. [拒否] をクリックします。
  22. [次のステップ] をクリックします。
  23. [ルールを追加] をクリックします。
  24. [説明] フィールドに「allow traffic from 198.51.100.0/24」と入力します。
  25. [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
  26. [一致] フィールドに「198.51.100.0/24」と入力します。
  27. [アクション] で [許可] を選択します。
  28. [有効にする] をクリックします。
  29. [優先度] フィールドに「1000」と入力します。
  30. [完了] をクリックします。
  31. [次のステップ] をクリックします。
  32. [ターゲットを追加] をクリックします。
  33. プルダウン リストから [ターゲット] を選択します。
  34. [完了] をクリックします。
  35. [ポリシーを作成] をクリックします。Console に [セキュリティ ポリシー] ページが表示されます。

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. Google Cloud Armor セキュリティ ポリシーに対するデフォルトのルールを更新し、トラフィックを拒否します。

    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. Google Cloud Armor セキュリティ ポリシーにルールを追加します。

    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. Google Cloud Armor セキュリティ ポリシーをバックエンド サービスに接続します。

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    

Google Cloud Armor for GKE の構成

次の大まかな手順で、Google Cloud Armor for GKE セキュリティ ポリシーを構成できます。

  1. REST API または gcloud コマンドライン ツールを使用して、ルールで Google Cloud Armor セキュリティ ポリシーを構成します。
  2. GKE で Ingress リソースを作成します。
  3. Ingress リソースに関連付けられているバックエンド サービスを特定します。

    1. Ingress リソースの構成を取得します。

      kubectl describe ingress [INGRESS_NAME]
      
    2. 出力の「Annotations」セクションの backends フィールドの値をメモします。これらの値は、使用されているバックエンド サービスの名前です。

  4. REST API または gcloud コマンドライン ツールを使用して、前のステップでメモした各バックエンド サービスに Google Cloud Armor セキュリティ ポリシーを接続します。

Kubernetes Ingress リソースを削除してから再作成した場合は、セキュリティ ポリシーを新しいバックエンド サービスに再適用する必要があります。

詳細については、Ingress による Google Cloud Armor の構成をご覧ください。

Google Cloud Armor のセキュリティ ポリシー、ルール、式を作成する

Google Cloud Console、gcloud コマンドライン ツール、または REST API を使用して、Google Cloud Armor のセキュリティ ポリシー、ルール、式を作成できます。

以下にサンプルの式を示します。式の詳細については、Google Cloud Armor ルールの言語リファレンスをご覧ください。

ISO 3166-1 alpha 2 の国名コード(地域コード)を使用するルールや式を作成する場合、Google Cloud Armor では各コードが個別に扱われます。Google Cloud Armor のルールと式では、これらの地域コードを明示的に使用して、リクエストを許可または拒否します。

  • 次の式は、IP アドレス 1.2.3.4 からのリクエストを照合し、ユーザー エージェント ヘッダーに文字列 Godzilla を含めます。

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

    has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
    
  • 次の式は、リージョン AU からのリクエストを照合します。

    origin.region_code == 'AU'
    
  • 次の式は、リージョン AU からのリクエストで、指定された IP 範囲ではないリクエストを照合します。

    request.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
    
  • 次の式は、URI が正規表現に一致する場合、リクエストを照合します。

    request.path.matches('/bad_path/')
    
  • 次の式は、Base64 でデコードされた user-id ヘッダーの値に特定の値が含まれている場合に、リクエストを照合します。

    has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
    
  • 事前構成された式セットを使用する次の式は、SQLi 攻撃を照合します。

    evaluatePreconfiguredExpr('sqli-stable')
    

次の手順では、既存の外部 HTTP(S) ロードバランサとバックエンド サービスに適用するセキュリティ ポリシーを作成していることを前提としています。

Console

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

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    [セキュリティ ポリシー] ページが表示されます。
  2. [ポリシーを作成] をクリックします。
  3. [名前] フィールドに、ポリシーの名前を入力します。
  4. 必要に応じて、ポリシーの [説明] を入力します。
  5. アクセスを許可するデフォルト ルールの場合は [許可]、IP アドレスまたは IP アドレス範囲へのアクセスを禁止するデフォルト ルールの場合は [拒否] を選択します。

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

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

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

  8. [ルールを追加] をクリックして、セキュリティ ポリシーの追加ルールを構成します。

  9. 必要に応じて、ルールの [説明] を入力します。

  10. [モード] を選択します。

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

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

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

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

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

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

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

  18. プルダウン リストから [ターゲット] を選択します。

  19. さらにターゲットを追加するには、[ターゲットを追加] をクリックします。

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

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

gcloud

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

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

    例:

    gcloud compute security-policies create my-policy \
       --description "block bad traffic"
    
  2. Google Cloud Armor セキュリティ ポリシーにルールを追加するには、コマンド gcloud compute security-policies rules create PRIORITY を使用します。ここで、PRIORITY は、ポリシー内のルールに割り当てられた優先度です。ルールの優先度の仕組みについては、Google Cloud Armor のセキュリティ ポリシーの概要をご覧ください。

    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]
    

    次のコマンドは、IP アドレス範囲 192.0.2.0/24 と 198.51.100.0/24 からのトラフィックをブロックするルールを追加します。このルールの優先度は 1,000 で、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 フラグを使用して、Google Cloud Armor のルール言語でカスタム条件を指定します。次のコマンドは、IP アドレス 1.2.3.4 からのトラフィックを許可するルールを追加し、user-agent ヘッダーに文字列 Godzilla を含めます。

    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('Godzilla')" \
       --action allow \
       --description "Block User-Agent 'Godzilla'"
    

    次のコマンドは、リクエストの 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"
    

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

    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('/bad_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 "evaluatePreconfiguredExpr('sqli-stable')" \
       --action "deny-403"
    

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

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

利用可能な事前構成ルールの一覧表示

事前構成されたルールを一覧表示して、Google Cloud Armor が提供する ModSecurity Core Rule Set など、事前定義されたアプリケーション保護ルールとシグネチャを表示します。これらの事前構成されたルールには、Google Cloud Armor が受信リクエストに対して評価するために使用する複数の組み込みシグネチャが含まれています。Google Cloud Armor カスタムルール言語を使用して、これらの事前構成されたルールを新規または既存のルールに追加します。

詳細については、事前構成されたルールをご覧ください。

gcloud

  1. gcloud compute security-policies list-preconfigured-expression-sets コマンドを実行します。

    gcloud compute security-policies list-preconfigured-expression-sets
    

    次の例は、コマンドからの出力形式を示しています。

    EXPRESSION_SET
    expression-set-1
       RULE_ID
       expression-set-1-id-1
       expression-set-1-id-2
    expression-set-2
       alias-1
       RULE_ID
       expression-set-2-id-1
       expression-set-2-id-2
    

    次の例には、コマンドの実際の出力のサンプルが含まれています。実際の出力には、Google Cloud Armor WAF ルールのチューニングにリストされているすべてのルールが含まれているので注意してください。

    gcloud beta compute security-policies list-preconfigured-expression-sets
    
    EXPRESSION_SET
    sqli-canary
        RULE_ID
        owasp-crs-v030001-id942110-sqli
        owasp-crs-v030001-id942120-sqli
        …
    xss-canary
        RULE_ID
        owasp-crs-v030001-id941110-xss
        owasp-crs-v030001-id941120-xss
    …
    sourceiplist-fastly
    sourceiplist-cloudflare
    sourceiplist-imperva
    

Google Cloud Armor セキュリティ ポリシーの一覧表示

以降の手順を使用して、現在のプロジェクトまたは指定したプロジェクト内のすべての Google Cloud Armor セキュリティ ポリシーを一覧表示します。

Console

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    [セキュリティ ポリシー] ページとポリシーのリストが表示されます。

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

gcloud

構成済みのすべての Google Cloud Armor セキュリティ ポリシーを一覧表示するには:

gcloud compute security-policies list

例:

gcloud compute security-policies list
NAME
my-policy

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

Google Cloud Armor セキュリティ ポリシーの更新

以降の手順を使用して、Google Cloud Armor のセキュリティ ポリシーを更新します。たとえば、ポリシーの説明を変更する、デフォルトのルールの動作を変更する、ターゲット バックエンド サービスを変更する、新しいルールを追加する、といった操作が可能です。

Console

Google Cloud Armor セキュリティ ポリシーを更新するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor セキュリティ ポリシー ページとポリシーのリストが表示されます。
  2. 更新するポリシーのその他メニューをクリックします。

    1. デフォルトのルール アクションのポリシーの説明を更新するには、[編集] を選択し、必要な変更を行い、[更新] をクリックします。
    2. ルールを追加するには、[ルールを追加] を選択し、上記の手順に従って Console からポリシーにルールを追加します。
    3. Google Cloud Armor セキュリティ ポリシーのターゲット バックエンド サービスを変更するには、[ターゲットにポリシーを適用] を選択し、新しいターゲットを追加して [追加] をクリックします。

gcloud

gcloud コマンドライン ツールを使用して Google Cloud Armor セキュリティ ポリシーを更新するには、次の手順を使用します。

Google Cloud Armor セキュリティ ポリシーのエクスポート

gcloud コマンドライン ツールを使用して、Google Cloud Armor セキュリティ ポリシーを YAML ファイルまたは JSON ファイルとしてエクスポートできます。ポリシーをエクスポートすると、そのコピーを取得して、ソース管理で変更や保存が可能です。

gcloud

  1. 次のコマンドの NAME は、Google Cloud Armor セキュリティ ポリシーの名前です。有効なファイル形式は YAML と JSON です。ファイル形式を指定しない場合、Google Cloud Armor はデフォルトの YAML を使用します。

    gcloud compute security-policies export NAME \
        --file-name [FILE_NAME]  \
        --file-format [FILE_FORMAT]
    

    次のコマンドは、my-policy セキュリティ ポリシーを YAML 形式で my-file ファイルにエクスポートします。

    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: allow description: default rule 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. エクスポートされたファイルは、任意のテキスト エディタで変更し、import コマンドを使用して GCP にインポートできます。

Google Cloud Armor セキュリティ ポリシーのインポート

YAML ファイルまたは JSON ファイルから Google Cloud Armor セキュリティ ポリシーをインポートするには、gcloud コマンドライン ツールを使用します。import コマンドを使用して、既存のポリシーのルールを更新することはできません。代わりに、ルールの更新手順を使用してルールを 1 つずつ更新するか、Google Cloud Armor セキュリティ ポリシーのルールをアトミックに更新する手順を使用して、一度にすべてを更新する必要があります。

gcloud

Google Cloud Armor セキュリティ ポリシーをインポートするには、gcloud compute security-policies import NAME コマンドを使用します。ここで、NAME はインポートする Google Cloud Armor セキュリティ ポリシーの名前です。ファイル形式を指定しない場合は、ファイル構造に基づいて正しい形式が推定されます。構造が無効な場合は、エラーが表示されます。

gcloud compute security-policies import NAME \
   --file-name [FILE_NAME] \
  [--file-format [FILE_FORMAT]]

たとえば、次のコマンドはファイル my-file をインポートしてポリシー my-policy を更新します。

gcloud compute security-policies import my-policy \
    --file-name my-file \
    --file-format json

ポリシーのフィンガープリントがインポート時に最新でない場合は、Google Cloud Armor によりエラーが表示されます。これは、最後にエクスポートした後に、ポリシーが変更されたことを意味します。これを修正するには、ポリシーで describe コマンドを使用して、最新のフィンガープリントを取得します。describe コマンドで取得されたポリシーと実際のポリシーの相違点をマージし、古いフィンガープリントを最新のものに置き換えます。

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

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーを削除します。ポリシーを削除する前に、ポリシーからすべてのバックエンド サービスを削除する必要があります。

Console

Google Cloud Armor セキュリティ ポリシーを削除するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. 削除する Google Cloud Armor セキュリティ ポリシーの名前の横にあるチェックボックスをオンにします。
  3. 画面の右上隅にある [削除] アイコンをクリックします。

gcloud

gcloud compute security-policies delete NAME を使用してセキュリティ ポリシーを削除します。NAME は Google Cloud Armor セキュリティ ポリシーの名前です。

gcloud compute security-policies delete NAME

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

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーをバックエンド サービスに接続します。Google Cloud Armor セキュリティ ポリシーは複数のバックエンド サービスに接続できますが、バックエンド サービスに接続できる Google Cloud Armor セキュリティ ポリシーは 1 つだけです。

Console

ポリシーをバックエンド サービスに接続するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
  3. ページ中央の [ターゲット] タブをクリックします。
  4. [新しいターゲットにポリシーを適用] をクリックします。
  5. [ターゲットを追加] をクリックします。
  6. [ターゲットを選択] をクリックします。
  7. ターゲットを選択します。
  8. [追加] をクリックします。

gcloud

gcloud compute backend-services コマンドを使用して、セキュリティ ポリシーをバックエンド サービスに接続します。

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

バックエンド サービスからの Google Cloud Armor セキュリティ ポリシーの削除

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーをバックエンド サービスから削除します。

Console

ポリシーをバックエンド サービスから削除するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
  3. ページ中央の [ターゲット] タブをクリックします。
  4. ポリシーを削除する対象のバックエンド サービスを選択します。
  5. [削除] をクリックします。
  6. 確認のポップアップで [削除] をクリックします。

gcloud

Google Cloud Armor セキュリティ ポリシーをバックエンド サービス my-backend から削除するには:

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

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

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーにルールを追加します。

Console

Google Cloud Armor セキュリティ ポリシーにルールを追加するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
  3. ページ中央の [ルールを追加] をクリックします。
  4. 必要に応じて、ルールの [説明] を入力します。
  5. [モード] を選択します。

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

    • 基本モード - ルールで一致する IP アドレス範囲を 1 つから 5 つまでの間で入力します。
    • 詳細モード - 受信リクエストに対して評価する式またはサブ式を入力します。式の記述方法と次の例の読み方については、Google Cloud Armor ルールの言語をご覧ください。

      • 次の式は、IP アドレス 1.2.3.4 からのリクエストを照合し、ユーザー エージェント ヘッダーに文字列 Godzilla を含めます。

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

        has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
        
      • 次の式は、リージョン AU からのリクエストを照合します。

        origin.region_code == 'AU'
        
      • 次の式は、リージョン AU からのリクエストで、指定された IP 範囲ではないリクエストを照合します。

        request.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
        
      • 次の式は、URI が正規表現に一致する場合、リクエストを照合します。

        request.path.matches('/bad_path/)')
        
      • 次の式は、Base64 でデコードされた user-id ヘッダーの値に特定の値が含まれている場合に、リクエストを照合します。

        has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
        
      • 事前構成された式セットを使用する次の式は、SQLi 攻撃を照合します。

        evaluatePreconfiguredExpr('sqli-stable')
        
  7. [アクション] セクションで [許可] または [拒否] を選択します。

  8. 拒否ルールを作成する場合は、[拒否ステータス] を選択します。

  9. ルールのプレビュー モードを有効にする場合は、[有効にする] をオンにします。

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

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

gcloud

Google Cloud Armor セキュリティ ポリシーにルールを追加するには、コマンド 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

次のコマンドは、IP アドレス範囲 192.0.2.0/24 と 198.51.100.0/24 からのトラフィックをブロックするルールを追加します。このルールの優先度は 1,000 で、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"

--expression フラグを使用して、Google Cloud Armor ルール言語で条件を指定します。次のコマンドは、IP アドレス 1.2.3.4 からのトラフィックを許可するルールを追加し、user-agent ヘッダーに文字列 Godzilla を含めます。

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('Godzilla')" \
   --action allow \
   --description "Block User-Agent 'Godzilla'"

次のコマンドは、リクエストの 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"

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

gcloud compute security-policies rules create 1000 \
   --security-policy my-policy \
   --expression "request.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('/bad_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 "evaluatePreconfiguredExpr('sqli-stable')" \
   --action deny-403

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

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーのルールを一覧表示します。

Console

Google Cloud Armor セキュリティ ポリシーのルールを一覧表示するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示され、ページの中央にポリシールールが一覧表示されます。

gcloud

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

gcloud compute security-policies describe [NAME] \

次の gcloud コマンドを使用して、指定された Google Cloud Armor セキュリティ ポリシーで、指定された優先度を持つルールを表示します。

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

たとえば、次のコマンドは、Google Cloud Armor セキュリティ ポリシー 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

単一のルールの更新

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーの単一のルールを更新します。複数のルールをアトミックに更新するには、Google Cloud Armor セキュリティ ポリシーのルールをアトミックに更新するをご覧ください。

Console

単一のルールを更新するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
  3. ページの中央で、ルールの横にある鉛筆アイコンをクリックします。[ルールの編集] ページが表示されます。
  4. 必要な変更を行い、[更新] をクリックします。

gcloud

このコマンドを使用して、指定された Google Cloud Armor セキュリティ ポリシーで、指定された優先度を持つルールを更新します。このコマンドを使用して一度に更新できる Google Cloud Armor セキュリティ ポリシーは 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 をご覧ください。

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

アトミックに更新を行うと、1 回の更新で複数のルールに変更が適用されます。ルールを 1 つずつ更新すると、古いルールと新しいルールが少しの間連携するため、意図しない動作が発生することがあります。

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

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: evaluatePreconfiguredExpr('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: evaluatePreconfiguredExpr('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. 次の例に示すように、新しい Google Cloud Armor セキュリティ ポリシーを作成し、変更したファイルの名前と形式を指定します。

    gcloud compute security-policies create new-policy \
       --description "allow-listed traffic" \
       --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
    

ルールを削除する

以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーからルールを削除します。

Console

Google Cloud Armor セキュリティ ポリシーからルールを削除するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. Google Cloud Armor セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
  3. ページ中央で、削除するルールの横にあるチェックボックスをオンにします。
  4. [削除] ボタンをクリックします。

gcloud

このコマンドを使用して、指定された優先度のルールを、指定された Google Cloud Armor セキュリティ ポリシーから削除します。一度に変更できる Google Cloud Armor セキュリティ ポリシーは 1 つだけですが、一度に複数のルールを削除できます。

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

例:

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

HTTP(S) リクエストのロギングを有効にする

セキュリティ ポリシー名、一致ルールの優先度、関連するアクション、関連情報の Google Cloud Armor ログは、HTTP(S) 負荷分散のロギングの一環として記録されます。新しいバックエンド サービスのロギングは、デフォルトでは無効になっているため、Google Cloud Armor の全ロギング情報を記録するには、HTTP(S) 負荷分散ロギングを有効にする必要があります。

HTTP(S) 負荷分散ロギングを使用すると、拒否された HTTP(S) リクエストと許可された HTTP(S) リクエストを詳細に表示できます。たとえば、拒否されたリクエストを表示するには、jsonPayload.enforcedSecurityPolicy.outcome="DENY"jsonPayload.statusDetails="denied_by_security_policy" などのフィルタを使用します。

HTTP(S) 負荷分散のロギングを有効にするには、HTTP(S) 負荷分散のロギングとモニタリングをご覧ください。

ログの表示

ログは Console でのみ表示できます。

Console

Google Cloud Armor セキュリティ ポリシーのログを表示するには:

  1. Google Cloud Console の [ネットワーク セキュリティ] ページに移動します。
    [ネットワーク セキュリティ] ページに移動
    Google Cloud Armor のセキュリティ ポリシー ページが表示されます。
  2. セキュリティ ポリシーの行で、ログを表示するポリシーに対応する [その他メニュー] をクリックします。
  3. [ログを表示] を選択します。

次のステップ