Список именованных IP-адресов Cloud Armor

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 блокируется.

27243e72ee25ee16.png

именованный 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-адресов. Вы обращаетесь к спискам по именам, указанным в таблице.

7e9c09a008e04656.png

В качестве альтернативы, используйте 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

68a800f9adbf4570.png

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .

  1. Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.

Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 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-сайтам.

  1. Оставаясь в Compute Engine, щелкните «Экземпляры виртуальных машин» в левом меню.
  2. Обратите внимание на экземпляры, названия которых начинаются с us-east1-mig. Эти экземпляры входят в управляемые группы экземпляров.
  3. Щёлкните по внешнему IP-адресу экземпляра us-east1-mig. Вы увидите IP-адрес клиента (ваш IP-адрес) и имя хоста (начинающееся с us-east1-mig).

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

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

start_config.png

  1. Выберите пункт «Из интернета на мои виртуальные машины» и нажмите «Продолжить».
  2. Установите имя как http-lb.

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

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

  1. Нажмите на «Конфигурация бэкэнда».
  2. Для выбора служб бэкэнда и хранилищ бэкэнда нажмите «Создать» или выберите службы бэкэнда и хранилища бэкэнда, затем нажмите «Службы бэкэнда», а затем нажмите «Создать службу бэкэнда».
  3. Тип бэкэнда — Группа экземпляров
  4. Установите следующие значения, все остальные значения оставьте по умолчанию: 18bf7a852f0759ee.png
  5. Нажмите «Готово».
  6. Для проверки состояния здоровья выберите «Создать проверку состояния здоровья». health_check.png
    1. Установите следующие значения, все остальные значения оставьте по умолчанию: d2f85af1e988532b.png
  7. Нажмите «Сохранить и продолжить».
  8. Нажмите «Создать», чтобы создать серверную службу.

b00c217bf592f0.png

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

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

  1. Нажмите на «Конфигурация интерфейса».
  2. http-front-end
  3. Укажите следующие значения, оставив все остальные значения по умолчанию. 51ae16211e72142f.png
  4. Нажмите «Готово».

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

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

8efe5b462a80071d.png

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

30b06910bf7fae29.png

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

9. Подтвердите успешный несанкционированный доступ.

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

  1. Найдите IP-адрес вашего балансировщика нагрузки, созданный на предыдущем шаге (http-lb), и вставьте его в веб-браузер. Результат будет аналогичен скриншоту ниже.

ПРИМЕЧАНИЕ: Этот шаг займет несколько минут. После генерации веб-страницы IP-адрес клиента будет соответствовать IP-адресу Google Front End, а не IP-адресу вашей рабочей станции.

f93410e9568f1f32.png

Выполните аналогичную проверку со своего рабочего места, как указано ниже.

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-адреса

  1. Поскольку политика безопасности активирована, доступ к балансировщику нагрузки с вашей рабочей станции несанкционирован.
  2. Для проверки откройте окно терминала на своем рабочем компьютере и выполните команду 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-адресов