Защита входящего трафика Cloud Run

1. Обзор

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

5aed47d10595c878.png

Настройки входящего трафика

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

Политика IAM

Политики IAM позволяют фильтровать запросы на основе личности отправителя и обычно используются для аутентификации запросов между сервисами.

В этой лабораторной работе вы узнаете, как и когда использовать настройки входящего трафика.

Локальные хосты подключаются через VPC.

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

31611f6a2f12fd0c.png

Имитация локальной рабочей нагрузки с использованием промежуточного сервера в VPC.

В этой лабораторной работе вы смоделируете отправку запросов с локального хоста, отправив запросы с виртуальной машины Compute Engine в VPC, как показано здесь.

aebf22740c7a84f0.png

Виртуальная машина Compute Engine, которую вы будете использовать в качестве промежуточного сервера, имеет тот же сетевой источник, что и шлюз Cloud VPN, поэтому вы можете использовать ее для имитации отправки запросов с локальной рабочей нагрузки.

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Настройка среды

  1. Установите переменную среды, указав идентификатор проекта, для использования в последующих командах:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Включите API, необходимые для выполнения этой лабораторной работы.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Клонируйте репозиторий с примерами приложений и перейдите в соответствующую директорию.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Установите регион и зону по умолчанию для Compute Engine и Cloud Run.
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Разверните сервис

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

При выполнении следующей команды следуйте этим инструкциям:

  • Расположение исходного кода (...): Убедитесь, что вы находитесь в каталоге partner-registration-service, и нажмите Enter, чтобы принять значение по умолчанию.
  • Название сервиса (partner-registration-service): Нажмите Enter, чтобы принять значение по умолчанию.
  • Разрешить неаутентифицированные вызовы к [partner-registration-service] (да/нет)? Да
gcloud run deploy 

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

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Откройте URL-адрес сервиса в браузере. Вы должны увидеть следующий результат:

Partner registration service: RUNNING

Настройте службу таким образом, чтобы она разрешала только внутренние запросы.

Теперь вы будете использовать настройки входящего трафика службы Cloud Run, чтобы разрешить запросы только из внутренних источников. Внутренние источники включают ресурсы в сетях VPC, которые находятся в том же проекте (или в том же периметре VPC Service Controls), что и служба Cloud Run, что идеально подходит для нашего случая.

Кроме того, запросы от других продуктов Google Cloud считаются внутренними, даже если они не являются частью VPC. К таким продуктам относятся, например, Pub/Sub и Workflows.

Запросы из этих источников остаются в сети Google, даже если они обращаются к вашему сервису по URL-адресу run.app , и публичный доступ запрещен.

Обновите сервис, чтобы он разрешал только внутренние запросы:

gcloud run services update partner-registration-service --ingress=internal

Если вы снова откроете URL-адрес сервиса, появится сообщение " Ошибка: Доступ запрещен ".

Поскольку ваш браузер отправляет запрос из внешней сети, а не из внутренней сети проекта Google Cloud, это именно то, чего вы ожидали. Теперь ваш сервис более защищен.

4. Создайте виртуальную машину Compute Engine в качестве промежуточного сервера.

Следующий шаг — имитация запросов от локального сервера через шлюз Cloud VPN путем создания экземпляра Compute Engine в VPC, который будет использоваться в качестве промежуточного сервера:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Результатом выполнения этой команды должно стать что-то подобное:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Отправьте запрос из экземпляра Compute Engine в службу.

Теперь откройте терминал на виртуальной машине и отправьте запрос непосредственно с машины в сети VPC.

Если следующая команда предложит вам настроить SSH в Cloud Shell, следуйте инструкциям:

gcloud compute ssh jump-server

Получите URL-адрес сервиса Cloud Run с помощью этой команды:

gcloud run services describe partner-registration-service --region us-central1

Первые несколько строк вывода должны выглядеть примерно так:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Теперь скопируйте URL-адрес и отправьте запрос с экземпляра Compute Engine, используя curl. Этот запрос должен быть успешным, поскольку экземпляр виртуальной машины работает в сети VPC вашего проекта — это внутренний источник.

export SERVICE_URL=https://

curl ${SERVICE_URL}

В результате должно получиться следующее:

Partner registration service: RUNNING

5. А что насчет контроля доступа на основе IAM?

В этой лабораторной работе вы узнали, как и когда использовать настройки входящего трафика. Настройки входящего трафика — это отличный первый шаг, если вы подключаете локальную рабочую нагрузку к Cloud Run.

Внедрение системы контроля доступа на основе IAM требует больших усилий, особенно при обращении к ней с локального хоста:

  • Для работы с IAM необходимо управлять учетными данными долгосрочных сервисных учетных записей на хосте.
  • Для подписи запросов с использованием учетных данных сервисной учетной записи в системе IAM требуются изменения в коде.

Google рекомендует многоуровневый подход к контролю доступа. Использование настроек входящего трафика для ограничения доступа только к внутренним хостам — отличный первый шаг, но не останавливайтесь на этом!

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

Поздравляем, вы завершили практическое занятие!

Что дальше:

Ознакомьтесь с другими обучающими материалами Cymbal Eats:

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.

Удаление проекта

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

Полезные ссылки

Ниже представлены дополнительные ресурсы, которые помогут вам узнать больше о двух уровнях контроля доступа в Cloud Run.