1. Введение
Межсетевой экран нового поколения в облаке (NGFW)
Cloud Next Generation Firewall — это полностью распределенный межсетевой экран с расширенными возможностями защиты, микросегментацией и повсеместным охватом для защиты ваших рабочих нагрузок Google Cloud от внутренних и внешних атак.
Облачный межсетевой экран нового поколения (NGFW) обладает следующими преимуществами:
- Распределенная служба межсетевого экрана: Cloud NGFW обеспечивает сохранение состояния и полностью распределенное применение мер безопасности на уровне хоста для каждой рабочей нагрузки, что позволяет реализовать архитектуру безопасности с нулевым доверием.
- Упрощенная настройка и развертывание: Cloud NGFW реализует сетевые и иерархические политики межсетевого экрана, которые можно прикрепить к узлу иерархии ресурсов. Эти политики обеспечивают единообразную работу межсетевого экрана во всей иерархии ресурсов Google Cloud.
- Детальный контроль и микросегментация: сочетание политик межсетевого экрана и тегов, управляемых системой управления идентификацией и доступом (IAM), обеспечивает точный контроль как для трафика между центрами сети (север-юг), так и для трафика между центрами сети (восток-запад), вплоть до отдельной виртуальной машины, в сетях виртуальных частных облаков (VPC).
Политики сетевого брандмауэра
Политика сетевого брандмауэра выступает в качестве контейнера для правил брандмауэра. Правила, определенные в политике сетевого брандмауэра, не применяются нигде, пока политика не будет связана с сетью VPC. Каждая сеть VPC может иметь одну связанную с ней политику сетевого брандмауэра. Политики сетевого брандмауэра поддерживают теги (или просто теги), управляемые IAM, в правилах брандмауэра и могут использоваться для обеспечения идентификации рабочей нагрузки.
Совместное использование политики сетевого брандмауэра в разных сетях и интеграция с тегами, управляемыми IAM, значительно упрощают настройку и управление брандмауэрами.
С внедрением политик сетевого брандмауэра, политики брандмауэра Google Cloud теперь состоят из следующих компонентов:
- Иерархическая политика брандмауэра
- Правила брандмауэра VPC
- Глобальная политика сетевого межсетевого экрана и региональная политика сетевого межсетевого экрана
Иерархические политики межсетевого экрана поддерживаются на уровне организации и узлов папок в иерархии ресурсов, тогда как правила межсетевого экрана VPC и политики сетевого межсетевого экрана применяются на уровне VPC. Существенное различие между правилами межсетевого экрана VPC и политиками сетевого межсетевого экрана заключается в том, что правила межсетевого экрана VPC могут применяться только к одной сети VPC, тогда как политики сетевого межсетевого экрана могут быть привязаны к одной VPC или группе VPC, а также обладают другими преимуществами, такими как пакетные обновления.
В этой лабораторной работе мы протестируем иерархическую политику межсетевого экрана и глобальную политику сетевого межсетевого экрана.
Наконец, у нас также есть подразумеваемые правила брандмауэра , которые присутствуют в каждой сети VPC:
- Правило исходящего трафика, действие которого — разрешить, пункт назначения — 0.0.0.0/0
- Правило входящего трафика, действие которого — запрет, источник — 0.0.0.0/0
По умолчанию последовательность применения мер безопасности показана на следующей диаграмме:

Теги, управляемые IAM
Новые теги, интегрированные в правила политики брандмауэра, представляют собой ресурсы в виде пар «ключ-значение», определенные на уровне организации или проекта в иерархии ресурсов Google Cloud. Такой тег, как следует из названия, содержит управление доступом IAM, определяющее, кто и что может делать с этим тегом. Например, разрешения IAM позволяют указать, какие субъекты могут назначать значения тегам и какие субъекты могут прикреплять теги к ресурсам. После применения тега к ресурсу правила политики брандмауэра могут использовать его для разрешения и запрета трафика.
Теги соответствуют модели наследования ресурсов Google Cloud, что означает, что теги и их значения передаются по иерархии от родительских элементов. В результате теги могут быть созданы в одном месте, а затем использованы другими папками и проектами по всей иерархии ресурсов. Для получения дополнительной информации о тегах и ограничениях доступа посетите эту страницу .
Не следует путать теги с сетевыми тегами ; последние представляют собой строки, которые можно добавить к экземплярам Compute Engine; они связаны с экземпляром и исчезают при выводе экземпляра из эксплуатации. Правила брандмауэра VPC могут включать сетевые теги, но поскольку они не рассматриваются как облачные ресурсы, на них не распространяется контроль доступа IAM. Подробнее о различиях см. на этой странице .
2. What you'll learn
- Как создать теги, управляемые IAM, для использования с Cloud NGFW и в глобальной области видимости.
- Как присвоить теги виртуальным машинам.
- Как создать иерархическую политику брандмауэра и связать её с папкой.
- Как создать правило брандмауэра в иерархической политике брандмауэра и указать источник и цель с помощью тегов, управляемых IAM.
3. Общая архитектура лаборатории

Организация и папки:
- Вам нужно будет создать две папки,
folder1иfolder2, непосредственно в рамках вашей организации.
Проекты:
- Внутри
folder1вы создадите проект хоста . Этот проект будет содержать сеть Shared VPC. - Внутри
folder2вы создадите проект службы . Этот проект будет содержать виртуальные машины, использующие общую VPC.
Сетевые технологии:
- В основном проекте будет создана сеть VPC с именем
mynet, которая будет настроена как общая сеть VPC (Shared VPC ). Это позволит ресурсам в сервисном проекте использовать эту сеть. - В сервисном проекте будут созданы две виртуальные машины, которые будут подключены к общей виртуальной частной сети
mynet.
Теги, управляемые IAM:
- Вам потребуется создать управляемый IAM тег с именем
http_tagsи двумя значениями:http_serverиhttp_clientна уровне организации. Эти теги/значения будут использоваться для идентификации виртуальных машин и применения к ним правил брандмауэра.
Политики брандмауэра:
- Будет создана иерархическая политика брандмауэра , связанная с
folder1. Правило в рамках этой политики будет использовать теги, управляемые IAM, для разрешения трафика отhttp-clientкhttp-serverчерез порт 80. - В проекте хоста будет создана политика сетевого брандмауэра , связанная с VPC
mynet. Эта политика будет включать правило, разрешающее доступ IAP по SSH к виртуальным машинам в целях тестирования.
4. Этапы подготовки
Для начала настройте необходимые роли IAM, сетевую инфраструктуру и экземпляры в вашей организации Google Cloud.
Для работы в лаборатории требуются роли IAM.
Начнем с назначения необходимых ролей IAM учетной записи GCP на уровне организации.
- Администратор организации (
roles/resourcemanager.organizationAdmin) Эта роль позволяет управлять политиками IAM и просматривать политики организации для организаций, папок и проектов. - Администратор тегов (
roles/resourcemanager.tagAdmin) Эта роль позволяет создавать, обновлять и удалять защищенные теги. - Роль пользователя для присвоения тегов (
roles/resourcemanager.tagUser) Эта роль позволяет получить доступ к списку защищенных тегов и управлять их связью с ресурсами. - Роль администратора политики брандмауэра организации вычислительных ресурсов (
roles/compute.orgFirewallPolicyAdmin) предоставляет вам полный контроль над политиками брандмауэра организации Compute Engine. - Роль администратора ресурсов вычислительной организации (
roles/compute.orgSecurityResourceAdmin) предоставляет вам полный контроль над ассоциациями политик брандмауэра Compute Engine с организацией или папкой. - Администратор вычислительной сети (
roles/compute.networkAdmin) Эта роль предоставляет вам полный контроль над сетевыми ресурсами Compute Engine. - Администратор вычислительных экземпляров (бета-версия) (
roles/compute.instanceAdmin) Эта роль предоставляет вам полный контроль над ресурсами экземпляра Compute Engine. - Администратор ведения журналов (
roles/logging.admin) Эта роль предоставляет вам доступ ко всем разрешениям на ведение журналов, а также к зависимым разрешениям. - Администратор учетных записей служб (
roles/iam.serviceAccountAdmin) Эта роль позволяет создавать и управлять учетными записями служб. - Администратор использования сервиса (
roles/serviceusage.serviceUsageAdmin) Эта роль позволяет включать, отключать и проверять состояния сервиса, контролировать операции, а также управлять квотой и выставлением счетов для потребительского проекта. - Роль администратора общей виртуальной частной сети (
roles/compute.xpnAdmin) позволяет администрировать общую виртуальную частную сеть (XPN).
Создавайте папки и проекты.
Внутри Cloud Shell выполните следующие действия для создания folder1 и folder2 :
gcloud auth login
export org_id=$(gcloud organizations list --format='value(ID)')
export BILLING_ACCOUNT_ID=$(gcloud billing accounts list --format='value(ACCOUNT_ID)')
export folder1=[FOLDER1 NAME]
export folder2=[FOLDER2 NAME]
export hostproject=[HOST PROJECT NAME]
export serviceproject=[SERVICE PROJECT NAME]
export regionname=[REGION NAME]
export zonename=[COMPUTE ZONE NAME]
gcloud resource-manager folders create --display-name=$folder1 --organization=$org_id
export folder1_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder1" --format="value(ID)")
gcloud resource-manager folders create --display-name=$folder2 --organization=$org_id
export folder2_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder2" --format="value(ID)")
Inside Cloud Shell, perform the following to create the host project under folder1 :
gcloud projects create --name=$hostproject --folder=$folder1_id
Вы увидите следующее. Нажмите Y, чтобы создать проект с новым идентификатором проекта.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Запишите идентификатор проекта. В Cloud Shell выполните следующие действия, чтобы экспортировать его в hostproject_id:
export hostproject_id=[HOSTPROJECT ID]
Внутри Cloud Shell выполните следующие действия, чтобы связать основной проект с платежным аккаунтом:
gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID
Внутри Cloud Shell выполните следующие действия для создания проекта службы в folder2 :
gcloud projects create --name=$serviceproject --folder=$folder2_id
Вы увидите следующее. Нажмите Y, чтобы создать проект с новым идентификатором проекта.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Запишите идентификатор проекта. В Cloud Shell выполните следующие действия, чтобы экспортировать его в serviceproject_id:
export serviceproject_id=[SERVICEPROJECT ID]
Внутри Cloud Shell выполните следующие действия, чтобы связать проект сервиса с платежным аккаунтом:
gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID
Создание тегов, управляемых IAM.
Тег — это пара «ключ-значение», которую можно прикрепить к организации, папке или проекту. Дополнительные сведения см. в разделе «Создание и управление тегами и необходимые разрешения» .
Мы создаём один тег на уровне организации, http-tags . Назначение тега — использование Cloud NGFW. Мы не ограничиваем область действия одной сетью — тег имеет глобальную область действия. А позже мы применим этот тег к виртуальным машинам, созданным в сервисном проекте в folder2 .
Внутри Cloud Shell выполните следующие действия:
gcloud resource-manager tags keys create http_tags \
--parent=organizations/$org_id \
--purpose GCE_FIREWALL \
--purpose-data organization=auto
Мы будем использовать идентификатор ключа тега для аннотирования виртуальной машины во время её создания. В Cloud Shell выполните следующие действия, чтобы получить идентификатор ключа тега:
export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id
Внутри Cloud Shell выполните следующие действия, чтобы создать два новых значения тегов: http_server и http_client :
gcloud resource-manager tags values create http_server \
--parent $org_id/http_tags
gcloud resource-manager tags values create http_client \
--parent $org_id/http_tags
Мы будем использовать идентификатор тега и идентификатор значения тега для аннотирования виртуальной машины во время ее создания. В Cloud Shell выполните следующие действия, чтобы получить идентификатор значения тега для http_server и http_client :
export http_tags_http_server_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_server --format="value(name)")
echo $http_tags_http_server_id
export http_tags_http_client_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_client --format="value(name)")
echo $http_tags_http_client_id
Включите API в основном проекте и проекте сервиса.
Внутри Cloud Shell выполните следующие действия:
gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id
Создайте VPC в основном проекте.
В хост-проекте создайте сеть VPC с пользовательским режимом подсети и выполните следующие действия в Cloud Shell:
gcloud compute networks create mynet \
--subnet-mode=custom \
--project=$hostproject_id
Создайте подсети в основном проекте.
Внутри Cloud Shell выполните следующие действия для создания подсети IPv4:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/28 \
--region=$regionname \
--project=$hostproject_id
Включите Shared VPC в основном проекте.
Внутри Cloud Shell выполните следующие действия, чтобы включить Shared VPC в проекте хоста:
gcloud compute shared-vpc enable $hostproject_id
Подключите сервисный проект для общей VPC в хост-проекте.
Внутри Cloud Shell выполните следующие действия, чтобы подключить проект службы для общей VPC к основному проекту:
gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id
Создайте Cloud Router и Cloud NAT в проекте хоста.
Облачный NAT используется для обеспечения исходящего интернет-трафика для виртуальных машин, чтобы они могли загружать и устанавливать приложения.
gcloud compute routers create $regionname-cr \
--network=mynet \
--region=$regionname \
--project=$hostproject_id
gcloud compute routers nats create $regionname-nat \
--router=$regionname-cr \
--region=$regionname \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips \
--project=$hostproject_id
Создайте экземпляры в проекте сервиса.
In the service project, create two instances in the subnets you just created in the shared VPC in the hostproject. One instance is named http-server and we annotate the tag of http_tags with the value of http_server . The other instance is named http-client and we annotate the tag of http_tags with the value of http_client . Run the following command(s) in Cloud Shell:
gcloud compute instances create http-client \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_client_id
gcloud compute instances create http-server \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_server_id \
--metadata startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "I am a Http Server." | \
tee /var/www/html/index.html
systemctl restart apache2'
Запишите внутренний IP-адрес http-server . Мы будем использовать его на следующем этапе проверки правил брандмауэра.
export http_server_ip=$(gcloud compute instances describe http-server --zone $zonename --format='value(networkInterfaces[0].networkIP)' --project $serviceproject_id)
echo $http_server_ip
5. Создайте глобальную политику сетевого брандмауэра в основном проекте.
Мы создадим глобальную политику сетевого брандмауэра в основном проекте и свяжем ее с общей VPC в основном проекте.
gcloud config set project $hostproject_id
gcloud compute network-firewall-policies create mynet-fw-policy \
--global \
--project=$hostproject_id
gcloud compute network-firewall-policies associations create \
--firewall-policy=mynet-fw-policy \
--network=mynet \
--name=mynet-fw-policy \
--global-firewall-policy \
--project=$hostproject_id
Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра в политике сетевого брандмауэра:
- Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
- Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.
gcloud compute network-firewall-policies rules create 1000 \
--action=ALLOW \
--firewall-policy=mynet-fw-policy \
--description="mynet-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy \
--project=$hostproject_id
В консоли вы можете перейти к основному проекту и найти недавно созданную глобальную политику сетевого брандмауэра в разделе «Политика брандмауэра». Вы можете проверить новое правило брандмауэра в политике сетевого брандмауэра. Вот ссылка на консоль , чтобы перейти туда. Пожалуйста, убедитесь, что вы изменили выбор проекта на основной проект в консоли.
6. Проверьте доступ с виртуальной машины http-клиента к виртуальной машине http-сервера.
Подключитесь по SSH к виртуальной машине с именем http-client и проверьте, может ли она получить доступ к http-server по порту HTTP 80.
Внутри Cloud Shell выполните следующие действия:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Для доступа к веб-серверу используйте команду curl.
curl -m 10 [http_server_ip]
Вы увидите результат выполнения команды curl. В брандмауэре отсутствует правило, разрешающее использование порта 80 для http-server .
Время ожидания соединения истекло через 10000 миллисекунд.
Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
7. Создайте иерархическую политику межсетевого экрана и правила межсетевого экрана.
Мы создадим иерархическую политику брандмауэра в folder1 и свяжем эту политику с folder1 . Правила брандмауэра в этой политике будут применяться к хост-проекту в folder1 .
Создание иерархической политики брандмауэра
gcloud compute firewall-policies create \
--folder=$folder1_id \
--short-name=my-folder1-fw-policy
Создайте правило брандмауэра в иерархической политике брандмауэра.
Это правило позволяет виртуальным машинам со значением тега http_tags/http_client получать доступ к виртуальным машинам со значением тега http_tags/http_server через TCP-порт 80.
gcloud compute firewall-policies rules create 100 \
--organization=$org_id \
--firewall-policy my-folder1-fw-policy \
--direction=INGRESS \
--layer4-configs=tcp:80 \
--action=allow \
--src-secure-tags=$org_id/http_tags/http_client \
--target-secure-tags=$org_id/http_tags/http_server \
--description=folder1-allow-http
Связать иерархическую политику брандмауэра с папкой 1.
gcloud compute firewall-policies associations create \
--firewall-policy=my-folder1-fw-policy \
--folder=$folder1_id \
--name=my-folder1-fw-policy\
--organization=$org_id
В консоли перейдите в folder1 и найдите созданную иерархическую политику брандмауэра в разделе «Политика брандмауэра». Политика брандмауэра отображается в разделе «Политики брандмауэра, расположенные в этой папке». Вы можете проверить созданное правило брандмауэра в иерархической политике брандмауэра. Вот ссылка на консоль , чтобы перейти туда. Пожалуйста, убедитесь, что вы изменили выбор проекта на folder1 в консоли.
8. Проверьте доступ с виртуальной машины http-клиента к виртуальной машине http-сервера.
Проверьте, применяются ли эффективные политики брандмауэра к общей VPC в хост-проекте.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id
Вы увидите унаследованную иерархическую политику межсетевого экрана примерно такого вида:
TYPE: org-firewall
FIREWALL_POLICY_NAME: <NUMBER_FOR_YOUR_FW_POLICY>
FIREWALL_POLICY_PRIORITY:
PRIORITY: 100
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES:
You will see the network firewall policy to the VPC like this:
TYPE: network-firewall-policy
FIREWALL_POLICY_NAME: mynet-fw-policy
FIREWALL_POLICY_PRIORITY: 1000
PRIORITY: 1000
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES: 35.235.240.0/20
Подключитесь по SSH к виртуальной машине с именем http-client и проверьте, может ли она получить доступ к http-server по порту HTTP 80.
Внутри Cloud Shell выполните следующие действия:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Для доступа к веб-серверу используйте команду curl.
curl [http_server_ip]
Вы увидите, что команда curl успешно возвращает ответ от http-server .
I am a Http Server.
Правило входящего трафика брандмауэра из иерархической политики брандмауэра разрешает доступ с http-client к http-server через порт 80.
Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
9. Уборка
Очистка виртуальных машин в рамках проекта обслуживания
Внутри Cloud Shell выполните следующие действия:
gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id
Очистка иерархической политики брандмауэра
Внутри Cloud Shell выполните следующие действия:
gcloud compute firewall-policies associations delete my-folder1-fw-policy \
--firewall-policy=my-folder1-fw-policy \
--organization=$org_id
gcloud compute firewall-policies rules delete 100 \
--organization=$org_id \
--firewall-policy=my-folder1-fw-policy
gcloud compute firewall-policies delete my-folder1-fw-policy \
--organization=$org_id
Очистка тегов на уровне организации.
Внутри Cloud Shell выполните следующие действия:
gcloud resource-manager tags values delete $http_tags_http_server_id
gcloud resource-manager tags values delete $http_tags_http_client_id
gcloud resource-manager tags keys delete $http_tags_id
Приведите в порядок основной проект.
Внутри Cloud Shell выполните следующие действия:
gcloud compute shared-vpc associated-projects remove $serviceproject_id --host-project=$hostproject_id
gcloud compute shared-vpc disable $hostproject_id
gcloud projects delete $hostproject_id
Убрать с построек в рамках сервисного проекта
Внутри Cloud Shell выполните следующие действия:
gcloud projects delete $serviceproject_id
Очистка папок
Внутри Cloud Shell выполните следующие действия:
gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id
10. Поздравляем!
Вы успешно протестировали иерархическую политику брандмауэра с тегами, управляемыми IAM.