1. Введение
Private Service Connect
Private Service Connect — это функция сетевых возможностей Google Cloud, которая позволяет пользователям получать доступ к управляемым сервисам в частном порядке из своей сети VPC. Аналогичным образом, она позволяет производителям управляемых сервисов размещать эти сервисы в своих отдельных сетях VPC и предлагать своим пользователям частное соединение.

Private service Connect Producer Access Control
Вместо автоматического принятия всех подключений от любого потребителя, производители могут принимать входящие запросы на подключение только в том случае, если потребитель находится в списке разрешенных потребителей. Вы можете указывать потребителей по проекту, сети VPC или отдельной конечной точке PSC. Вы не можете включать разные типы потребителей в один и тот же список разрешенных или запрещенных потребителей.
При любом из предпочтительных способов подключения принятые соединения могут быть переопределены и отклонены политикой организации (compute.restrictPrivateServiceConnectConsumer), которая блокирует входящие соединения.
Обратите внимание, что политика организации (compute.restrictPrivateServiceConnectConsumer) применяется к организации, папке или проекту. Если вам нужен более детальный контроль доступа к конечной точке PSC, вы можете использовать список разрешенных потребителей для отдельных конечных точек PSC.
Контроль доступа на основе конечных точек
Управление доступом на основе конечных точек PSC — это возможность для производителя авторизовать потребителей через отдельные конечные точки PSC в политиках подключения услуг.
Этот подход, рекомендуемый для многопользовательских сервисов , обеспечивает наиболее детальный контроль над управлением соединениями.
Данный практический урок посвящен изучению того, как настроить эту функцию.
Обратите внимание, что этот метод не применим к бэкэндам Private Service Connect.
2. Чему вы научитесь
- Как продюсеру опубликовать сервис с помощью PSC.
- Как продюсеру создать систему контроля доступа на основе конечных точек PSC?
- Как потребителю получить доступ к услуге PSC?
3. Общая архитектура лаборатории

4. Этапы подготовки
Для работы в лаборатории требуются роли IAM.
Для начала необходимо назначить необходимые роли IAM учетной записи GCP на уровне проекта.
- Администратор вычислительной сети (
roles/compute.networkAdmin) Эта роль предоставляет вам полный контроль над сетевыми ресурсами Compute Engine. - Администратор ведения журналов (
roles/logging.admin) Эта роль предоставляет вам доступ ко всем разрешениям на ведение журналов, а также к зависимым разрешениям. - Администратор использования сервиса (
roles/serviceusage.serviceUsageAdmin) Эта роль позволяет включать, отключать и проверять состояния сервиса, контролировать операции, а также управлять квотой и выставлением счетов для потребительского проекта. - Администратор вычислительных экземпляров (
roles/compute.instanceAdmin.v1) Эта роль предоставляет вам полный контроль над экземплярами Compute Engine, группами экземпляров, дисками, моментальными снимками и образами. Доступ на чтение ко всем сетевым ресурсам Compute Engine. - Администратор безопасности вычислительных ресурсов (
roles/compute.securityAdmin) Эта роль предоставляет вам права на создание, изменение и удаление правил брандмауэра и SSL-сертификатов, а также на настройку параметров защищенных виртуальных машин.
Включить API
Внутри Cloud Shell убедитесь, что ваш проект настроен правильно, и задайте переменные среды.
Внутри Cloud Shell выполните следующие действия:
gcloud auth login
gcloud config set project <your project id>
export project_id=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project_id
echo $region
echo $zone
Включите все необходимые API Google в проекте. В Cloud Shell выполните следующие действия:
gcloud services enable \
compute.googleapis.com
Создать VPC для продюсера
В проекте создайте сеть VPC с пользовательским режимом подсети. Выполните следующие действия в Cloud Shell:
gcloud compute networks create producer-net \
--subnet-mode=custom
Создайте подсети в VPC производителя.
Вам потребуется три подсети: подсеть производителя (producer-subnet) для вашей службы; подсеть только для прокси (proxy-only-subnet) для балансировщика нагрузки, который будет публиковать вашу службу; подсеть PSC (psc-subnet) для PSC, который будет публиковать службу.
Внутри Cloud Shell выполните следующие действия для создания подсетей IPv4:
gcloud compute networks subnets create producer-subnet \
--network=producer-net \
--range=10.10.0.0/24 \
--region=$region
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=producer-net \
--range=10.30.0.0/24
gcloud compute networks subnets create psc-subnet \
--network=producer-net \
--region=$region \
--range=192.168.0.0/16 \
--purpose=PRIVATE_SERVICE_CONNECT
Создание Cloud NAT и Cloud Router для VPC производителя
Облачный NAT используется для того, чтобы виртуальные машины могли загружать и устанавливать приложения.
gcloud compute routers create $region-cr \
--network=producer-net \
--region=$region
gcloud compute routers nats create $region-nat \
--router=$region-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
Создание потребительской VPC
В проекте создайте сеть VPC с пользовательским режимом подсети. Выполните следующие действия в Cloud Shell:
gcloud compute networks create consumer-net \
--subnet-mode=custom
Создайте подсеть в потребительской VPC.
Внутри Cloud Shell выполните следующие действия для создания подсети IPv4:
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Создайте глобальную политику межсетевого экрана для VPC производителя и VPC потребителя.
Вам потребуется создать глобальную политику сетевого брандмауэра и связать ее с VPC производителя и VPC потребителя.
gcloud compute network-firewall-policies create global-fw-policy \
--global
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--network=producer-net \
--global-firewall-policy
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--network=consumer-net \
--global-firewall-policy
Разрешить SSH
Чтобы разрешить Identity-Aware Proxy (IAP) подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:
- Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
- Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.
gcloud compute network-firewall-policies rules create 100 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy
Добавьте правила межсетевого экрана для входящего трафика в вашу службу.
Для публикации сервиса вам потребуется использовать региональный внутренний балансировщик нагрузки приложений. Правило входящего трафика брандмауэра y должно разрешать доступ к сервису только для подсети прокси. Для получения подробной информации ознакомьтесь с этим документом .
gcloud compute network-firewall-policies rules create 200 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-access-service" \
--direction=INGRESS \
--src-ip-ranges=10.30.0.0/24 \
--layer4-configs=tcp:80 \
--global-firewall-policy
Разрешите проверку работоспособности балансировщика нагрузки для вашей службы.
Для проверки работоспособности регионального внутреннего балансировщика нагрузки используются диапазоны IP-адресов 35.191.0.0/16 и 130.211.0.0/22. Вам потребуется создать правило входящего трафика брандмауэра, разрешающее проверку работоспособности с помощью этих зондов. Для получения более подробной информации ознакомьтесь с этим документом .
gcloud compute network-firewall-policies rules create 300 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-health-check" \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22\
--layer4-configs=tcp:80 \
--global-firewall-policy
Создайте виртуальную машину в качестве HTTP-клиента в потребительской VPC.
Внутри Cloud Shell выполните следующие действия, чтобы создать экземпляр виртуальной машины в качестве тестового клиента:
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
Создайте виртуальную машину в качестве HTTP-сервера в VPC производителя.
Внутри Cloud Shell выполните следующие действия, чтобы создать экземпляр виртуальной машины в качестве HTTP-сервера:
gcloud compute instances create myserver \
--subnet=producer-subnet \
--zone=$zone \
--no-address \
--shielded-secure-boot \
--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'
5. Производитель публикует услугу PSC.
Создать региональный внутренний балансировщик нагрузки приложений
В качестве интерфейса службы вы создадите региональный внутренний балансировщик нагрузки приложений, а в качестве бэкэнда — группу неуправляемых экземпляров, конечной точкой которой будет HTTP-сервер, созданный нами ранее.
Зарезервировать IP-адрес балансировщика нагрузки
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Создайте группу экземпляров.
Вам нужно будет создать группу неуправляемых экземпляров и добавить в неё экземпляр виртуальной машины myserver.
gcloud compute instance-groups unmanaged create my-service-ig \
--zone=$zone
gcloud compute instance-groups unmanaged add-instances my-service-ig \
--zone=$zone \
--instances=myserver
Создайте проверку работоспособности HTTP.
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Создайте серверную службу.
gcloud compute backend-services create l7-ilb-backend-service \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--health-checks=l7-ilb-basic-check \
--health-checks-region=$region \
--region=$region
Добавить бэкэнд в бэкэнд-сервис
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region
Создайте карту URL-адресов
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Создайте целевой прокси-сервер.
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Создайте правило пересылки.
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=producer-net \
--subnet=producer-subnet \
--address=l7-ilb-ip-address \
--ports=80 \
--region=$region \
--target-http-proxy=l7-ilb-proxy \
--target-http-proxy-region=$region
Производитель PSC публикует сервис
Для публикации сервиса с параметром connection-preference=ACCEPT_MANUAL и пустыми списками потребителей вам потребуется использовать PSC.
gcloud compute service-attachments create my-psc-service \
--region=$region \
--target-service=projects/$project_id/regions/$region/forwardingRules/l7-ilb-forwarding-rule \
--connection-preference=ACCEPT_MANUAL \
--nat-subnets=psc-subnet
export myserver_service_attachment=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(selfLink.scope(v1))")
echo $myserver_service_attachment
6. Потребитель создает конечную точку PSC.
Зарезервировать IP-адрес для конечной точки PSC
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
Создать конечную точку PSC
Создайте конечную точку PSC и получите IP-адрес этой конечной точки PSC для тестирования на следующем шаге.
gcloud compute forwarding-rules create myserver-psc-endpoint \
--region=$region \
--network=consumer-net \
--address=myserver-psc-endpoint-ip \
--target-service-attachment=$myserver_service_attachment
psc_endpoint_ip=$(gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region --format="value(IPAddress)")
echo $psc_endpoint_ip
Потребитель проверяет состояние конечной точки PSC.
Прежде чем производитель добавит конечную точку PSC в список потребителей, соединение должно быть видно в списке подключенных конечных точек на стороне потребителя со статусом «Ожидание».
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Вы увидите результат, аналогичный приведенному ниже.
IPAddress: 10.20.0.3
allowPscGlobalAccess: false
creationTimestamp: '2026-02-23T16:27:27.920-08:00'
fingerprint: yh_UiYqjHCc=
id: '934193159895862912'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: myserver-psc-endpoint
network: https://www.googleapis.com/compute/v1/projects/<project_id>/global/networks/consumer-net
networkTier: PREMIUM
pscConnectionId: '160443618817212419'
pscConnectionStatus: PENDING
region: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
serviceDirectoryRegistrations:
- namespace: goog-psc-default
target: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
7. Проверьте доступ с виртуальной машины потребителя к виртуальной машине производителя.
Проверьте IP-адрес конечной точки PSC.
echo $psc_endpoint_ip
Подключитесь по SSH к виртуальной машине с именем myclient и проверьте, может ли она получить доступ к myserver по HTTP-порту 80.
Внутри Cloud Shell выполните следующие действия:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Используйте curl для доступа к созданной вами конечной точке PSC.
curl -m 10 <psc_endpoint_ip>
Вы увидите сообщение о том, что команда curl завершилась по таймауту. Тестовый клиент из потребительской VPC не может получить доступ к HTTP-серверу в производительской VPC.
curl: (28) Connection timed out after 10001 milliseconds
Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
8. Производитель утверждает конечную точку PSC.
Производитель проверяет состояние конечной точки PSC.
Прежде чем производитель добавит конечную точку PSC в список потребителей, соединение должно быть видно в подключении к сервису со статусом «Ожидание».
gcloud compute service-attachments describe my-psc-service --region=$region
Вы увидите результат, аналогичный приведенному ниже.
connectedEndpoints:
- consumerNetwork: https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net
endpoint: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
endpointWithId: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
pscConnectionId: '160443618817212419'
status: PENDING
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2026-02-23T13:27:33.886-08:00'
description: ''
enableProxyProtocol: false
fingerprint: -9EI8FCALrA=
id: '2578692595155826858'
kind: compute#serviceAttachment
name: my-psc-service
natSubnets:
- https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/subnetworks/psc-subnet
pscServiceAttachmentId:
high: '149466704441770984'
low: '2578692595155826858'
reconcileConnections: false
region: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
targetService: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/l7-ilb-forwarding-rule
Получите URI конечной точки PSC на основе идентификатора.
URI конечной точки PSC, основанный на идентификаторе, — это идентификатор правила переадресации, созданного потребителем. В приведенном выше примере 'endpointWithId' — это URI конечной точки PSC, созданной потребителем. Этот URI понадобится производителю для создания контроля доступа на основе конечной точки.
(Обратите внимание, что идентификатор подключения PSC — это не тот идентификатор, который нам нужен.)
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
Добавьте URI конечной точки PSC на основе идентификатора в список разрешенных устройств потребителя.
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
Производитель проверяет состояние конечной точки PSC.
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Вы увидите результат, аналогичный приведенному ниже. Статус изменился на «ПРИНЯТО».
{'consumerNetwork': 'https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net', 'endpoint': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint', 'endpointWithId': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/47564871796017232', 'pscConnectionId': '54547416268144643', 'status': 'ACCEPTED'}
9. Проверьте доступ с виртуальной машины потребителя к виртуальной машине производителя.
Проверьте IP-адрес конечной точки PSC.
echo $psc_endpoint_ip
Подключитесь по SSH к виртуальной машине с именем myclient и проверьте, может ли она получить доступ к myserver по HTTP-порту 80.
Внутри Cloud Shell выполните следующие действия:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Используйте curl для доступа к созданной вами конечной точке PSC.
curl <psc_endpoint_ip>
Вы увидите, что команда curl успешно возвращает ответ от myserver . Тестовый клиент из потребительской VPC получил доступ к HTTP-серверу в производительской VPC.
I am a Http Server.
Чтобы вернуться в Cloud Shell, завершите сеанс SSH.
exit
10. Уборка
Очистите виртуальные машины.
Внутри Cloud Shell выполните следующие действия:
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
Очистка потребительских компонентов PSC
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
Очистка компонентов производителя PSC
gcloud compute service-attachments delete my-psc-service \
--region=$region --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule \
--region=$region --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy \
--region=$region --quiet
gcloud compute url-maps delete l7-ilb-map \
--region=$region --quiet
gcloud compute backend-services remove-backend l7-ilb-backend-service \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region --quiet
gcloud compute backend-services delete l7-ilb-backend-service \
--region=$region --quiet
gcloud compute health-checks delete l7-ilb-basic-check \
--region=$region --quiet
gcloud compute instance-groups unmanaged delete my-service-ig \
--zone=$zone --quiet
gcloud compute addresses delete l7-ilb-ip-address \
--region=$region --quiet
Очистка межсетевого экрана, облачного NAT, облачного маршрутизатора и VPC.
gcloud compute network-firewall-policies rules delete 100 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 200 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 300 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies delete global-fw-policy \
--global --quiet
gcloud compute routers nats delete $region-nat \
--router=$region-cr \
--region=$region --quiet
gcloud compute routers delete $region-cr \
--region=$region --quiet
gcloud compute networks subnets delete producer-subnet \
--region=$region --quiet
gcloud compute networks subnets delete proxy-only-subnet \
--region=$region --quiet
gcloud compute networks subnets delete psc-subnet \
--region=$region --quiet
gcloud compute networks delete producer-net --quiet
gcloud compute networks subnets delete consumer-subnet \
--region=$region --quiet
gcloud compute networks delete consumer-net --quiet
11. Поздравляем!
Вы успешно протестировали управление доступом на основе конечных точек производителя в рамках Private Service Connect.