1. Обзор
В этой лабораторной работе показано, как ограничить доступ к службе Cloud Run и разрешить только запросы от рабочей нагрузки, выполняющейся локально или в VPC вашего проекта. Вы можете использовать два уровня контроля доступа: настройки входа и политики управления идентификацией и доступом (IAM).
Настройки входа
Настройки входящего трафика позволяют фильтровать запросы по их сетевому происхождению (внутреннему или внешнему). По умолчанию разрешены все запросы, в том числе из общедоступного Интернета.
IAM-политика
Политики IAM позволяют фильтровать запросы на основе личности отправителя и обычно используются для аутентификации запросов между службами.
В этой лабораторной работе вы узнаете, как и когда использовать параметры входящего трафика.
Локальные хосты подключаются через VPC.
В этой лабораторной работе мы смоделируем локальную рабочую нагрузку. Чтобы подключить локальный хост к Cloud Run, вам необходимо настроить частный доступ Google для локальных хостов . Сюда входит настройка шлюза Cloud VPN в сети VPC, как показано ниже.
Моделирование локальной рабочей нагрузки с использованием сервера перехода в VPC
В этой лабораторной работе вы смоделируете отправку запросов с локального хоста, отправляя запросы с виртуальной машины Compute Engine в VPC, как показано здесь.
Виртуальная машина Compute Engine, которую вы будете использовать в качестве сервера перехода, имеет тот же сетевой источник, что и облачный VPN-шлюз, поэтому вы можете использовать ее для имитации отправки запросов из локальной рабочей нагрузки.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Настройка среды
- Задайте для переменной среды идентификатор проекта для использования в последующих командах:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
- Включите API, необходимые для выполнения этой лабораторной работы.
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com
- Клонируйте репозиторий примера приложения и перейдите в каталог.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- Установите регион и зону по умолчанию для Compute Engine и Cloud Run.
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}
3. Разверните сервис
Сначала вы развернете службу и оставите ее общедоступной. После того, как вы убедитесь, что можете отправлять запросы из своего браузера, мы заблокируем службу и разрешим только запросы из внутренних сетевых источников.
При выполнении следующей команды следуйте этим инструкциям:
- Расположение исходного кода (...): убедитесь, что вы находитесь в каталоге службы регистрации партнеров, и нажмите Enter, чтобы принять значение по умолчанию.
- Имя службы (partner-registration-service): нажмите Enter, чтобы принять значение по умолчанию.
- Разрешить неаутентифицированные вызовы к [службе регистрации партнеров] (да/нет)? Да
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), что и сервис 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:
- Запуск облачных рабочих процессов с помощью Eventarc
- Запуск обработки событий из облачного хранилища
- Подключение к частному CloudSQL из Cloud Run
- Подключение к полностью управляемым базам данных из Cloud Run
- Безопасное бессерверное приложение с прокси-сервером с идентификацией личности (IAP)
- Запуск заданий Cloud Run с помощью Cloud Scheduler
- Безопасное развертывание в Cloud Run
- Подключение к частному AlloyDB из GKE Autopilot
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.
Полезные ссылки
Ниже приведены дополнительные ресурсы, которые помогут вам узнать больше о двух уровнях контроля доступа в Cloud Run.