Интерфейс подключения частных услуг

1. Введение

Интерфейс Private Service Connect — это ресурс, позволяющий сети виртуальной частной сети (VPC) производителя инициировать соединения с различными пунктами назначения в сети VPC потребителя. Сети производителя и потребителя могут находиться в разных проектах и ​​организациях.

Если сетевое соединение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет этому интерфейсу IP-адрес из подсети потребителя, указанной в сетевом соединении. Сети потребителя и производителя соединяются и могут обмениваться данными, используя внутренние IP-адреса.

Соединение между сетевым устройством и интерфейсом Private Service Connect аналогично соединению между конечной точкой Private Service Connect и сервисным устройством, но имеет два ключевых отличия:

  • Сетевое подключение позволяет сети-производителю инициировать соединения с сетью-потребителем (исходящий трафик управляемых сервисов), а конечная точка позволяет сети-потребителю инициировать соединения с сетью-производителем (входящий трафик управляемых сервисов).
  • Соединение через интерфейс Private Service Connect является транзитивным. Это означает, что сеть-производитель может взаимодействовать с другими сетями, подключенными к сети потребителя.

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

В этом руководстве вы создадите комплексную архитектуру интерфейса Private Service Connect (PSC), которая использует правила облачного брандмауэра для разрешения и запрета подключения от производителя к вычислительным ресурсам потребителя, как показано на рисунке 1.

Рисунок 1

d39bf35e55bdf9e6.png

В потребительской VPC вы создадите единое соединение psc-network-attachment, что приведет к следующим сценариям использования:

  1. Создайте правило облачного брандмауэра, разрешающее доступ от Bear к Lion.
  2. Создайте правило облачного брандмауэра, запрещающее доступ от Bear до Tiger.
  3. Создайте правило Cloud Firewall, разрешающее доступ из Cosmo к Bearing.

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

  • Как создать сетевое подключение
  • Как производитель может использовать сетевое подключение для создания интерфейса PSC
  • Как наладить коммуникацию между производителем и потребителем?
  • Как разрешить доступ с виртуальной машины производителя (Bear) к виртуальной машине потребителя (Lion)
  • Как заблокировать доступ с виртуальной машины производителя (Bear) к виртуальной машине потребителя (Tiger)
  • Как разрешить доступ с виртуальной машины потребителя (Cosmo) к виртуальной машине производителя (Bear)

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

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

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

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

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

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

3. Настройка потребителя

Создайте потребительскую VPC.

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

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

Создайте потребительские подсети

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

gcloud compute networks subnets create lion-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1

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

gcloud compute networks subnets create tiger-subnet-1 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1

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

gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1

Создайте подсеть подключения к частной сети (Private Service Connect Network Attachment).

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

gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1

Настройка облачного маршрутизатора и NAT.

В этом руководстве по установке программных пакетов используется Cloud NAT, поскольку у экземпляра виртуальной машины нет публичного IP-адреса. Cloud NAT позволяет виртуальным машинам с частными IP-адресами получать доступ к интернету.

Внутри Cloud Shell создайте облачный маршрутизатор.

gcloud compute routers create cloud-router-for-nat --network consumer-vpc --region us-central1

Внутри Cloud Shell создайте NAT-шлюз.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. Включите IAP.

Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
  • Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.

Внутри Cloud Shell создайте правило брандмауэра IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

5. Создайте экземпляры виртуальных машин для потребителей.

Внутри Cloud Shell создайте экземпляр виртуальной машины-потребителя, Lion.

gcloud compute instances create lion \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=lion-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the lion app server !!' | tee /var/www/html/index.html
      EOF"

Внутри Cloud Shell создайте экземпляр виртуальной машины потребителя, Tiger.

gcloud compute instances create tiger \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=tiger-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the tiger app server !!' | tee /var/www/html/index.html
      EOF"

Внутри Cloud Shell создайте экземпляр виртуальной машины потребителя, cosmo.

gcloud compute instances create cosmo \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=cosmo-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the cosmo app server !!' | tee /var/www/html/index.html
      EOF"

Получите и сохраните IP-адреса экземпляров:

Внутри Cloud Shell выполните команду describe для экземпляров виртуальных машин Lion и Tiger.

gcloud compute instances describe lion --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe tiger --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe cosmo --zone=us-central1-a | grep  networkIP:

6. Подключение к сети Private Service Connect

Сетевые подключения — это региональные ресурсы, представляющие собой потребительскую сторону интерфейса Private Service Connect. Вы связываете одну подсеть с сетевым подключением, а производитель назначает IP-адреса интерфейсу Private Service Connect из этой подсети. Подсеть должна находиться в том же регионе, что и сетевое подключение. Сетевое подключение должно находиться в том же регионе, что и служба производителя.

Создайте сетевое подключение.

Внутри Cloud Shell создайте сетевое подключение.

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_MANUAL \
    --producer-accept-list=$projectid \
    --subnets=intf-subnet

Перечислите сетевые подключения.

Внутри Cloud Shell отобразите список сетевых подключений.

gcloud compute network-attachments list

Опишите сетевые подключения.

Внутри Cloud Shell опишите сетевое подключение.

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

Запишите URI psc-network-attachment, который будет использоваться производителем при создании интерфейса Private Service Connect. Пример ниже:

user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1 
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-06T20:57:12.623-07:00'
fingerprint: 4Yq6xAfaRO0=
id: '3235195049527328503'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet

7. Настройка производителя

Создайте сеть VPC для производителя.

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

gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom

Создайте подсети производителей.

Внутри Cloud Shell создайте подсеть, используемую для vNIC0 интерфейса psc.

gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1

8. Включите IAP

Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
  • Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.

Внутри Cloud Shell создайте правило брандмауэра IAP.

gcloud compute firewall-rules create ssh-iap-producer \
    --network producer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

9. Создайте интерфейс подключения к частной службе.

Интерфейс Private Service Connect — это ресурс, позволяющий сети виртуальной частной сети (VPC) производителя инициировать соединения с различными пунктами назначения в сети VPC потребителя. Сети производителя и потребителя могут находиться в разных проектах и ​​организациях.

Если сетевое соединение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет этому интерфейсу IP-адрес из подсети потребителя, указанной в сетевом соединении. Сети потребителя и производителя соединяются и могут обмениваться данными, используя внутренние IP-адреса.

Внутри Cloud Shell создайте интерфейс Private Service Connect (bear) и вставьте ранее идентифицированный UR I psc-network-attachment из выходных данных команды describe для сетевого подключения.

gcloud compute instances create bear --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment

Многоканальная валидация

Убедитесь, что интерфейс PSC настроен с соответствующим IP-адресом. vNIC0 будет использовать производственную подсеть производителя (10.20.1.0/28), а vNIC1 — целевую подсеть потребителя (192.168.10.0/28).

gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:

Пример:

user$ gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
  networkIP: 10.20.1.2
  networkIP: 192.168.10.2

10. Обновите правила брандмауэра для потребителей.

Создайте правило облачного брандмауэра, разрешающее доступ от Bear к Lion.

В Cloud Shell создайте правило с более высоким приоритетом, разрешающее исходящий трафик из диапазона IP-адресов attachment-subnet (intf-subnet) к адресатам в диапазоне адресов lion-subnet-1.

gcloud compute firewall-rules create allow-limited-egress-to-lion \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=EGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="192.168.20.0/28" \
    --enable-logging

В Cloud Shell создайте правило разрешения входящего трафика, которое переопределяет подразумеваемое правило запрета входящего трафика для трафика из подсети psc-network-attachment.

gcloud compute firewall-rules create allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--enable-logging

Создайте правило Cloud Firewall, запрещающее доступ Bear ко всем диапазонам (включая Tiger).

В Cloud Shell создайте правило с низким приоритетом, которое запрещает весь исходящий трафик из диапазона IP-адресов подсети сетевого подключения, intf-subnet.

gcloud compute firewall-rules create deny-all-egress \
    --network=consumer-vpc \
    --action=DENY \
    --rules=ALL \
    --direction=EGRESS \
    --priority=65534 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="0.0.0.0/0" \
    --enable-logging

Создайте правило Cloud Firewall, разрешающее доступ из Cosmo к Bearing.

В Cloud Shell создайте правило разрешения входящего трафика, которое переопределяет подразумеваемое правило запрета входящего трафика для трафика из подсети psc-network-attachment.

gcloud compute firewall-rules create vm-subnet-allow-ingress \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="192.168.40.0/28" \
    --destination-ranges="192.168.10.0/28" \
    --enable-logging

11. Создайте маршруты Linux для интерфейса PSC.

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

Найдите имя гостевой операционной системы вашего интерфейса Private Service Connect.

Для настройки маршрутизации необходимо знать имя интерфейса Private Service Connect в гостевой операционной системе, которое отличается от имени интерфейса в Google Cloud.

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

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

Войдите в виртуальную машину psc-interface bear, используя IAP в Cloud Shell.

gcloud compute ssh bear --project=$projectid --zone=us-central1-a --tunnel-through-iap

В Cloud Shell получите IP-адрес экземпляра psc-интерфейса.

ip a

Пример:

user@bear:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
       valid_lft 85991sec preferred_lft 85991sec
    inet6 fe80::4001:aff:fe14:102/64 scope link 
       valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
       valid_lft 85991sec preferred_lft 85991sec
    inet6 fe80::4001:c0ff:fea8:a02/64 scope link 
       valid_lft forever preferred_lft forever

Найдите IP-адрес шлюза вашего интерфейса PSC.

В списке сетевых интерфейсов найдите и сохраните имя интерфейса, связанное с IP-адресом вашего интерфейса Private Service Connect — например, ens5 (vNIC1).

Для настройки маршрутизации необходимо знать IP-адрес шлюза по умолчанию вашего интерфейса Private Service Connect.

В Cloud Shell мы будем использовать значение 1, поскольку интерфейс PSC связан с vNIC1.

curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo

В примере отображается шлюз по умолчанию 192.168.10.1.

user@bear:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1

Добавить маршруты для потребительских подсетей

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

В экземпляре Bear добавьте маршруты к подсетям потребителей.

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.30.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.40.0/28 via 192.168.10.1 dev ens5

Проверить таблицу маршрутов

В Cloud Shell проверьте правильность добавленных маршрутов.

ip route show

Пример.

user@bear:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 
192.168.20.0/28 via 192.168.10.1 dev ens5 
192.168.30.0/28 via 192.168.10.1 dev ens5 
192.168.40.0/28 via 192.168.10.1 dev ens5 

12. Подтвердите успешность установления связи между медведем и львом.

Давайте убедимся, что экземпляр виртуальной машины производителя, bear, может взаимодействовать с экземпляром потребителя, lion, выполнив команду curl.

С экземпляра Bear выполните команду curl к IP-адресу Lion, указанному ранее в руководстве.

curl -v <lions IP Address>

Пример:

user@bear:~$ curl -v 192.168.20.2
*   Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 06 Jun 2023 03:53:08 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Mon, 05 Jun 2023 19:41:26 GMT
< ETag: "1e-5fd6716a1e11b"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
< 
Welcome to lion app server !!
* Connection #0 to host 192.168.20.2 left intact

13. Подтвердите, что соединение между медведем и тигром заблокировано.

Давайте подтвердим, что правило исходящего трафика блокирует доступ с Bear на Tiger, просмотрев журналы брандмауэра.

В новой сессии Cloud Console перейдите в раздел «Журналы» → «Обозреватель журналов» → выберите «Показать запрос».

2ae597e6d970cddf.png

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

jsonPayload.rule_details.reference="network:consumer-vpc/firewall:deny-all-egress"

30d7bfae315f2ee3.png

С экземпляра Bear выполните команду curl к IP-адресу Tiger, указанному ранее в руководстве. В конечном итоге команда curl завершится по таймауту.

curl -v <tiger's IP Address>

Пример:

user@bear:~$ curl -v 192.168.30.2 
*   Trying 192.168.30.2:80...
* connect to 192.168.30.2 port 80 failed: Connection timed out
* Failed to connect to 192.168.30.2 port 80: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to 192.168.30.2 port 80: Connection timed out

Убедитесь, что Log Explorer зафиксировал отклоненные сообщения брандмауэра. Выберите запись в журнале и разверните вложенные поля, чтобы просмотреть метаданные.

5c42a6587300be55.png

14. Подтвердите успешность подключения Cosmo к Bear.

Откройте новую вкладку Cloud Shell и обновите настройки проекта.

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

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

Войдите в экземпляр Cosmo, используя IAP в Cloud Shell.

gcloud compute ssh cosmo --project=$projectid --zone=us-central1-a --tunnel-through-iap

В Cloud Shell выполните команду ping к IP-адресу сервера bear (vNIV1), указанному ранее в руководстве.

ping <bears vNIC1 IP Address>

Пример:

user@cosmo:~$ ping 192.168.10.2 -c 5
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=0.265 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=0.264 ms
64 bytes from 192.168.10.2: icmp_seq=5 ttl=64 time=0.366 ms

15. Уборка

В Cloud Shell удалите компоненты учебного пособия.

gcloud compute instances delete bear --zone=us-central1-a --quiet

gcloud compute instances delete lion --zone=us-central1-a --quiet

gcloud compute instances delete tiger --zone=us-central1-a --quiet

gcloud compute instances delete cosmo --zone=us-central1-a --quiet

gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet

gcloud compute firewall-rules delete allow-ingress allow-limited-egress-to-lion deny-all-egress ssh-iap-consumer ssh-iap-producer vm-subnet-allow-ingress --quiet

gcloud compute networks subnets delete cosmo-subnet-1 intf-subnet lion-subnet-1 prod-subnet tiger-subnet-1 --region=us-central1 --quiet

gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 

gcloud compute networks delete consumer-vpc --quiet

gcloud compute networks delete producer-vpc --quiet

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

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

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

Cosmopup считает, что обучающие материалы — это здорово!!

e6d3675ca7c6911f.jpeg

Что дальше?

Посмотрите эти обучающие материалы...

Дополнительная литература и видеоматериалы

Справочная документация