1. Введение
Списки именованных IP-адресов Google Cloud Armor позволяют ссылаться на списки IP-адресов и диапазонов IP-адресов, поддерживаемые сторонними поставщиками. Вы можете настроить списки именованных IP-адресов в рамках политики безопасности. Вам не нужно вручную указывать каждый IP-адрес или диапазон IP-адресов по отдельности.
Что вы узнаете
- Преимущества списка именованных IP-адресов Cloud Armor
- Создайте политику безопасности Cloud Armor.
- Развернуть список именованных IP-адресов Cloud Armor
- Создать глобальный балансировщик нагрузки
- Создайте группу управляемых экземпляров с тестовым примером приложения.
Что вам понадобится
- Опыт работы с политиками безопасности и балансировщиками нагрузки.
2. Разрешить трафик только от разрешенных сторонних поставщиков.
Типичный пример использования — создание списка разрешенных IP-адресов, содержащего IP-адреса авторизованного стороннего партнера, чтобы гарантировать, что доступ к балансировщику нагрузки и бэкэндам будет иметь только трафик, поступающий от этого партнера.
Например, поставщикам CDN необходимо регулярно загружать контент с исходных серверов для его распределения по собственным кэшам. Партнерство с Google обеспечивает прямое соединение между поставщиками CDN и периферией сети Google. Пользователи CDN в Google Cloud могут использовать это прямое соединение во время загрузки контента с исходных серверов. В этом случае пользователь CDN может захотеть создать политику безопасности, которая разрешает трафик только от конкретного поставщика CDN.
В этом примере провайдер CDN публикует свой список IP-адресов 23.235.32.0/20, 43.249.72.0/22, ⋯,. Пользователь CDN настраивает правило безопасности, которое разрешает трафик только с этих IP-адресов. В результате разрешается доступ к двум точкам доступа провайдера CDN (23.235.32.10 и 43.249.72.10), и, следовательно, их трафик разрешен. Трафик с неавторизованной точки доступа 198.51.100.1 блокируется.

именованный IP-адрес Google Cloud Armor
3. Упрощение настройки и управления за счет использования предварительно заданных правил.
Провайдеры CDN часто используют хорошо известные IP-адреса, которые необходимы многим пользователям CDN. Эти списки со временем меняются, поскольку провайдеры добавляют, удаляют и обновляют IP-адреса.
Использование списка именованных IP-адресов в правиле политики безопасности упрощает процесс настройки и управления IP-адресами, поскольку Google Cloud Armor автоматически синхронизирует информацию от поставщиков CDN ежедневно. Это исключает трудоемкий и подверженный ошибкам процесс ручного ведения большого списка IP-адресов.
Поставщики списков IP-адресов
В таблице ниже представлены поставщики списков IP-адресов, поддерживаемые Google Cloud Armor. Это CDN-провайдеры, сотрудничающие с Google. Их списки IP-адресов публикуются через отдельные общедоступные URL-адреса.
Эти партнеры предоставляют отдельные списки IPv4-адресов и IPv6-адресов. Google Cloud Armor использует предоставленные URL-адреса для получения списков, а затем преобразует их в списки именованных IP-адресов. Вы обращаетесь к спискам по именам, указанным в таблице.

В качестве альтернативы, используйте CloudShell для получения списка предварительно настроенных списков именованных IP-адресов.
Войдите в Cloudshell и укажите свой идентификатор проекта.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
Из облачной оболочки
gcloud compute security-policies list-preconfigured-expression-sets \
--filter="id:sourceiplist"
В результате выполняется следующее:
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
4. Топология Codelab

5. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. (Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .)



Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

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

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.
6. Создайте сеть VPC.
Сеть VPC
Из Cloud Shell
gcloud compute networks create
именованный-список-vpc
--subnet-mode custom
Создать подсеть
Из Cloud Shell
gcloud compute networks subnets create named-ip-subnet \
--network
именованный-список-vpc
--range 10.0.0.0/24 --region us-east1
Создание правил брандмауэра
Из Cloud Shell
gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16
Создайте балансировщик нагрузки
Создайте шаблон экземпляра
Из Cloud Shell
gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any
Создайте группу управляемых экземпляров.
Из Cloud Shell
gcloud compute --project=$projectid instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b
7. Проверьте бэкэнды.
Убедитесь, что экземпляры виртуальных машин создаются в обоих регионах, и получите доступ к их HTTP-сайтам.
- Оставаясь в Compute Engine, щелкните «Экземпляры виртуальных машин» в левом меню.
- Обратите внимание на экземпляры, названия которых начинаются с us-east1-mig. Эти экземпляры входят в управляемые группы экземпляров.
- Щёлкните по внешнему IP-адресу экземпляра us-east1-mig. Вы увидите IP-адрес клиента (ваш IP-адрес) и имя хоста (начинающееся с us-east1-mig).
Настройте балансировщик нагрузки HTTP.
- В консоли Cloud нажмите меню навигации (
) > Щелкните «Сетевые службы» > «Балансировка нагрузки», а затем нажмите «Создать балансировщик нагрузки». - В разделе «Балансировка нагрузки HTTP(S)» нажмите «Начать настройку».

- Выберите пункт «Из интернета на мои виртуальные машины» и нажмите «Продолжить».
- Установите имя как http-lb.
Настройте бэкэнд.
Серверные службы направляют входящий трафик на один или несколько подключенных серверов. Каждый сервер состоит из группы экземпляров и дополнительных метаданных, определяющих пропускную способность.
- Нажмите на «Конфигурация бэкэнда».
- Для выбора служб бэкэнда и хранилищ бэкэнда нажмите «Создать» или выберите службы бэкэнда и хранилища бэкэнда, затем нажмите «Службы бэкэнда», а затем нажмите «Создать службу бэкэнда».
- Тип бэкэнда — Группа экземпляров
- Установите следующие значения, все остальные значения оставьте по умолчанию:

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

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

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

Настройте интерфейс пользователя.
Правила для хоста и пути определяют, как будет направляться ваш трафик. Например, вы можете направлять видеотрафик на один бэкэнд, а статический трафик — на другой. Однако в этой лабораторной работе вы не будете настраивать правила для хоста и пути.
- Нажмите на «Конфигурация интерфейса».
- http-front-end
- Укажите следующие значения, оставив все остальные значения по умолчанию.

- Нажмите «Готово».
8. Проверьте и создайте балансировщик нагрузки HTTP.
- Нажмите «Просмотреть и завершить».

- Проанализируйте работу серверной и клиентской частей.

- Нажмите «Создать».
- Подождите несколько минут, пока будет создан балансировщик нагрузки.
- Щелкните по названию балансировщика нагрузки (http-lb).
- Обратите внимание на IPv4-адрес балансировщика нагрузки для следующей задачи, обозначаемый как http-lb.
9. Подтвердите успешный несанкционированный доступ.
Перед применением политики именованных IP-адресов необходимо убедиться в успешном несанкционированном доступе к балансировщику нагрузки и последующему веб-приложению. Обратите внимание, что после применения политики именованных IP-адресов доступ к веб-приложению будет ограничен заданным набором выражений.
- Найдите IP-адрес вашего балансировщика нагрузки, созданный на предыдущем шаге (http-lb), и вставьте его в веб-браузер. Результат будет аналогичен скриншоту ниже.
ПРИМЕЧАНИЕ: Этот шаг займет несколько минут. После генерации веб-страницы IP-адрес клиента будет соответствовать IP-адресу Google Front End, а не IP-адресу вашей рабочей станции.

Выполните аналогичную проверку со своего рабочего места, как указано ниже.
bash-3.2$ curl <load-balancer-IP>
10. Пример выходных данных
bash-3.2$ curl <load-balancer-ip> <h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b
11. Настройка списка именованных IP-адресов
Создайте новую политику CloudAmour для списка именованных IP-адресов.
Из Cloud Shell
gcloud compute --project=$projectid security-policies create ca-policy
Из Cloud Shell
gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*
Определите доступные адреса из списков именованных IP-адресов CDN.
Из Cloud Shell
gcloud compute security-policies list-preconfigured-expression-sets \
--filter="id:sourceiplist"
В результате выполняется следующее:
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
В Cloud Shell настройте список именованных IP-адресов на основе заданного выражения доступности вашей CDN.
gcloud beta compute security-policies rules create 600 \
--security-policy ca-policy \
--expression "evaluatePreconfiguredExpr('expression_set')" \
--action "allow"
Пример использования Cloudflare
gcloud beta compute security-policies rules create 600 \
--security-policy ca-policy \
--expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \
--action "allow"
12. Примените политику безопасности центра сертификации.
Примените политику безопасности центра сертификации и подождите несколько минут, пока политика распространится по всему миру.
gcloud compute backend-services update http-backend --security-policy ca-policy --global
13. Проверка именованного IP-адреса
- Поскольку политика безопасности активирована, доступ к балансировщику нагрузки с вашей рабочей станции несанкционирован.
- Для проверки откройте окно терминала на своем рабочем компьютере и выполните команду curl к IP-адресу балансировщика нагрузки. В результате выполнения команды curl вы получите ошибку «403 Forbidden», поскольку ваш рабочий компьютер теперь не авторизован.
С вашего рабочего места
bash-3.2$ curl <load-balancer-IP> <!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden
Этапы уборки
gcloud -q compute backend-services update http-backend --security-policy "" --global gcloud -q compute --project=$projectid security-policies delete ca-policy gcloud -q compute forwarding-rules delete http-front-end --global gcloud -q compute target-http-proxies delete http-lb-target-proxy gcloud -q compute url-maps delete http-lb gcloud -q compute backend-services delete http-backend --global gcloud -q compute health-checks delete http-health-check gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template gcloud -q compute --project=$projectid firewall-rules delete default-allow-http gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check gcloud -q compute networks subnets delete named-ip-subnet --region us-east1 gcloud -q compute networks delete named-list-vpc
14. Поздравляем!
Поздравляем с завершением практического занятия!
Что мы рассмотрели
- Преимущества списка именованных IP-адресов Cloud Armor
- Создать глобальный балансировщик нагрузки
- Создайте группу управляемых экземпляров с тестовым примером приложения.
- Создайте политику безопасности Cloud Armor.
- Развернуть список именованных IP-адресов Cloud Armor
- Проверка политики Cloud Armor для именованных IP-адресов