次の手順に沿って Google Cloud Armor セキュリティ ポリシーを作成し、次の宛先への受信トラフィックをフィルタします。
- グローバル外部アプリケーション ロードバランサ
- 従来のアプリケーション ロードバランサ
- リージョン外部アプリケーション ロードバランサ
- 外部プロキシ ネットワーク ロードバランサ
- 外部パススルー ネットワーク ロードバランサ
- プロトコル転送
- パブリック IP アドレスを持つ VM
セキュリティ ポリシーのコンセプトについては、Google Cloud Armor セキュリティ ポリシーの概要をご覧ください。
Google Kubernetes Engine(GKE)で Google Cloud Armor を構成する方法については、「BackendConfig パラメータによる Ingress 機能の構成」セクション内の Google Cloud Armor セキュリティ ポリシーをご覧ください。
始める前に
セキュリティ ポリシーを構成する前に、次のことを行います。
外部アプリケーション ロードバランサのコンセプトについて理解します。
既存のバックエンド サービスを調べて、セキュリティ ポリシーがまだ適用されていないものを確認します。これらのバックエンド サービスと関連するバックエンドは、Google Cloud Armor で保護されません。Google Cloud Armor によって実現される保護を追加するには、このドキュメントの手順に沿って、新規作成または既存のセキュリティ ポリシーをバックエンド サービスに接続します。
Google Cloud Armor セキュリティ ポリシーの IAM 権限を設定する
次の操作を行うには、Identity and Access Management(IAM)の Compute セキュリティ管理者のロール(roles/compute.securityAdmin
)が必要です。
- Google Cloud Armor セキュリティ ポリシーの構成、変更、更新、削除
- 次の API メソッドの使用:
SecurityPolicies insert
SecurityPolicies delete
SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Compute ネットワーク管理者のロール(roles/compute.networkAdmin
)を付与されたユーザーは、次の操作を実行できます。
- バックエンド サービスの Google Cloud Armor セキュリティ ポリシーの設定
- 次の API メソッドの使用:
BackendServices setSecurityPolicy
BackendServices list
(gcloud
のみ)
セキュリティ管理者ロールとネットワーク管理者ロールを持つユーザーは、SecurityPolicies
API メソッド get
、list
、getRule
を使用して、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 |
外部アプリケーション ロードバランサにセキュリティ ポリシーを構成する
以下では、グローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサへのトラフィックを許可または拒否するルールを有効にするように Google Cloud Armor セキュリティ ポリシーを構成する手順について説明します。
- Google Cloud Armor セキュリティ ポリシーを作成します。
- IP アドレスのリスト、カスタム式、または事前に構成された式のセットに基づいて、セキュリティ ポリシーにルールを追加します。
- アクセスを制御するグローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサのバックエンド サービスにセキュリティ ポリシーを接続します。
- 必要に応じて、セキュリティ ポリシーを更新します。
次の例では、2 つの Google Cloud Armor セキュリティ ポリシーを作成し、そのポリシーを異なるバックエンド サービスに適用します。
この例における Google Cloud Armor のセキュリティ ポリシーは、次のとおりです。
mobile-clients-policy
は、games
サービスの外部ユーザーに適用されます。internal-users-policy
は、組織のtest-network
チームに適用されます。
mobile-clients-policy
を games
サービス(バックエンド サービスが games
と呼ばれる)に適用し、internal-users-policy
をテストチームの内部 test
サービス(対応するバックエンド サービスが test-network
と呼ばれる)に適用します。
バックエンド サービスのバックエンド インスタンスが複数のリージョンに存在する場合、サービスに関連付けられた Google Cloud Armor セキュリティ ポリシーがすべてのリージョンのインスタンスに適用されます。上記の例では、セキュリティ ポリシー mobile-clients-policy
は us-central
のインスタンス 1、2、3、4 と us-east
のインスタンス 5、6 に適用されます。
サンプルを作成する
以降の手順を使用して、前のセクションで説明したサンプルの構成を作成します。
コンソール
以下の手順で外部ユーザーのセキュリティ ポリシーを構成します。
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[ポリシー] ページで、[ポリシーを作成] をクリックします。
[名前] フィールドに「
mobile-clients-policy
」と入力します。[説明] フィールドに「
Policy for external users
」と入力します。[デフォルトのルール アクション] で [拒否] を選択します。
[拒否ステータス] で [404(ファイル未検出)] を選択します。
[次のステップ] をクリックします。
ルールを追加します。
- [ルールを追加] をクリックします。
- [説明] フィールドに「
allow traffic from 192.0.2.0/24
」と入力します。 - [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
- [一致] フィールドに「
192.0.2.0/24
」と入力します。 - [アクション] で [許可] を選択します。
- [優先度] に「
1000
」と入力します。 - [完了] をクリックします。
- [次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- [完了] をクリックします。
- [ポリシーを作成] をクリックします。
必要に応じて、適応型保護を有効にします。
- 適応型保護を有効にするには、[有効] チェックボックスをオンにします。
以下の手順で内部ユーザーのポリシーを構成します。
- [ポリシー] ページで、[ポリシーを作成] をクリックします。
- [名前] フィールドに「
internal-users-policy
」と入力します。 - [説明] フィールドに「
Policy for internal test users
」と入力します。 - [デフォルトのルール アクション] で [拒否] を選択します。
- [拒否ステータス] で [502(不正なゲートウェイ)] を選択します。
- [次のステップ] をクリックします。
ルールを追加します。
- [ルールを追加] をクリックします。
- [説明] フィールドに「
allow traffic from 198.51.100.0/24
」と入力します。 - [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
- [一致] フィールドに「
198.51.100.0/24
」と入力します。 - [アクション] で [許可] を選択します。
- [プレビューのみ] で [有効にする] チェックボックスをオンにします。
- [優先度] に「
1000
」と入力します。 - [完了] をクリックします。
- [次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- [完了] をクリックします。
- [ポリシーを作成] をクリックします。
gcloud
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"
セキュリティ ポリシーに対するデフォルトのルールを更新し、トラフィックを拒否します。
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"
セキュリティ ポリシーにルールを追加します。
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"
セキュリティ ポリシーをバックエンド サービスに接続します。
gcloud compute backend-services update games \ --security-policy mobile-clients-policy
gcloud compute backend-services update test-network \ --security-policy internal-users-policy
必要に応じて、適応型保護を有効にします。
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 Armor セキュリティ ポリシー、ルール、式を構成するには、Google Cloud コンソール、Google Cloud CLI、または REST API を使用します。gcloud CLI を使用してセキュリティ ポリシーを作成する場合は、--type
フラグを使用して、セキュリティ ポリシーがバックエンド セキュリティ ポリシーかエッジ セキュリティ ポリシーかを指定します。
セキュリティ ポリシーをテストする
すべての新しいルールをプレビュー モードでデプロイしてから、リクエストログを調べて、ポリシーとルールが期待どおりに動作していることを確認することをおすすめします。
式のサンプル
以下に式のサンプルを示します。式の詳細については、Google Cloud Armor カスタムルール言語リファレンスをご覧ください。
ISO 3166-1 alpha 2 の国コードやリージョン コードを使用するルールまたは式を構成する場合、Google Cloud Armor は各コードを個別に処理します。Google Cloud Armor のルールと式では、これらのリージョン コードを明示的に使用して、リクエストを許可または拒否します。
次の式は、IP アドレス
1.2.3.4
からのリクエストを照合し、ユーザー エージェント ヘッダーに文字列example
を含めます。inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
または、
origin.user_ip
属性を使用して、カスタム クライアント IP アドレス ヘッダーの IP アドレス範囲と照合することもできます。inIpRange(origin.user_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('/path/[0-9]+/target_file.html')
次の式は、Base64 でデコードされた
user-id
ヘッダーの値に特定の値が含まれている場合に、リクエストを照合します。has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
事前構成された式セットを使用する次の式は、SQLi 攻撃を照合します。
evaluatePreconfiguredExpr('sqli-stable')
JSON 解析を使用する
各セキュリティ ポリシーに対して、POST リクエストの JSON 本文の解析を有効または無効にできます。Content-Type
ヘッダーが application/json
に設定されている場合は、Google Cloud CLI で --json-parsing
フラグを使用します。
デフォルトではこのオプションは無効になっています。フラグの構文は次のとおりです。
--json-parsing=[STANDARD | DISABLED]
このフラグは gcloud compute security-policies update
でのみ使用できます。このオプションを使用して新しいセキュリティ ポリシーを作成するには、ファイル内でセキュリティ ポリシーを作成してからそのファイルをインポートする必要があります。詳細については、セキュリティ ポリシーのインポートをご覧ください。
JSON 解析の詳細については、JSON 解析と詳細ログをご覧ください。
詳細ログを使用する
Google Cloud Armor ロギングレベルを構成してセキュリティ ポリシーごとに詳細なロギングを有効にするには、gcloud CLI で --log-level
フラグを使用します。
デフォルトではこのオプションは無効になっています。フラグの構文は次のとおりです。
--log-level=[NORMAL | VERBOSE]
このフラグは gcloud compute security-policies update
でのみ使用できます。このオプションを使用して新しいセキュリティ ポリシーを作成するには、ファイル内でセキュリティ ポリシーを作成してからそのファイルをインポートする必要があります。詳細については、セキュリティ ポリシーのインポートをご覧ください。
詳細ログの詳細については、JSON 解析と詳細ログをご覧ください。
レート制限ルールを構成する
このセクションでは、スロットルまたはレートベースの禁止アクションを構成して、クライアントごとのレート制限を適用するように Google Cloud Armor ルールを構成する方法について説明します。
レートベースのスロットル調整のルール
gcloud CLI では、レートベースのスロットル調整のルールは次の形式になります。
gcloud compute security-policies rules create PRIORITY --security-policy=SECURITY_POLICY (--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE) --action "throttle" --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC --conform-action=[allow] --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] --exceed-redirect-type=[google-recaptcha|external-302] --exceed-redirect-target=REDIRECT_URL --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE] --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
たとえば、次の gcloud
コマンドでは、1.2.3.0/24
の各 IP アドレスに対して 60 秒ごとに 100 リクエストのレート制限がある throttle
ルールが優先度 105
で作成されます。リクエストがスロットル調整の上限を超えると、エラーコード 429
が返されます。
gcloud compute security-policies rules create 105 \ --security-policy sec-policy \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=100 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=IP
たとえば、次の gcloud
コマンドでは、IP アドレス 1.2.3.0/24
から送信されたすべてのリクエスト HTTP ヘッダー User-Agent
の一意の各値に対して、60 秒ごとに 10 リクエストのレート制限がある throttle
ルールが優先度 110
で作成されます。リクエストがスロットル調整の上限を超えると、エラーコード 429
が返されます。
gcloud compute security-policies rules create 110 \ --security-policy sec-policy \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=10 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=HTTP-HEADER \ --enforce-on-key-name='User-Agent'
有効な reCAPTCHA 除外 Cookie が設定されているユーザーに対して、レートベースの禁止を発行することもできます。たとえば、次の gcloud
コマンドは、優先度 115
の throttle
ルールを作成します。このルールでは、有効な reCAPTCHA 除外 Cookie を含むすべてのリクエストに対して、固有の reCAPTCHA 除外 Cookie ごとに 5 分あたり 20 リクエストのレート制限があります。スロットル調整の上限を超えるリクエストは、reCAPTCHA Enterprise で評価するためにリダイレクトされます。除外 Cookie と reCAPTCHA Enterprise の評価の詳細については、bot 管理の概要をご覧ください。
gcloud compute security-policies rules create 115 \ --security-policy sec-policy \ --expression="token.recaptcha_exemption.valid" \ --action=throttle \ --rate-limit-threshold-count=20 \ --rate-limit-threshold-interval-sec=300 \ --conform-action=allow \ --exceed-action=redirect \ --exceed-redirect-type=google-recaptcha \ --enforce-on-key=HTTP-COOKIE \ --enforce-on-key-name="recaptcha-ca-e"
レートベースの禁止ルール
gcloud CLI では、レートベースの禁止ルールは次の形式になります。
gcloud compute security-policies rules create PRIORITY \ --security-policy=SECURITY_POLICY \ (--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE) \ --action "rate-based-ban" \ --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \ --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \ --ban-duration-sec=BAN_DURATION_SEC \ --ban-threshold-count=BAN_THRESHOLD_COUNT \ --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \ --conform-action=[allow] \ --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] --exceed-redirect-type=[google-recaptcha|external-302] --exceed-redirect-target=REDIRECT_URL --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE] --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
たとえば、次の gcloud
コマンドでは、各 IP アドレスに対して優先度 100 でレートベースの禁止ルールが作成され、IP アドレスのリクエストが値 tuna
を持つヘッダー fish
と一致して、120 秒あたりのリクエスト数の上限(50 件)を超えると、300 秒間禁止されます。禁止されたリクエストは、エラーコード 404
を返します。
gcloud compute security-policies rules create 100 \ --security-policy=sec-policy \ --expression="request.headers['fish'] == 'tuna'" \ --action=rate-based-ban \ --rate-limit-threshold-count=50 \ --rate-limit-threshold-interval-sec=120 \ --ban-duration-sec=300 \ --conform-action=allow \ --exceed-action=deny-404 \ --enforce-on-key=IP
たとえば、次の gcloud
コマンドでは、優先度 101 でレートベースの禁止ルールが作成され、リージョン コードが US
と一致するすべてのリクエストが 60 秒あたり 10 リクエストに制限されます。また、このルールでは、レートが 600 秒あたり 1,000 リクエストの上限を超えると、US
リージョンからのリクエストが 300 秒間禁止されます。禁止されたリクエストは、エラーコード 403
を返します。
gcloud compute security-policies rules create 101 \ --security-policy sec-policy \ --expression "origin.region_code == 'US'" \ --action rate-based-ban \ --rate-limit-threshold-count 10 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 300 \ --ban-threshold-count 1000 \ --ban-threshold-interval-sec 600 \ --conform-action allow \ --exceed-action deny-403 \ --enforce-on-key ALL
たとえば、次の gcloud
コマンドでは、優先度 102 でレートベースの禁止ルールが作成され、任意の送信元 IP アドレス範囲からのすべてのリクエストが 60 秒あたり 20 件のリクエストに制限されます。また、このルールでは、レートが 300 秒あたり 500 リクエストの上限を超えると、任意の送信元 IP アドレス範囲からのリクエストが 600 秒間禁止されます。禁止されたリクエストは、エラーコード 429
を返します。
gcloud compute security-policies rules create 102 \ --security-policy sec-policy \ --src-ip-ranges="*" \ --action rate-based-ban \ --rate-limit-threshold-count 20 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 600 \ --ban-threshold-count 500 \ --ban-threshold-interval-sec 300 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key ALL
Google Cloud コンソールと gcloud CLI を使用してセキュリティ ポリシーを作成する
このセクションの手順では、既存のグローバル外部アプリケーション ロードバランサ、または従来のアプリケーション ロードバランサとバックエンド サービスに適用するセキュリティ ポリシーを構成していることを前提としています。フィールドの入力方法の例については、サンプルを作成するをご覧ください。
コンソール
Google Cloud Armor セキュリティ ポリシーとルールを作成し、セキュリティ ポリシーをバックエンド サービスに接続します。
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[ポリシー] ページで、[ポリシーを作成] をクリックします。
[名前] フィールドに、ポリシーの名前を入力します。
(省略可)ポリシーの [説明] を入力します。
[ポリシータイプ] で、[バックエンド セキュリティ ポリシー] または [Edge のセキュリティ ポリシー] を選択します。
デフォルト ルールのアクションで、アクセスを許可するデフォルト ルールの場合は [許可] を選択します。IP アドレスまたは IP アドレス範囲へのアクセスを禁止するデフォルト ルールの場合は [拒否] を選択します。
デフォルトのルールは、他に適用するルールがない場合にのみ適用される、最も優先度の低いルールです。
拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。これは、アクセス権のないユーザーがアクセスしようとしたときに Google Cloud Armor によって表示されるエラー メッセージです。
作成するルールのタイプに関係なく、[次のステップ] をクリックします。
ルールを追加します。
- [ルールを追加] をクリックします。
- 省略可: ルールの説明を入力します。
モードを選択します。
- 基本モード: IP アドレスまたは範囲に基づいて、トラフィックを許可または拒否します。
- 詳細モード: ルール式に基づいてトラフィックを許可または拒否します。
[一致] フィールドで、ルールが適用される条件を指定します。
- 基本モード: ルールで一致する IP アドレスまたは IP 範囲を入力します。
- 詳細モード: 受信リクエストに対して評価する式またはサブ式を入力します。式の作成方法については、カスタムルール言語リファレンスをご覧ください。
[アクション] で、[許可] または [拒否] を選択して、ルールが一致する場合にトラフィックを許可または拒否します。
プレビュー モードを有効にするには、[有効にする] チェックボックスをオンにします。プレビュー モードでは、ルールの動作を確認できますが、ルールは有効になっていません。
ルールの優先度を入力します。0~2,147,483,646 の正の整数を指定できます。評価順序の詳細については、ルール評価の順序をご覧ください。
[完了] をクリックします。
さらにルールを追加するには、[ルールを追加] をクリックして前の手順を繰り返します。追加しない場合は、[次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- さらにターゲットを追加するには、[ターゲットを追加] をクリックします。
- [完了] をクリックします。
- [ポリシーを作成] をクリックします。
gcloud
新しい Google Cloud Armor セキュリティ ポリシーを作成するには、
gcloud compute security-policies create
コマンドを使用します。NAME
とDESCRIPTION
は、セキュリティ ポリシーの名前と説明に置き換えます。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]
次のコマンドは、以前に作成したポリシーを更新し、JSON の解析を有効にして、ログレベルを
VERBOSE
に変更します。gcloud compute security-policies update my-policy \ --json-parsing=STANDARD --log-level=VERBOSE
セキュリティ ポリシーにルールを追加するには、
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_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
フラグを使用します。次のコマンドは、IP アドレス1.2.3.4
からのトラフィックを許可するルールを追加し、user-agent ヘッダーに文字列example
を含めます。gcloud beta 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('/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 compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \ --action "allow"
リージョン外部アプリケーション ロードバランサにセキュリティ ポリシーを構成する
このセクションでは、リージョン スコープの Google Cloud Armor セキュリティ ポリシーをリージョン外部アプリケーション ロードバランサ用に構成する方法について説明します。
リージョンでロードバランスされたワークロードを保護する
リージョン スコープのバックエンド サービスを保護するセキュリティ ポリシーを構成するには、次の操作を行います。
リージョン スコープのセキュリティ ポリシーを作成します。
gcloud beta compute security-policies create POLICY_NAME \ --type=CLOUD_ARMOR \ --region=REGION
リージョン スコープのセキュリティ ポリシーをリージョン スコープのバックエンド サービスに接続します。
BACKEND_NAME
は、既存のリージョン スコープのバックエンド サービスの名前に置き換えます。gcloud beta compute backend-services update BACKEND_NAME \ --security-policy=POLICY_NAME \ --region=REGION
リージョン スコープの Google Cloud Armor セキュリティ ポリシーを適用する
セキュリティ管理者が、バックエンド ワークロードと WAF ルールのすべてが特定のリージョンにデプロイされるという所在地要件を満たそうとしている場合について考えてみましょう。事前に次の作業を行っているものとします。
- リージョン スコープのロード バランシング バックエンド サービスを目的のリージョンに作成している。
- デプロイで既存のグローバル スコープのセキュリティ ポリシーを無効にしている。
- 前のセクションと同様に、リージョン スコープのセキュリティ ポリシーを作成して同じリージョンに追加している。
以下のサンプル コマンドを使用することで、要件を満たしながらポリシーに WAF ルールやその他の高度なルールを追加できます。
ポリシーに WAF ルールを追加します。
gcloud beta compute security-policies rules create 1000 --action=deny-404 \ --expression="evaluatePreconfiguredExpr('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \ --security-policy=POLICY_NAME \ --region=REGION
ポリシーに高度なルールを追加します。
gcloud beta 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 beta 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
レート制限ルールを構成する
このセクションでは、スロットルまたはレートベースの禁止アクションを構成して、クライアントごとのレート制限を適用するように Google Cloud Armor ルールを構成する方法について説明します。
レートベースのスロットル調整のルール
gcloud CLI では、レートベースのスロットル調整のルールは次の形式になります。
gcloud compute security-policies rules create PRIORITY --security-policy=SECURITY_POLICY (--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE) --action "throttle" --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC --conform-action=[allow] --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] --exceed-redirect-type=[google-recaptcha|external-302] --exceed-redirect-target=REDIRECT_URL --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
単一キーに基づくレート制限
たとえば、次の gcloud
コマンドでは、1.2.3.0/24
の各 IP アドレスに対して 60 秒ごとに 100 リクエストのレート制限がある throttle
ルールが優先度 105
で作成されます。リクエストがスロットル調整の上限を超えると、エラーコード 429
が返されます。
gcloud compute security-policies rules create 105 \ --security-policy sec-policy \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=100 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=IP
たとえば、次の gcloud
コマンドでは、IP アドレス 1.2.3.0/24
から送信されたすべてのリクエスト HTTP ヘッダー User-Agent
の一意の各値に対して、60 秒ごとに 10 リクエストのレート制限がある throttle
ルールが優先度 110
で作成されます。リクエストがスロットル調整の上限を超えると、エラーコード 429
が返されます。
gcloud compute security-policies rules create 110 \ --security-policy sec-policy \ --src-ip-ranges="1.2.3.0/24" \ --action=throttle \ --rate-limit-threshold-count=10 \ --rate-limit-threshold-interval-sec=60 \ --conform-action=allow \ --exceed-action=deny-429 \ --enforce-on-key=HTTP-HEADER \ --enforce-on-key-name='User-Agent'
最後に、有効な reCAPTCHA 除外 Cookie が設定されているユーザーに対して、レートベースの禁止を発行できます。たとえば、次の gcloud
コマンドは、優先度 115
の throttle
ルールを作成します。このルールでは、有効な reCAPTCHA 除外 Cookie を含むすべてのリクエストに対して、固有の reCAPTCHA 除外 Cookie ごとに 5 分あたり 20 リクエストのレート制限があります。スロットル調整の上限を超えるリクエストは、reCAPTCHA Enterprise で評価するためにリダイレクトされます。除外 Cookie と reCAPTCHA Enterprise の評価の詳細については、bot 管理の概要をご覧ください。
gcloud compute security-policies rules create 115 \ --security-policy sec-policy \ --expression="token.recaptcha_exemption.valid" \ --action=throttle \ --rate-limit-threshold-count=20 \ --rate-limit-threshold-interval-sec=300 \ --conform-action=allow \ --exceed-action=redirect \ --exceed-redirect-type=google-recaptcha \ --enforce-on-key=HTTP-COOKIE \ --enforce-on-key-name="recaptcha-ca-e"
複数のキーに基づくレート制限
enforce-on-key-configs
フラグを使用して、複数のレート制限キーに基づいてトラフィックをスロットルすることもできます。このフラグは、enforce-on-key
フラグと enforce-on-key-name
フラグの両方に代わるものです。enforce-on-key-configs
フラグには、KEY=NAME
ペアのカンマ区切りのリストが必要です。ただし、キーによっては名前の指定が不要な場合があります。
次の例では、ポリシー POLICY_NAME の throttle
ルールを作成します。このルールの優先度は 105
で、1.2.3.0/24
の IP アドレスから送信されたすべてのリクエストにレート制限が適用されます(HTTP-PATH
と site_id
の各組み合わせのリクエスト数の上限は 60 秒あたり 100)。リクエストがスロットル調整の上限を超えると、エラーコード 429
が返されます。
gcloud compute security-policies rules create 105 --security-policy=POLICY_NAME --src-ip-ranges="1.2.3.0/24" --action=throttle --rate-limit-threshold-count=100 --rate-limit-threshold-interval-sec=60 --conform-action=allow --exceed-action=deny-429 --enforce-on-key-configs="HTTP-PATH,HTTP-COOKIE=site_id"
レートベースの禁止ルール
gcloud CLI では、レートベースの禁止ルールは次の形式になります。
gcloud compute security-policies rules create PRIORITY \ --security-policy=SECURITY_POLICY \ (--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE) \ --action "rate-based-ban" \ --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \ --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \ --ban-duration-sec=BAN_DURATION_SEC \ --ban-threshold-count=BAN_THRESHOLD_COUNT \ --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \ --conform-action=[allow] \ --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] --exceed-redirect-type=[google-recaptcha|external-302] --exceed-redirect-target=REDIRECT_URL --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
たとえば、次の gcloud
コマンドでは、各 IP アドレスに対して優先度 100 でレートベースの禁止ルールが作成され、IP アドレスのリクエストが値 tuna
を持つヘッダー fish
と一致して、120 秒あたりのリクエスト数の上限(50 件)を超えると、300 秒間禁止されます。禁止されたリクエストは、エラーコード 404
を返します。
gcloud compute security-policies rules create 100 \ --security-policy=sec-policy \ --expression="request.headers['fish'] == 'tuna'" \ --action=rate-based-ban \ --rate-limit-threshold-count=50 \ --rate-limit-threshold-interval-sec=120 \ --ban-duration-sec=300 \ --conform-action=allow \ --exceed-action=deny-404 \ --enforce-on-key=IP
たとえば、次の gcloud
コマンドでは、優先度 101 でレートベースの禁止ルールが作成され、リージョン コードが US
と一致するすべてのリクエストが 60 秒あたり 10 リクエストに制限されます。また、このルールでは、レートが 600 秒あたり 1,000 リクエストの上限を超えると、US
リージョンからのリクエストが 300 秒間禁止されます。禁止されたリクエストは、エラーコード 403
を返します。
gcloud compute security-policies rules create 101 \ --security-policy sec-policy \ --expression "origin.region_code == 'US'" \ --action rate-based-ban \ --rate-limit-threshold-count 10 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 300 \ --ban-threshold-count 1000 \ --ban-threshold-interval-sec 600 \ --conform-action allow \ --exceed-action deny-403 \ --enforce-on-key ALL
たとえば、次の gcloud
コマンドでは、優先度 102 でレートベースの禁止ルールが作成され、任意の送信元 IP アドレス範囲からのすべてのリクエストが 60 秒あたり 20 件のリクエストに制限されます。また、このルールでは、レートが 400 秒あたり 500 リクエストの上限を超えると、任意の送信元 IP アドレス範囲からのリクエストが 600 秒間禁止されます。禁止されたリクエストは、エラーコード 429
を返します。
gcloud compute security-policies rules create 102 \ --security-policy sec-policy \ --src-ip-ranges="*" \ --action rate-based-ban \ --rate-limit-threshold-count 20 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 600 \ --ban-threshold-count 500 \ --ban-threshold-interval-sec 400 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key ALL
bot 管理のルールを構成する
このセクションでは、Google Cloud Armor セキュリティ ポリシー ルールを bot 管理用に構成する方法について説明します。詳細については、bot 管理の概要をご覧ください。
reCAPTCHA Enterprise の手動チャレンジで人と自動クライアントを区別する
独自の reCAPTCHA WAF サイトキーをセキュリティ ポリシーに関連付ける(または関連付けを解除する)には、次のコマンドを使用します。その場合、セキュリティ ポリシー名(SECURITY_POLICY)と reCAPTCHA WAF チャレンジ サイトキー(SITE_KEY)を適宜置き換えます。
gcloud compute security-policies update SECURITY_POLICY \ --recaptcha-redirect-site-key SITE_KEY
次の例では、reCAPTCHA WAF サイトキーをセキュリティ ポリシーに関連付けます。関連するサイトキーは、特定のセキュリティ ポリシーで手動確認機能を使用するすべてのルールに適用されます。
gcloud compute security-policies update my-policy \ --recaptcha-redirect-site-key "SITE_KEY"
次のように、reCAPTCHA WAF サイトキーをセキュリティ ポリシーに関連付けることもできます。
gcloud compute security-policies update my-policy \ --recaptcha-redirect-site-key ""
reCAPTCHA Enterprise の評価用にトラフィックを内部でリダイレクトするルールを作成するには、gcloud
で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \ --security-policy SECURITY_POLICY \ (--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE) \ --action redirect \ --redirect-type google-recaptcha
次の例では、reCAPTCHA Enterprise の手動チャレンジで /login.html
に到達しようとするトラフィックをリダイレクトするルールを作成します。
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches(\"/login.html\")" \ --action redirect \ --redirect-type google-recaptcha
reCAPTCHA Enterprise のフリクションレス評価を適用する
先に進む前に、bot 管理の概要で、reCAPTCHA Enterprise のアクション トークンまたはセッション トークンを使用する際の前提条件を確認してください。
token.recaptcha_action.ATTRIBUTE
を使用して、reCAPTCHA Enterprise アクション トークンから属性を抽出します。ATTRIBUTE は、Google Cloud Armor のルール言語の有効なトークン属性で置き換えます。同様に、reCAPTCHA Enterprise セッション トークンに token.recaptcha_session.ATTRIBUTE
を使用できます。利用可能な reCAPTCHA Enterprise トークン属性の構文の詳細については、ルール言語リファレンスをご覧ください。
次の例では、/login.html
に向かい、かつ、reCAPTCHA Enterprise アクション トークンのスコアが 0.8
以上のトラフィックを許可するルールを作成します。
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches(\"/login.html\") && token.recaptcha_action.score >= 0.8" \ --action allow
リダイレクト(302 レスポンス)
ユーザーが構成した URL にトラフィックをリダイレクトするルールを作成するには、gcloud
で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \ --security-policy SECURITY_POLICY \ (--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE) \ --action redirect \ --redirect-type external-302 \ --redirect-target REDIRECT_URL
次の例では、10.10.10.0/24 からのトラフィックを https://www.example.com へリダイレクトするルールを作成します。
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --src-ip-ranges "10.10.10.0/24" \ --action redirect \ --redirect-type external-302 \ --redirect-target "https://www.example.com"
リクエストのデコレート
トラフィックを許可する一方で、保護されたバックエンドにプロキシ転送する前にカスタム ヘッダーとユーザー定義の静的値を追加するルールを作成するには、gcloud
で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \ --security-policy SECURITY_POLICY \ (--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE) \ --action allow \ --request-headers-to-add HEADER_1=VALUE_1,HEADER_2=VALUE_2,...
次の例では、/login.html
に向かい、かつ、reCAPTCHA Enterprise アクション トークン スコアが 0.2
未満のトラフィックにカスタム ヘッダーを追加するルールを作成します。
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches("/login.html") && token.recaptcha_action.score < 0.2" \ --action allow \ --request-headers-to-add "reCAPTCHA-Warning=high"
適応型保護を使用する
適応型保護はセキュリティ ポリシー単位で適用されます。
コンソール
セキュリティ ポリシーの適応型保護を有効にするには:
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。
[編集] をクリックします。
[適応型保護] で [有効] を選択します。
[更新] をクリックします。
セキュリティ ポリシーの適応型保護を無効にするには:
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。
[編集] をクリックします。
[適応型保護] で [有効] をオフにします。
[更新] をクリックします。
gcloud
セキュリティ ポリシーの適応型保護を有効にするには:
gcloud compute security-policies update MY-SECURITY-POLICY \ --enable-layer7-ddos-defense
セキュリティ ポリシーの適応型保護を無効にするには:
gcloud compute security-policies update MY-SECURITY-POLICY \ --no-enable-layer7-ddos-defense
使用可能な事前構成ルールを一覧表示する
事前構成されたルールを一覧表示して、Google Cloud Armor が提供する ModSecurity Core Rule Set など、事前定義されたアプリケーション保護ルールとシグネチャを表示します。これらの事前構成されたルールには、Google Cloud Armor が受信リクエストに対して評価するために使用する複数の組み込みシグネチャが含まれています。カスタムルール言語リファレンスを使用して、事前構成済みのルールを新規または既存のルールに追加します。
詳細については、事前構成されたルールをご覧ください。
gcloud
gcloud compute security-policies list-preconfigured-expression-sets
コマンドを実行します。gcloud compute security-policies list-preconfigured-expression-sets
次の例は、コマンドからの出力形式を示しています。
EXPRESSION_SET expression-set-1 RULE_ID SENSITIVITY expression-set-1-id-1 sensitivity-value-1 expression-set-1-id-2 sensitivity-value-2 expression-set-2 alias-1 RULE_ID SENSITIVITY expression-set-2-id-1 sensitivity-value-1 expression-set-2-id-2 sensitivity-value-2
次の例には、コマンドの実際の出力のサンプルが含まれています。実際の出力には、Google Cloud Armor WAF ルールのチューニングにリストされているすべてのルールが含まれているので注意してください。
gcloud compute security-policies list-preconfigured-expression-sets
EXPRESSION_SET sqli-canary RULE_ID SENSITIVITY owasp-crs-v030001-id942110-sqli 2 owasp-crs-v030001-id942120-sqli 2 … xss-canary RULE_ID SENSITIVITY owasp-crs-v030001-id941110-xss 1 owasp-crs-v030001-id941120-xss 1 … sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
セキュリティ ポリシーを一覧表示する
以降の手順を使用して、現在のプロジェクトまたは指定したプロジェクト内のすべての Google Cloud Armor セキュリティ ポリシーを一覧表示します。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
特定のポリシーを表示するには、[セキュリティ ポリシー] ページのポリシーのリストで該当の名前をクリックします。
gcloud
gcloud compute security-policies list
次に例を示します。
gcloud compute security-policies list
NAME my-policy
詳細については、gcloud compute security-policies list
をご覧ください。
セキュリティ ポリシーを更新する
以降の手順を使用して、Google Cloud Armor のセキュリティ ポリシーを更新します。たとえば、ポリシーの説明を変更する、デフォルトのルールの動作を変更する、ターゲット バックエンド サービスを変更する、新しいルールを追加する、といった操作が可能です。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
特定のポリシーを更新するには、[セキュリティ ポリシー] ページのポリシーのリストで、更新したいポリシーの [
メニュー] をクリックします。- デフォルトのルール アクションのポリシーの説明を更新するには、[編集] を選択して、必要な変更を行い、[更新] をクリックします。
- ルールを追加するには、[ルールの追加] を選択し、セキュリティ ポリシーにルールを追加するの手順に沿って操作します。
- ポリシーのターゲット バックエンド サービスを変更するには、[ターゲットへのポリシーの適用] を選択し、[ターゲットを追加] をクリックしてターゲットを選択してから、[追加] をクリックします。
gcloud
セキュリティ ポリシーを更新するには、次の Google Cloud CLI の手順を行います。
- セキュリティ ポリシーのルールを更新するには、セキュリティ ポリシーで 1 つのルールを更新するをご覧ください。
- セキュリティ ポリシーにルールを追加するには、セキュリティ ポリシーにルールを追加するをご覧ください。
- セキュリティ ポリシーからルールを削除するには、セキュリティ ポリシーからルールを削除するをご覧ください。
- 1 回の更新で複数のルールを更新するには(アトミック アップデート)、セキュリティ ポリシーのルールをアトミックに更新するをご覧ください。
- セキュリティ ポリシー(説明フィールドなど)のルール以外のフィールドを更新するには、セキュリティ ポリシーをエクスポートするとセキュリティ ポリシーをインポートするをご覧ください。
セキュリティ ポリシーをエクスポートする
Google Cloud CLI を使用して、Google Cloud Armor セキュリティ ポリシーを YAML ファイルまたは JSON ファイルとしてエクスポートできます。ポリシーをエクスポートすると、そのコピーを取得して、ソース管理で変更や保存が可能です。
gcloud
次のコマンドの
NAME
は、セキュリティ ポリシーの名前です。有効なファイル形式は 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
エクスポートされたファイルは、任意のテキスト エディタで変更し、
import
コマンドを使用して Google Cloud にインポートできます。
セキュリティ ポリシーをインポートする
Google Cloud CLI を使用すると、Google Cloud Armor セキュリティ ポリシーを YAML ファイルまたは JSON ファイルからインポートできます。import
コマンドを使用して、既存のポリシーのルールを更新することはできません。代わりに、セキュリティ ポリシーで 1 つのルールを更新する手順でルールを 1 つずつ更新するか、Google Cloud Armor セキュリティ ポリシーのルールをアトミックに更新するの手順ですべてのルールを一度に更新する必要があります。
gcloud
セキュリティ ポリシーをインポートするには、gcloud compute security-policies import NAME
コマンドを使用します。NAME
は、インポートするセキュリティ ポリシーの名前に置き換えます。ファイル形式を指定しない場合は、ファイル構造に基づいて正しい形式が推定されます。構造が無効な場合は、エラーが表示されます。
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 コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、削除するセキュリティ ポリシーの名前の横にあるチェックボックスをオンにします。
ページの右上で
[削除] をクリックします。
gcloud
gcloud compute security-policies delete NAME
を使用します。NAME
は、セキュリティ ポリシーの名前に置き換えます。
gcloud compute security-policies delete NAME
セキュリティ ポリシーをバックエンド サービスに接続する
以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーをバックエンド サービスに接続します。1 つのセキュリティ ポリシーは複数のバックエンド サービスに接続できますが、1 つのバックエンド サービスはセキュリティ ポリシーの種類ごとに 1 つだけに接続できます。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ターゲット] タブをクリックします。
[新しいターゲットにポリシーを適用] をクリックします。
[ターゲットを追加] をクリックします。
[ターゲット] リストでターゲットを選択し、[追加] をクリックします。
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
バックエンド サービスからセキュリティ ポリシーを削除する
以降の手順を使用して、Google Cloud Armor のバックエンド セキュリティ ポリシーまたはエッジ セキュリティ ポリシーをバックエンド サービスから削除します。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ターゲット] タブをクリックします。
ポリシーを削除する対象のバックエンド サービスを選択します。
[削除] をクリックします。
[ターゲットを削除] メッセージで、[削除] をクリックします。
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 ""
セキュリティ ポリシーをバックエンド バケットに接続する
以降の手順を使用して、Google Cloud Armor のエッジ セキュリティ ポリシーをバックエンド バケットに接続します。エッジ セキュリティ ポリシーは、複数のバックエンド バケットに接続できます。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ターゲット] タブをクリックします。
[新しいターゲットにポリシーを適用] をクリックします。
[ターゲットを追加] をクリックします。
[ターゲット] リストでターゲットを選択し、[追加] をクリックします。
gcloud
エッジ セキュリティ ポリシーをバックエンド バケットに接続する場合は、cloud compute backend-buckets
コマンドと --edge-security-policy
フラグを使用します。
gcloud compute backend-services update my-bucket \ --edge-security-policy my-edge-policy
バックエンド バケットからセキュリティ ポリシーを削除する
以降の手順を使用して、Google Cloud Armor のエッジ セキュリティ ポリシーをバックエンド バケットから削除します。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ターゲット] タブをクリックします。
ポリシーを削除する対象のバックエンド サービスを選択します。
[削除] をクリックします。
[ターゲットを削除] メッセージで、[削除] をクリックします。
gcloud
バックエンド バケットからエッジ セキュリティ ポリシーを削除する場合は、cloud compute backend-buckets
コマンドと --edge-security-policy
フラグを使用します。
gcloud compute backend-services update my-bucket \ --edge-security-policy ""
セキュリティ ポリシーにルールを追加する
以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーにルールを追加します。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ルール] タブをクリックします。
[ルールを追加] をクリックします。
(省略可)ルールの説明を入力します。
モードを選択します。
- 基本モード: IP アドレスまたは範囲に基づいて、トラフィックを許可または拒否します。
- 詳細モード: ルール式に基づいてトラフィックを許可または拒否します。
[一致] フィールドで、ルールが適用される条件を指定します。
- 基本モード: ルールで一致する IP アドレス範囲を 1 つから 5 つまでの間で入力します。
詳細モード: 受信リクエストに対して評価する式またはサブ式を入力します。式の作成方法と以下の例の読み取り方法については、カスタムルール言語リファレンスをご覧ください。
次の式は、IP アドレス
1.2.3.4
からのリクエストを照合し、ユーザー エージェント ヘッダーに文字列example
を含めます。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('/bad_path/')
次の式は、Base64 でデコードされた
user-id
ヘッダーの値に特定の値が含まれている場合に、リクエストを照合します。has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
事前構成された式セットを使用する次の式は、SQLi 攻撃を照合します。
evaluatePreconfiguredExpr('sqli-stable')
[アクション] で [許可] または [拒否] を選択します。
拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。
ルールのプレビュー モードを有効にする場合は、[有効] チェックボックスをオンにします。
[優先度] フィールドに正の整数を入力します。
[追加] をクリックします。
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
たとえば、次のコマンドは、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
フラグを使用します。次のコマンドは、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('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('/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 コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示され、ページ中央の [ルール] タブにポリシールールが一覧表示されます。
gcloud
次の gcloud
コマンドを使用して、1 つのセキュリティ ポリシー内のすべてのルールを、ポリシーの説明とともに一覧表示します。
gcloud compute security-policies describe NAME \
次の 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
セキュリティ ポリシーの 1 つのルールを更新する
以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーの単一のルールを更新します。複数のルールをアトミックに更新するには、セキュリティ ポリシーで複数のルールをアトミックに更新するをご覧ください。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ルール] タブをクリックします。
更新するルールの横にある
[編集] をクリックします。[ルールの編集] ページが表示されます。必要な変更を行い、[更新] をクリックします。
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
をご覧ください。
セキュリティ ポリシーの複数のルールをアトミックに更新する
アトミックに更新を行うと、1 回の更新で複数のルールに変更が適用されます。ルールを 1 つずつ更新すると、古いルールと新しいルールが少しの間同時に適用されるため、意図しない動作が発生することがあります。
複数のルールをアトミックに更新するには、現在のセキュリティ ポリシーを JSON ファイルまたは YAML ファイルにエクスポートして、ファイルを変更します。変更したファイルを使用して新しいセキュリティ ポリシーを作成し、関連するバックエンド サービスのセキュリティ ポリシーを切り替えます。
gcloud
次の例に示すように、更新するポリシーをエクスポートします。
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
任意のテキスト エディタを使用してポリシーを変更します。たとえば、既存ルールの優先度を変更して、新しいルールを追加できます。
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
次の例に示すように、新しい Google Cloud Armor セキュリティ ポリシーを作成し、変更したファイルの名前と形式を指定します。
gcloud compute security-policies create new-policy \ --file-name modified-policy \ --file-format yaml
次の例に示すように、関連するバックエンド サービスから古いセキュリティ ポリシーを削除します。
gcloud compute backend-services update my-backend \ --security-policy ""
次の例に示すように、新しいセキュリティ ポリシーをバックエンド サービスに追加します。
gcloud compute backend-services update my-backend \ --security-policy new-policy
古いポリシーが使用されていない場合は、ポリシーを削除します。
gcloud compute security-policies delete my-policy
セキュリティ ポリシーからルールを削除する
以降の手順を使用して、Google Cloud Armor セキュリティ ポリシーからルールを削除します。
コンソール
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[セキュリティ ポリシー] ページで、セキュリティ ポリシーの名前をクリックします。[ポリシーの詳細] ページが表示されます。
ページ中央の [ルール] タブで、削除するルールの横にあるチェックボックスをオンにします。
[削除] をクリックします。
gcloud
次のコマンドを使用して、指定された優先度のルールを、指定されたセキュリティ ポリシーから削除します。一度に変更できるセキュリティ ポリシーは 1 つだけですが、一度に複数のルールを削除できます。
gcloud compute security-policies rules delete PRIORITY [...] [ --security-policy POLICY_NAME \ ]
次に例を示します。
gcloud compute security-policies rules delete 1000 \ --security-policy my-policy