Глобальная политика сетевого брандмауэра с тегами

1. Введение

Политики сетевого брандмауэра

Межсетевые экраны являются основными элементами безопасной облачной среды. Ранее мы внедряли политики межсетевых экранов на уровне организаций и папок, оставляя межсетевые экраны VPC без изменений. В этой версии мы расширим структуру политик межсетевых экранов до уровня VPC и внесем ряд улучшений в текущую поддержку политик межсетевых экранов, чтобы обеспечить единую поддержку межсетевых экранов во всей иерархии ресурсов Google Cloud и единообразный пользовательский опыт управления политиками межсетевых экранов безопасным, гибким и масштабируемым способом.

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

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

С внедрением политик сетевого брандмауэра, политики брандмауэра Google Cloud теперь состоят из следующих компонентов:

  1. Иерархическая политика брандмауэра
  2. Правила брандмауэра VPC
  3. Политика сетевого брандмауэра ( глобальная и региональная )

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

Наконец, у нас также есть подразумеваемые правила брандмауэра , которые присутствуют в каждой сети VPC:

  • Правило исходящего трафика, действие которого — разрешить, пункт назначения — 0.0.0.0/0
  • Правило входящего трафика, действие которого — запрет, источник — 0.0.0.0/0

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

abae4597af782b2b.png

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

Теги

Новые теги, интегрированные в правила политики сетевого брандмауэра, представляют собой ресурсы типа «ключ-значение», определенные на уровне организации в иерархии ресурсов Google Cloud. Такой тег, как следует из названия, содержит управление доступом IAM, определяющее, кто и что может делать с этим тегом. Например, разрешения IAM позволяют указать, какие субъекты могут назначать значения тегам и какие субъекты могут прикреплять теги к ресурсам. После применения тега к ресурсу правила сетевого брандмауэра могут использовать его для разрешения и запрета трафика.

Теги соответствуют модели наследования ресурсов Google Cloud, что означает, что теги и их значения передаются по иерархии от родительских элементов. В результате теги могут быть созданы в одном месте, а затем использованы другими папками и проектами по всей иерархии ресурсов. Для получения дополнительной информации о тегах и ограничениях доступа посетите эту страницу .

Не следует путать теги с сетевыми тегами ; последние представляют собой строки, которые можно добавить к экземплярам Compute Engine; они связаны с экземпляром и исчезают при выводе экземпляра из эксплуатации. Правила брандмауэра VPC могут включать сетевые теги, но поскольку они не рассматриваются как облачные ресурсы, на них не распространяется контроль доступа IAM.

Обратите внимание, что в данном документе термины «теги» и «теги, управляемые IAM» используются взаимозаменяемо.

Что вы построите

Данный практический пример состоит из двух частей: первая демонстрирует политики сетевого брандмауэра и теги в рамках одной сети VPC, а вторая покажет, как использовать теги в пиринговых сетях VPC, как показано на схеме ниже. Таким образом, для выполнения этого практического примера требуется один проект и умение создавать несколько сетей VPC.

b9acf9823df8be04.jpeg

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

  • Как создать политику сетевого брандмауэра
  • Как создавать и использовать теги с политикой сетевого брандмауэра
  • Как использовать теги в сети VPC при пиринге

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

  • Проект Google Cloud
  • Знание развертывания экземпляров и настройки сетевых компонентов.
  • Знание конфигурации межсетевого экрана VPC

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

Создание/обновление переменных

В этом практическом задании используются переменные `$variables` для упрощения настройки gcloud в Cloud Shell.

Внутри Cloud Shell выполните следующие действия:

gcloud config set project [project-id]
export project_id=`gcloud config list --format="value(core.project)"`
export org_id=[org]
export region=us-central1
export zone=us-central1-a
export prefix=fwpolicy

3. Создайте сеть и подсеть VPC.

Сеть VPC

Создать fwpolicy-vpc1:

gcloud compute networks create $prefix-vpc1 --subnet-mode=custom 

Подсети

Создайте соответствующие подсети в выбранном регионе:

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

Облачный NAT

Создайте облачные маршрутизаторы и шлюзы Cloud NAT для fwpolicy-pc1 :

gcloud compute routers create $prefix-vpc1-cr \
  --region=$region --network=$prefix-vpc1

gcloud compute routers nats create $prefix-vpc1-cloudnat \
   --router=$prefix-vpc1-cr --router-region=$region \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

4. Создание экземпляров

Создайте правило брандмауэра, разрешающее входящий SSH-трафик из диапазонов IAP, если оно еще не определено в настройках IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc1 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Создайте экземпляры клиента и веб-сервера fwpolicy-vpc1 :

gcloud compute instances create $prefix-vpc1-www \
   --subnet=$prefix-vpc1-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-vpc1-client \
    --subnet=$prefix-vpc1-subnet --no-address --zone $zone

Поскольку правила брандмауэра VPC не определены (кроме правила разрешения SSH, которое должно было быть создано при настройке IAP, как указано в начале этого раздела), и по умолчанию весь входящий трафик запрещен, клиентские экземпляры не смогут получить доступ к соответствующим веб-серверам. Чтобы убедиться, что запрос истечет по таймауту, откройте новое окно и инициируйте SSH-сессию с экземпляром fwpolicy-vpc1-client и попробуйте выполнить команду curl к веб-серверу:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Ожидаемый результат:

curl: (28) Connection timed out after 2001 milliseconds

При желании, через Cloud Shell убедитесь, что для fwpolicy-vpc1 не определены правила брандмауэра VPC:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5. Глобальная политика сетевого брандмауэра

Создайте глобальную политику сетевого брандмауэра:

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

Добавьте правило, разрешающее веб-трафик:

gcloud compute network-firewall-policies rules create 500 \
    --action allow \
    --description "allow-web" \
    --layer4-configs tcp:80,tcp:443 \
    --firewall-policy $prefix-example \
    --src-ip-ranges 10.0.0.0/16 \
    --global-firewall-policy --enable-logging

Опишите политику сетевого брандмауэра и убедитесь, что правило было успешно added :

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Ожидаемый результат (прокрутите вверх до начала вывода; обратите внимание, что неявные правила также отображаются):

creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
  description: allow-web
  direction: INGRESS
  disabled: false
  enableLogging: true
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: tcp
      ports:
      - '80'
    - ipProtocol: tcp
      ports:
      - '443'
    srcIpRanges:
    - 10.0.0.0/16
  priority: 500
  ruleTupleCount: 5
...

Свяжите политику сетевого брандмауэра с fwpolicy-vpc1 :

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

Убедитесь, что политика политики (fwpolicy) была успешно применена к сети fwpolicy-vpc1 :

gcloud compute networks get-effective-firewalls $prefix-vpc1

Ожидаемый результат (обратите внимание, что если приоритет имеют иерархические политики брандмауэра, соответствующие правила будут отображены вверху):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Убедитесь, что политика политики была успешно применена и к веб-серверу fwpolicy-vpc1 :

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Ожидаемый результат аналогичен результату предыдущей команды ( fwpolicy-vpc1 effective firewalls):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Вернитесь к SSH-сессии vpc1-client и попробуйте снова выполнить команду curl (обратите внимание, что приведенная ниже команда предполагает использование префикса fwpolicy ; если вместо него использовалось другое имя, скорректируйте команду curl соответствующим образом):

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

В Cloud Shell убедитесь, что политика сетевого брандмауэра применена к fwpolicy-vpc1 :

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Ожидаемый результат (прокрутите вверх до начала вывода):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. Теги, управляемые IAM

Тег — это пара «ключ-значение», которую можно прикрепить к организации, папке или проекту. Дополнительные сведения см. в разделе «Создание и управление тегами и необходимые разрешения» .

Роль tagAdmin позволяет создавать новые теги, обновлять и удалять существующие. Администратор организации может предоставить эту роль. В Cloud Shell обновите политику IAM, чтобы добавить роль tagAdmin вашему пользователю . Используйте страницу справочника разрешений, чтобы узнать, какие разрешения включены в каждую предопределенную роль.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

Выполните указанную ниже команду, чтобы проверить, какие пользователи имеют роль resourcemanager.tagAdmin:

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

Создайте новый ключ тега:

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

Ожидаемый результат:

Waiting for TagKey [tags-vpc1] to be created...done.                                                                                                                
createTime: '2022-09-23T20:49:01.162228Z'
etag: PwvmFuHO4wK1y6c5Ut2n5w==
name: tagKeys/622132302133
namespacedName: ORGANIZATION_ID/tags-vpc1
parent: organizations/ORGANIZATION_ID
purpose: GCE_FIREWALL
purposeData:
  network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383
shortName: tags-vpc1
updateTime: '2022-09-23T20:49:03.873776Z'

Создайте новые значения тегов:

gcloud resource-manager tags values create web-servers \
   --parent=$org_id/tags-vpc1

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc1

Убедитесь, что значения тегов были успешно созданы:

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

Ожидаемый результат:

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

В оболочке Cloud Shell опишите существующее правило политики сетевого брандмауэра, чтобы подтвердить, что теги не используются:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Ожидаемый результат:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
priority: 500
ruleTupleCount: 5

В Cloud Shell обновите правило, разрешив трафик только с теговым ключом vpc1-tags/web-clients , и установите правило на экземплярах с теговым ключом vpc1-tags/web-servers .

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients \
    --target-secure-tags $org_id/tags-vpc1/web-servers \
    --global-firewall-policy

В оболочке Cloud Shell опишите существующее правило политики сетевого брандмауэра, чтобы подтвердить, что теги были успешно применены и отображаются как «ДЕЙСТВИТЕЛЬНЫЕ» :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Ожидаемый результат:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Давайте проверим в Cloud Shell, что правило было применено к vpc1 :

gcloud compute networks get-effective-firewalls $prefix-vpc1

Ожидаемый результат:

network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Убедитесь, что, несмотря на то, что политика сетевого брандмауэра по-прежнему связана с сетью VPC, правило, разрешающее веб-трафик, больше не применяется к веб-серверу, поскольку тег не был добавлен к экземплярам:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Ожидаемый результат (обратите внимание, что правило брандмауэра с приоритетом 500 не отображается):

network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

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

gcloud resource-manager tags keys add-iam-policy-binding \
  $org_id/tags-vpc1 \
  --member user:[email] --role roles/resourcemanager.tagUser

gcloud projects add-iam-policy-binding $project_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Убедитесь, что роль была успешно добавлена:

gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1

gcloud projects get-iam-policy $project_id --flatten=bindings \
   --filter=bindings.role:roles/resourcemanager.tagUser

Ожидаемый результат:

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

Примените тег к экземпляру fwpolicy-vpc1-www :

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-servers \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www

Ожидаемый результат:

Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34
9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done.                                                                            
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata
name: operations/rctb.us-central1-a.6144808968019372877
response:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding
  name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683
  parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502
  tagValue: tagValues/349564376683

Проверьте привязки:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

Ожидаемый результат:

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

Ещё раз проверьте действующие правила брандмауэра:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Ожидаемый результат:

network-firewall-policy  fwpolicy-example      490         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Вернитесь на вкладку SSH-сессии fwpolicy-vpc1-client и попробуйте выполнить команду curl:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Вам удалось подключиться?

Для проверки обновите правило, удалив критерий CIDR источника, через Cloud Shell.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-ip-ranges "" \
    --global-firewall-policy

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Вернитесь на вкладку SSH-сессии fwpolicy-vpc1-client и попробуйте снова:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

В этот раз соединение должно прерваться по таймауту, поскольку тег не был добавлен к fwpolicy-vpc1-client . Добавьте его в Cloud Shell и попробуйте еще раз.

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client

Вернитесь на вкладку SSH-сессии fwpolicy-vpc1-client и попробуйте снова; теперь это должно пройти успешно.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. Управление тегами с помощью IAM через пиринг сети VPC

В Cloud Shell создайте новую VPC, подсеть и клиент, а также настройте пиринг сети VPC между сетями:

gcloud compute networks create $prefix-vpc2 --subnet-mode=custom 

gcloud compute networks subnets create $prefix-vpc2-subnet \
   --range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region

gcloud compute instances create $prefix-vpc2-client \
   --subnet=$prefix-vpc2-subnet --no-address --zone $zone

gcloud compute networks peerings create vpc1-to-vpc2 \
   --network=$prefix-vpc1 \
   --peer-project $project_id \
   --peer-network $prefix-vpc2

gcloud compute networks peerings create vpc2-to-vpc1 \
    --network=$prefix-vpc2 \
    --peer-project $project_id \
    --peer-network $prefix-vpc1

Создайте правило брандмауэра, разрешающее входящий SSH-трафик из диапазонов IAP, если оно еще не определено в настройках IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc2 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Несмотря на то, что теги являются объектами, действующими в масштабах всей организации, ключи тегов связаны с конкретной VPC и, следовательно, не могут применяться к экземплярам в разных сетях. Таким образом, необходимо создать новый ключ и значение тега, применимые к vpc2:

gcloud resource-manager tags keys create tags-vpc2 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc2

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc2

Примените новый тег к экземпляру fwpolicy-vpc2-client :

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc2/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

При желании можно вывести список привязок fwpolicy-vpc2-client :

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

Ожидаемый результат:

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

В оболочке Cloud Shell опишите существующее правило политики сетевого брандмауэра, чтобы подтвердить, что новые теги не используются:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Ожидаемый результат:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Обновите существующее правило брандмауэра, чтобы разрешить использование тегов из пиринговой сети VPC:

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
    --global-firewall-policy

Опишите правило брандмауэра, чтобы убедиться в его успешном применении и наличии отметки «ДЕЙСТВИТЕЛЬНО» :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Ожидаемый результат:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
  - name: tagValues/633150043992
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Узнайте IP-адрес fwpolicy-vpc1-www с помощью приведенной ниже команды gcloud:

gcloud compute instances list --filter=vpc1-www

Подключитесь к fwpolicy-vpc2-client через SSH и попробуйте выполнить команду curl для IP-адреса fwpolicy-vpc1 :

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

Вы должны иметь возможность подключиться к серверу fwpolicy-vpc1-www . Перейдите к следующему разделу, где описаны шаги по очистке.

8. Этапы очистки

В Cloud Shell удалите экземпляры, Cloud NAT и Cloud Router:

gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone

gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \
--router=$prefix-vpc1-cr --router-region=$region

gcloud -q compute routers delete $prefix-vpc1-cr --region=$region

Удалите глобальную политику сетевого брандмауэра и теги:

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc2/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc2

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-servers

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc1

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-example \
     --name $prefix-vpc1-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete \
   $prefix-example --global

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2

Выполните следующие действия, если роли tagAdmin и tagUsers были изменены:

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Наконец, удалите пиринги сети VPC, подсети и сети VPC:

gcloud -q compute networks peerings delete vpc1-to-vpc2 \
    --network $prefix-vpc1

gcloud -q compute networks peerings delete vpc2-to-vpc1 \
    --network $prefix-vpc2

gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
    --region $region

gcloud -q compute networks delete $prefix-vpc1

gcloud -q compute networks delete $prefix-vpc2

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

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