このページでは、さまざまなタイプのロードバランサとセキュリティ ポリシーのセキュリティ ポリシー構成の例について説明します。
外部アプリケーション ロードバランサにセキュリティ ポリシーを構成する
以下では、グローバル外部アプリケーション ロードバランサまたは従来のアプリケーション ロードバランサへのトラフィックを許可または拒否するルールを有効にするように 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 に適用されます。
サンプルを作成する
以降の手順を使用して、前のセクションで説明したサンプルの構成を作成します。
Console
以下の手順で外部ユーザーのセキュリティ ポリシーを構成します。
Google Cloud コンソールで、[Google Cloud Armor のポリシー]ページに移動します。
[ポリシーの作成] をクリックします。
[名前] フィールドに「
mobile-clients-policy
」と入力します。[説明] フィールドに「
Policy for external users
」と入力します。[デフォルトのルール アクション] で [拒否] を選択します。
[拒否ステータス] で [404(ファイル未検出)] を選択します。
[次のステップ] をクリックします。
ルールの追加:
- [ルールを追加] をクリックします。
- [説明] フィールドに「
allow traffic from 192.0.2.0/24
」と入力します。 - [モード] で [基本モード(IP アドレスまたは IP 範囲のみ)] を選択します。
- [一致] フィールドに「
192.0.2.0/24
」と入力します。 - [アクション] で [許可] を選択します。
- [優先度] に「
1000
」と入力します。 - [完了] をクリックします。
- [次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- [完了] をクリックします。
- [ポリシーの作成] をクリックします。
必要に応じて、Google Cloud Armor Adaptive Protection を有効にする
- Adaptive Protection を有効にするには、[有効] チェックボックスをオンにします。
以下の手順で内部ユーザーのポリシーを構成します。
- [ポリシーの作成] をクリックします。
- [名前] フィールドに「
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 コンソールまたは gcloud CLI を使用して作成できます。このセクションの手順では、既存のグローバル外部アプリケーション ロードバランサ、または従来のアプリケーション ロードバランサとバックエンド サービスに適用するセキュリティ ポリシーを構成していることを前提としています。フィールドの入力方法の例については、サンプルを作成するをご覧ください。
コンソール
Google Cloud Armor セキュリティ ポリシーとルールを作成し、セキュリティ ポリシーをバックエンド サービスに接続します。
Google Cloud コンソールで、[Google Cloud Armor のポリシー]ページに移動します。
[ポリシーの作成] をクリックします。
[名前] フィールドに、ポリシーの名前を入力します。
(省略可)ポリシーの [説明] を入力します。
[ポリシータイプ] で、[バックエンド セキュリティ ポリシー] または [Edge のセキュリティ ポリシー] を選択します。
デフォルト ルールのアクションで、アクセスを許可するデフォルト ルールの場合は [許可] を選択します。IP アドレスまたは IP アドレス範囲へのアクセスを禁止するデフォルト ルールの場合は [拒否] を選択します。
デフォルトのルールは、他に適用するルールがない場合にのみ適用される、最も優先度の低いルールです。
拒否ルールを作成している場合は、[拒否ステータス] メッセージを選択します。これは、アクセス権のないユーザーがアクセスしようとしたときに Google Cloud Armor によって表示されるエラー メッセージです。
構成するルールのタイプに関係なく、[次のステップ] をクリックします。
ルールの追加:
- [ルールを追加] をクリックします。
- 省略可: ルールの説明を入力します。
モードを選択します。
- 基本モード: IP アドレスまたは範囲に基づいて、トラフィックを許可または拒否します。
- 詳細モード: ルール式に基づいてトラフィックを許可または拒否します。
[一致] フィールドで、ルールが適用される条件を指定します。
- 基本モード: ルールで一致する IP アドレスまたは IP 範囲を入力します。
- 詳細モード: 受信リクエストに対して評価する式またはサブ式を入力します。式の作成方法については、カスタムルール言語属性の構成をご覧ください。
[アクション] で、[許可] または [拒否] を選択して、ルールが一致する場合にトラフィックを許可または拒否します。
プレビュー モードを有効にするには、[有効にする] チェックボックスをオンにします。プレビュー モードでは、ルールの動作を確認できますが、ルールは有効になっていません。
ルールの優先度を入力します。0~2,147,483,646 の正の整数を指定できます。評価順序の詳細については、ルール評価の順序をご覧ください。
[完了] をクリックします。
さらにルールを追加するには、[ルールを追加] をクリックして前の手順を繰り返します。追加しない場合は、[次のステップ] をクリックします。
ターゲットへのポリシーの適用:
- [ターゲットを追加] をクリックします。
- [ターゲット] リストで、ターゲットを選択します。
- さらにターゲットを追加するには、[ターゲットを追加] をクリックします。
- [完了] をクリックします。
- [ポリシーを作成] をクリックします。
gcloud
新しい 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
セキュリティ ポリシーにルールを追加するには、
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
からのトラフィックを遮断するルールを追加します。このルールの優先度は 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 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 "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 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
リージョン スコープの Google Cloud Armor セキュリティ ポリシーを適用する
セキュリティ管理者が、バックエンド ワークロードと WAF ルールのすべてが特定のリージョンにデプロイされるという所在地要件を満たそうとしている場合について考えてみましょう。事前に次の作業を行っているものとします。
- リージョン スコープのロード バランシング バックエンド サービスをリージョンに作成している。
- デプロイで既存のグローバル スコープのセキュリティ ポリシーを無効にしている。
- 前のセクションと同様に、リージョン スコープのセキュリティ ポリシーを作成して同じリージョンに追加している。
以下のサンプル コマンドを使用することで、要件を満たしながらポリシーに WAF ルールやその他の高度なルールを追加できます。
ポリシーに WAF ルールを追加します。
gcloud 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 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
次のステップ
- Google Cloud Armor セキュリティ ポリシーを構成する
- 詳しくは、レート制限をご覧ください。