このページでは、さまざまなタイプのロードバランサ用のセキュリティ ポリシーの構成例について説明します。
セキュリティ ポリシーの例
セキュリティ ポリシーを作成する
セキュリティ ポリシーは、 Trusted Cloud コンソールまたは gcloud CLI を使用して作成できます。このセクションの手順では、既存のグローバル外部アプリケーション ロードバランサ、または従来のアプリケーション ロードバランサとバックエンド サービスに適用するセキュリティ ポリシーを構成することを想定しています。フィールドの入力方法の例については、サンプルを作成するをご覧ください。
コンソール
Cloud Armor のセキュリティ ポリシーとルールを作成し、セキュリティ ポリシーをバックエンド サービスに接続します。
Trusted Cloud コンソールで、Google Cloud Armor ポリシーのページに移動します。
[ポリシーの作成] をクリックします。
[名前] フィールドに、ポリシーの名前を入力します。
(省略可)ポリシーの [説明] を入力します。
[ポリシータイプ] で、[バックエンド セキュリティ ポリシー] または [Edge のセキュリティ ポリシー] を選択します。
デフォルト ルールのアクションで、アクセスを許可するデフォルト ルールの場合は [許可] を選択します。IP アドレスまたは IP アドレス範囲へのアクセスを禁止するデフォルト ルールの場合は [拒否] を選択します。
デフォルトのルールは、他に適用するルールがない場合にのみ適用される、最も優先度の低いルールです。
拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。これは、アクセス権のないユーザーがアクセスしようとした場合に表示されるエラー メッセージです。
作成するルールのタイプに関係なく、[次のステップ] をクリックします。
ルールを追加します。
- [ルールを追加] をクリックします。
- 省略可: ルールの説明を入力します。
モードを選択します。
- 基本モード: IP アドレスまたは範囲に基づいて、トラフィックを許可または拒否します。
- 詳細モード: ルール式に基づいてトラフィックを許可または拒否します。
[一致] フィールドで、ルールが適用される条件を指定します。
- 基本モード: ルールで一致する IP アドレスまたは IP 範囲を入力します。
- 詳細モード: 受信リクエストに対して評価する式またはサブ式を入力します。式の作成方法については、カスタムルール言語属性の構成をご覧ください。
ルールが一致する場合にトラフィックを許可または拒否するため、[アクション] で [許可] または [拒否] を選択します。
プレビュー モードを有効にするには、[有効にする] チェックボックスをオンにします。プレビュー モードでは、ルールの動作を確認できますが、ルールは有効になっていません。
ルールの優先度を入力します。0~2,147,483,646 の正の整数を指定できます。評価順序の詳細については、ルール評価の順序をご覧ください。
[完了] をクリックします。
さらにルールを追加するには、[ルールを追加] をクリックして前の手順を繰り返します。追加しない場合は、[次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- さらにターゲットを追加するには、[ターゲットを追加] をクリックします。
- [完了] をクリックします。
- [ポリシーを作成] をクリックします。
gcloud
新しい 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
セキュリティ ポリシーにルールを追加するには、
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/24
と198.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"
リージョン外部アプリケーション ロードバランサ用のセキュリティ ポリシーを構成する
このセクションでは、リージョン スコープの Cloud Armor セキュリティ ポリシーをリージョン外部アプリケーション ロードバランサ用に構成する方法について説明します。
リージョンでロード バランシングされたワークロードを保護する
リージョン スコープのバックエンド サービスを保護するセキュリティ ポリシーを構成するには、次の操作を行います。
リージョン スコープのセキュリティ ポリシーを作成します。
gcloud compute security-policies create POLICY_NAME \ --type=CLOUD_ARMOR \ --region=REGION
リージョン スコープのセキュリティ ポリシーをリージョン スコープのバックエンド サービスに接続します。
BACKEND_NAME
は、既存のリージョン スコープのバックエンド サービスの名前に置き換えます。gcloud compute backend-services update BACKEND_NAME \ --security-policy=POLICY_NAME \ --region=REGION
リージョン スコープの Cloud Armor セキュリティ ポリシーを適用する
セキュリティ管理者が、「すべてのバックエンド ワークロードと WAF ルールが特定のリージョンにデプロイされていなければならない」という所在地要件を満たそうとしている場合について考えてみます。事前に次の作業を済ませているものとします。
- リージョン スコープのロード バランシング バックエンド サービスを目的のリージョンで作成する。
- デプロイで既存のグローバル スコープのセキュリティ ポリシーを無効にする。
- 前のセクションと同様に、リージョン スコープのセキュリティ ポリシーを作成して同じリージョンに追加する。
以下のサンプル コマンドを使用することで、要件を満たしながら 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
次のステップ
- Cloud Armor セキュリティ ポリシーを構成する
- レート制限について学習する。