Ограничение скорости с помощью Cloud Armor

1. Введение

Балансировка нагрузки Google Cloud HTTP(S) развернута на периферии сети Google в точках присутствия (POP) Google по всему миру. Пользовательский трафик, направляемый к балансировщику нагрузки HTTP(S), поступает в ближайшую к пользователю точку присутствия, а затем распределяется по глобальной сети Google на ближайший бэкэнд, обладающий достаточной пропускной способностью.

Cloud Armor — это система обнаружения атак типа «отказ в обслуживании» и межсетевой экран веб-приложений (WAF) от Google. Cloud Armor тесно связан с балансировщиком нагрузки HTTP Google Cloud и позволяет проверять входящий трафик на наличие нежелательных запросов. Функция ограничения скорости позволяет ограничивать трафик к ресурсам бэкэнда в зависимости от объема запросов и предотвращает потребление ресурсов вашей виртуальной частной сети (VPC) нежелательным трафиком.

В этой лабораторной работе вы настроите HTTP-балансировщик нагрузки с глобальными бэкэндами, как показано на схеме ниже. Затем вы проведете стресс-тест балансировщика нагрузки и добавите политику ограничения скорости Cloud Armor, чтобы ограничить трафик, поступающий к ресурсам ваших бэкэндов.

2e1b99d22f4f32a.png

Что вы узнаете

  • Как настроить HTTP-балансировщик нагрузки с соответствующими проверками работоспособности.
  • Как создать политику ограничения скорости запросов в Cloud Armor.
  • Как проверить, действительно ли политика ограничения скорости блокирует трафик при запуске стресс-теста на виртуальной машине.

Что вам понадобится

  • Базовые знания сетевых технологий и протокола HTTP.
  • Базовые знания командной строки Unix/Linux.

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
  • Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

bce75f34b2c53987.png

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.

Прежде чем начать

Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Включить API

Включите все необходимые службы

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Настройте правила брандмауэра, чтобы разрешить HTTP-трафик к бэкэндам.

Настройте правила брандмауэра, чтобы разрешить HTTP-трафик к бэкэндам от проверок работоспособности Google Cloud и балансировщика нагрузки.

Мы будем использовать сеть VPC по умолчанию , созданную в вашем проекте. Создайте правило брандмауэра, разрешающее HTTP-трафик к бэкэндам. Проверки работоспособности определяют, какие экземпляры балансировщика нагрузки могут принимать новые соединения. Для балансировки нагрузки по HTTP запросы на проверку работоспособности к вашим балансируемым экземплярам поступают с адресов в диапазонах 130.211.0.0/22 ​​и 35.191.0.0/16. Ваши правила брандмауэра VPC должны разрешать эти соединения. Кроме того, балансировщики нагрузки взаимодействуют с бэкэндом по одному и тому же диапазону IP-адресов.

  1. В консоли Cloud перейдите в меню «Навигация» ( mainmenu.png ) > Сеть VPC > Межсетевой экран .

dbdf491e6d7863f3.png

  1. Обратите внимание на существующие правила брандмауэра для ICMP , внутренней сети , RDP и SSH. Каждый проект Google Cloud начинается с сети по умолчанию и этих правил брандмауэра.
  2. Нажмите «Создать правило брандмауэра» .
  3. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Имя

default-allow-health-check

Сеть

по умолчанию

Цели

Указанные целевые теги

Целевые метки

http-сервер

Фильтр источника

Диапазоны IP-адресов

Диапазоны IP-адресов источника

130.211.0.0/22, 35.191.0.0/16

Протоколы и порты

Укажите протоколы и порты, а затем проверьте TCP-соединение.

  1. Нажмите «Создать» .

В качестве альтернативы, если вы используете командную строку gcloud, ниже приведена команда:

gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server

4. Настройте шаблоны экземпляров и создайте управляемые группы экземпляров.

Группа управляемых экземпляров использует шаблон экземпляра для создания группы идентичных экземпляров. Используйте их для создания бэкэндов балансировщика нагрузки HTTP.

Настройте шаблоны экземпляров.

Шаблон экземпляра — это ресурс API, используемый для создания экземпляров виртуальных машин и управляемых групп экземпляров. Шаблоны экземпляров определяют тип машины, образ загрузочного диска, подсеть, метки и другие свойства экземпляра. Создайте один шаблон экземпляра для us-east1 и один для europe-west1 .

  1. В консоли Cloud перейдите в меню «Навигация» ( mainmenu.png ) > Compute Engine > Шаблоны экземпляров , а затем нажмите «Создать шаблон экземпляра» .
  2. В поле "Имя" введите us-east1-template .
  3. Для параметра «Серия» выберите N1 .
  4. Нажмите «Сеть», «Диски», «Безопасность», «Управление», «Индивидуальный доступ» .

b60e2a44c3e4d50e.png

  1. Перейдите в раздел «Управление» -

ee57f20ce55298fd.png

  1. В разделе «Метаданные» нажмите «Добавить элемент» и укажите следующее:

Ключ

Ценить

startup-script-url

gs://cloud-training/gcpnet/httplb/startup.sh

  1. Нажмите «Сеть» .
  2. Установите следующие значения, а все остальные оставьте по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Сеть (в разделе «Сетевые интерфейсы»)

по умолчанию

Подсеть (в разделе «Сетевые интерфейсы»)

по умолчанию (us-east1)

Сетевые теги

http-сервер

  1. Нажмите «Создать» .
  2. Дождитесь создания шаблона экземпляра.

Теперь создайте еще один шаблон экземпляра для подсети b, скопировав us-east1-template :

  1. Нажмите на us-east1-template , а затем выберите опцию «Копировать» вверху.
  2. В поле "Имя" введите europe-west1-template .
  3. Нажмите «Сеть», «Диски», «Безопасность», «Управление», «Индивидуальный доступ» .
  4. Нажмите «Сеть» .
  5. В разделе «Сетевые интерфейсы» отредактируйте интерфейс по умолчанию. Для параметра «Подсеть» выберите default (europe-west1) .
  6. Нажмите «Создать» .

Создайте группы управляемых экземпляров.

Создайте группу управляемых экземпляров в us-east1 и еще одну в europe-west1 .

  1. Оставаясь в Compute Engine , щелкните «Группы экземпляров» в левом меню.

72319de055de3942.png

  1. Нажмите «Создать группу экземпляров» . Выберите «Новая управляемая группа экземпляров (без сохранения состояния)».
  2. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Имя

us-east1-mig

Расположение

Несколько зон

Область

us-east1

Шаблон экземпляра

us-east1-template

Автомасштабирование > Политика автомасштабирования > Щелкните значок карандаша > Тип метрики

использование ЦП

Целевая загрузка ЦП

80, нажмите «Готово».

период охлаждения

45

Минимальное количество экземпляров

1

Максимальное количество экземпляров

5

  1. Нажмите «Создать» .

Теперь повторите ту же процедуру, чтобы создать вторую группу экземпляров для europe-west1-mig в europe-west1 :

  1. Нажмите «Создать группу экземпляров» .
  2. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Имя

europe-west1-mig

Расположение

Несколько зон

Область

europe-west1

Шаблон экземпляра

europe-west1-template

Автомасштабирование > Политика автомасштабирования > Щелкните значок карандаша > Тип метрики

использование ЦП

Целевая загрузка ЦП

80, нажмите «Готово».

период охлаждения

45

Минимальное количество экземпляров

1

Максимальное количество экземпляров

5

  1. Нажмите «Создать» .

5. Настройте балансировщик нагрузки HTTP.

Настройте HTTP-балансировщик нагрузки для распределения трафика между двумя бэкэндами ( us-east1-mig в us-east1 и europe-west1-mig в europe-west1), как показано на сетевой диаграмме:

2e1b99d22f4f32a.png

Запустите настройку

  1. В консоли Cloud нажмите меню навигации ( mainmenu.png ) > Щелкните «Сетевые службы» > «Балансировка нагрузки» , а затем нажмите «Создать балансировщик нагрузки» .
  2. В разделе «Балансировка нагрузки HTTP(S)» нажмите « Начать настройку» .

8197d8f041e8eafd.png

  1. Выберите «Из интернета на мои виртуальные машины» , «Классический балансировщик нагрузки HTTP(S)» и нажмите «Продолжить» .
  2. Установите имя как http-lb.

Настройте бэкэнд.

Серверные службы направляют входящий трафик на один или несколько подключенных серверов. Каждый сервер состоит из группы экземпляров и дополнительных метаданных, определяющих пропускную способность.

  1. Нажмите на «Конфигурация бэкэнда» .
  2. Для выбора серверных служб и серверных хранилищ нажмите «Создать серверную службу» .
  3. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (выберите вариант, как указано)

Имя

http-бэкенд

Группа экземпляров

us-east1-mig

Номера портов

80

Режим балансировки

Ставка

Максимальная скорость выстрела

50 (за каждый случай)

Емкость

100

  1. Нажмите «Готово» .
  2. Нажмите «Добавить бэкэнд» .
  3. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (выберите вариант, как указано)

Группа экземпляров

europe-west1-mig

Номера портов

80

Режим балансировки

Использование

Максимальная загрузка бэкэнда

80

Емкость

100

  1. Нажмите «Готово» .
  2. Для проверки состояния здоровья выберите «Создать проверку состояния здоровья» .

199239806577ceac.png

  1. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (выберите вариант, как указано)

Имя

http-health-check

Протокол

TCP

Порт

80

20f7af9fce140475.png

  1. Нажмите « Сохранить ».
  2. Установите флажок «Включить ведение журнала» .
  3. Установите частоту дискретизации на 1:

dab4b15c13917786.png

  1. Нажмите «Создать» , чтобы создать серверную службу.

2db64614f855f239.png

Настройте интерфейс пользователя.

Правила для хоста и пути определяют, как будет направляться ваш трафик. Например, вы можете направлять видеотрафик на один бэкэнд, а статический трафик — на другой. Однако в этой лабораторной работе вы не будете настраивать правила для хоста и пути.

  1. Нажмите на «Конфигурация интерфейса» .
  2. Укажите следующие значения, оставив все остальные значения по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Протокол

HTTP

IP-версия

IPv4

IP-адрес

Эфемерный

Порт

80

  1. Нажмите «Готово» .
  2. Нажмите «Добавить IP-адрес и порт внешнего интерфейса» .
  3. Укажите следующие значения, оставив все остальные значения по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Протокол

HTTP

IP-версия

IPv6

IP-адрес

Эфемерный

Порт

80

  1. Нажмите «Готово» .

Проверьте и создайте HTTP-балансировщик нагрузки.

  1. Нажмите «Просмотреть и завершить» .

2c88715aa5f22800.png

  1. Просмотрите серверную часть и интерфейс пользователя .

b2fffef90be309f0.png

  1. Нажмите «Создать» .
  2. Дождитесь создания балансировщика нагрузки.
  3. Щелкните по названию балансировщика нагрузки ( http-lb ).
  4. Обратите внимание на IPv4 и IPv6 адреса балансировщика нагрузки для следующей задачи. Они будут обозначаться как [LB_IP_v4] и [LB_IP_v6] соответственно.

6. Проверьте работу балансировщика нагрузки HTTP.

Теперь, когда вы создали HTTP-балансировщик нагрузки для своих бэкэндов, убедитесь, что трафик перенаправляется на бэкэнд-сервис.

Получите доступ к балансировщику нагрузки HTTP.

Чтобы проверить доступ по IPv4 к балансировщику нагрузки HTTP, откройте новую вкладку в браузере и перейдите по адресу http://[LB_IP_v4] . Убедитесь, что вы заменили [LB_IP_v4] на IPv4-адрес балансировщика нагрузки.

Если у вас есть локальный IPv6-адрес, попробуйте использовать IPv6-адрес балансировщика нагрузки HTTP, перейдя по адресу http://[LB_IP_v6]. Убедитесь, что вы заменили [LB_IP_v6] на IPv6-адрес балансировщика нагрузки.

812d1fc75d9dfb3c.png

Проведите стресс-тестирование балансировщика нагрузки HTTP.

Создайте новую виртуальную машину для имитации нагрузки на HTTP-балансировщик нагрузки с помощью Siege. Затем определите, распределяется ли трафик между обоими бэкэндами при высокой нагрузке.

  1. В консоли перейдите в меню «Навигация» ( mainmenu.png ) > Compute Engine > Экземпляры виртуальных машин .
  2. Нажмите «Создать экземпляр» .
  3. Установите следующие значения, все остальные значения оставьте по умолчанию:

Свойство

Значение (введите значение или выберите нужный вариант)

Имя

siege-vm

Область

us-west1

Зона

us-west1-c

Ряд

Н1

  1. Нажмите «Создать» .
  2. Дождитесь создания экземпляра siege-vm .
  3. Для запуска siege-vm нажмите SSH , чтобы открыть терминал и подключиться.
  4. Для установки Siege выполните следующую команду:
sudo apt-get -y install siege
  1. Чтобы сохранить IPv4-адрес балансировщика нагрузки HTTP в переменной среды, выполните следующую команду, заменив [LB_IP_v4] на IPv4-адрес:
export LB_IP=[LB_IP_v4]
  1. Для имитации нагрузки выполните следующую команду:
siege -c 250 http://$LB_IP

Результат должен выглядеть примерно так ( не копируйте; это пример вывода ):

New configuration template added to /home/student/.siege
Run siege -C to view the current settings in that file
** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. В консоли Cloud нажмите на меню «Навигация» ( mainmenu.png ), нажмите «Сетевые службы» > «Балансировка нагрузки» .
  2. Нажмите http-lb .
  3. Перейдите на вкладку «Мониторинг» . Отслеживайте трафик между Северной Америкой и двумя бэкэндами в течение 2-3 минут.

Первоначально трафик должен направляться только в порт us-east1-mig , но по мере увеличения количества RPS трафик также будет направляться в порт europe-west1-mig .

ead1e6d5c1f4cc4b.png

Это демонстрирует, что по умолчанию трафик перенаправляется на ближайший бэкэнд, но при очень высокой нагрузке трафик может быть распределен между бэкэндами.

e5c6a657706c832c.png

  1. Вернитесь в SSH- терминал siege-vm .
  2. Нажмите CTRL+C , чтобы остановить осаду.

7. Создайте политику ограничения скорости запросов в Cloud Armor.

В этом разделе вы будете использовать Cloud Armor, чтобы запретить виртуальной машине siege доступ к балансировщику нагрузки HTTP, установив политику ограничения скорости запросов.

  1. В Cloud Shell (инструкции по использованию Cloud Shell см. в разделе «Запуск Cloud Shell» в подразделе « Настройка и требования ») создайте политику безопасности с помощью gcloud:
gcloud compute security-policies create rate-limit-siege \
    --description "policy for rate limiting"
  1. Далее добавьте правило ограничения скорости:
gcloud beta compute security-policies rules create 100 \
    --security-policy=rate-limit-siege     \
    --expression="true" \
    --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
  1. Привяжите политику безопасности к серверной службе http-backend:
gcloud compute backend-services update http-backend \
    --security-policy rate-limit-siege –-global
  1. В консоли перейдите в меню «Навигация» > «Сетевая безопасность» > «Cloud Armor» .
  2. Нажмите кнопку «Ограничение скорости». Ваша политика должна выглядеть примерно так:

8be87aa31c2ed74e.png

Проверьте политику безопасности.

  1. Вернитесь в SSH-терминал виртуальной машины siege-vm.
  2. Выполните команду curl к IP-адресу балансировщика нагрузки, чтобы убедиться, что вы по-прежнему можете к нему подключиться; вы должны получить ответ 200.
curl http://$LB_IP
  1. Для имитации нагрузки в SSH-терминале виртуальной машины siege выполните следующую команду:
siege -c 250 http://$LB_IP

Результат должен выглядеть примерно так (не копируйте; это пример вывода):

** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. Изучите журналы политики безопасности, чтобы определить, блокируется ли этот трафик также.
  2. В консоли перейдите в меню «Навигация» > «Сетевая безопасность» > «Cloud Armor» .
  3. Нажмите «Rate-limit-siege» .
  4. Нажмите «Журналы» .

f8be7c01c3d7c8f5.png

  1. Нажмите « Просмотреть журналы политик» .
  2. На странице «Ведение журнала» обязательно удалите весь текст в окне предварительного просмотра запроса.
  3. Выберите ресурс Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb, затем нажмите «Добавить» . В качестве альтернативы, ниже приведен MQL-запрос (язык запросов мониторинга), который вы можете скопировать и вставить в редактор запросов.
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
  1. Теперь нажмите «Выполнить запрос» .
  2. Разверните запись в журнале результатов запроса.
  3. Разверните запись httpRequest . Запрос должен поступать с IP -адреса виртуальной машины siege . Если это не так, разверните другую запись в журнале.
  4. Разверните jsonPayload.
  5. Развернуть enforcedSecurityPolicy.

151f575ba7b3bde9.png

Обратите внимание, что для параметра configuredAction установлено значение RATE_BASED_BAN с именем rate-limit-siege .

  1. Для дополнительной проверки перейдите в меню «Навигация» ( mainmenu.png ), нажмите «Сетевые службы» > «Балансировка нагрузки ». Нажмите http-lb . Перейдите на вкладку «Мониторинг» .

ab9a8a66573a5ebd.png

На графиках вы можете увидеть трафик, передаваемый в рамках режима "осады". Вы также заметите, что трафик с ограничением скорости не достигает бэкэнда и блокируется политикой Cloud Armor.

Поздравляем! Вы успешно завершили лабораторную работу по ограничению скорости запросов с помощью Cloud Armor.

©2020 Google LLC. Все права защищены. Google и логотип Google являются товарными знаками Google LLC. Все остальные названия компаний и продуктов могут являться товарными знаками соответствующих компаний, с которыми они связаны.

8. Уборка лаборатории

  1. Перейдите в раздел «Сетевая безопасность» >> «Cloud Armor» >> «%НАЗВАНИЕ ПОЛИТИКИ%» и выберите «Удалить».

eeafa7cafa11c4c7.png

  1. Перейдите в раздел «Сеть» >> «Сетевые службы» >> «Балансировка нагрузки». Выберите созданный вами балансировщик нагрузки и нажмите «Удалить».

3886458f25cfbd36.png

Выберите серверную службу и проверку работоспособности в качестве дополнительных ресурсов для удаления.

a0193e91b2f4cb6f.png

  1. Перейдите в меню навигации ( mainmenu.png ) > Compute Engine > Группы экземпляров. Выберите обе группы управляемых экземпляров и нажмите «Удалить».

5027d56977997f70.png

Для подтверждения удаления введите слово «delete» в текстовое поле.

Дождитесь удаления групп управляемых экземпляров. Это также удалит экземпляры, входящие в группу. Удалить шаблоны можно только после удаления группы экземпляров.

  1. Перейдите к шаблонам экземпляров в левой боковой панели**.** Выберите оба шаблона экземпляров и нажмите «Удалить».

8d88abacd32c11ce.png

  1. Перейдите к экземплярам виртуальных машин в левой боковой панели.** Выберите многоточие рядом с экземпляром siege-vm и нажмите «Удалить».

2b58ab43695836e9.png

  1. Перейдите в меню навигации ( mainmenu.png ) > Сеть VPC > Брандмауэр . Выберите параметр default-allow-health-check и нажмите «Удалить».

561d5e771d36d85.png

9. Поздравляем!

Вы успешно внедрили ограничение скорости запросов с помощью Cloud Armor. Вы настроили HTTP-балансировщик нагрузки с бэкэндами в регионах us-east1 и europe-west1. Затем вы провели стресс-тестирование балансировщика нагрузки на виртуальной машине и внесли IP-адрес в черный список с помощью ограничения скорости запросов в Cloud Armor. Вы смогли изучить журналы политики безопасности, чтобы определить причину блокировки трафика.

Что мы рассмотрели

  • Как настроить шаблоны экземпляров и создать управляемые группы экземпляров.
  • Как настроить балансировщик нагрузки HTTP.
  • Как создать политику ограничения скорости запросов в Cloud Armor.
  • Как проверить, что политика ограничения скорости работает должным образом.

Следующие шаги

  • Попробуйте настроить политику ограничения скорости на основе диапазона исходных IP-адресов. Пример команды ниже:
gcloud alpha 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 alpha 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 IP