1. Введение
В этой лабораторной работе вы развернете приложение в кластере Cloud Run и GKE и просмотрите информацию о безопасности развертывания в рамках механизма безопасности Software Delivery Shield.
Что вы узнаете
- Анализ безопасности реестра артефактов
- Анализ безопасности облачных сервисов
- Позиция безопасности GKE
2. Настройка и требования
Настройка облачного проекта
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



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

В Cloud Shell включите API, необходимые для этой лабораторной работы:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
container.googleapis.com \
containersecurity.googleapis.com
Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

В результате должно появиться сообщение об успешном завершении, похожее на это:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
Выполните команду для асинхронного создания кластера GKE. Она пригодится позже в лабораторной работе:
gcloud beta container clusters create gke-cluster \
--zone us-central1-a \
--async
3. Подготовка заявления
Сначала вам нужно будет подготовить простое Node.js-приложение на основе Express, которое будет обрабатывать HTTP-запросы.
В Cloud Shell создайте новую директорию с именем starter-nodejs , затем перейдите в эту директорию:
mkdir starter-nodejs
cd starter-nodejs
Создайте файл package.json , выполнив следующие команды:
cat > ./package.json << EOF
{
"name": "cloudrun-starter-app",
"version": "1.0.0",
"description": "Node.js Starter Application",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.18.2"
}
}
EOF
Приведённый выше файл содержит команду запуска скрипта и зависимость от веб-фреймворка Express.
Далее, в той же директории создайте файл index.js , выполнив следующие команды:
cat > ./index.js << EOF
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Received a request.');
res.send("Hello Cloud Run!");
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Listening on port', port);
});
EOF
Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды PORT. Ваше приложение теперь готово к контейнеризации и развертыванию.
4. Развертывание облачного приложения
Выполните указанную ниже команду для развертывания вашего приложения:
gcloud run deploy starter-app \
--source . \
--region us-central1 \
--allow-unauthenticated \
--max-instances=3
Подтвердите создание репозитория в реестре артефактов:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)? y
5. Реестр артефактов и анализ безопасности облачной сборки.
На завершение сборки потребуется несколько минут.
Откройте Cloud Build и просмотрите артефакты сборки для последней версии.
В пользовательском интерфейсе Cloud Build в консоли Google Cloud находится панель «Информация о безопасности Software Delivery Shield», которая отображает информацию о безопасности, связанную со сборкой, такую как уровень SLSA, любые уязвимости в зависимостях и происхождение сборки.

Просмотрите аналитические данные по безопасности созданного образа контейнера. Перейдите по ссылке для просмотра отсканированных артефактов, чтобы ознакомиться с подробными сведениями об уязвимостях этого образа в реестре артефактов.
Вернитесь в консоль Cloud Shell и убедитесь, что развертывание приложения Cloud Run завершено.
Done. Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic. Service URL: https://starter-app-nin5jpgefq-uc.a.run.app
6. Анализ безопасности облачных сервисов
Cloud Run содержит панель безопасности (предварительная версия), которая отображает информацию о безопасности цепочки поставок программного обеспечения, такую как соответствие требованиям SLSA на уровне сборки, происхождение сборки и уязвимости, обнаруженные в работающих сервисах.
Откройте Cloud Run и просмотрите раздел "Аналитика безопасности" на вкладке "ИЗМЕНЕНИЯ / БЕЗОПАСНОСТЬ".

На этой панели отображается следующая информация:
- Идентификация и шифрование: адрес электронной почты учетной записи службы Compute Engine по умолчанию и ключ шифрования, используемый для развертывания.
- Уровень SLSA: Данная сборка соответствует уровню SLSA 3, который определяет уровень зрелости процесса сборки программного обеспечения в соответствии со спецификацией SLSA.
- Уязвимости: Любые уязвимости, обнаруженные в зависимостях приложения.
- Детали сборки: Подробная информация о сборке, такая как сборщик и ссылка для просмотра журналов.
- Происхождение сборки: информация о происхождении сборки, представляющая собой набор проверяемых метаданных о сборке. Она включает в себя такие детали, как дайджесты собранных образов, местоположения исходных файлов, цепочку инструментов сборки, этапы сборки и продолжительность сборки.
7. Позиция безопасности GKE
GKE может оценить уровень безопасности ваших контейнеров и предоставить активные рекомендации по настройкам кластера, конфигурации рабочих нагрузок и уязвимостям. Он включает в себя панель мониторинга состояния безопасности (предварительная версия), которая сканирует ваши кластеры и рабочие нагрузки GKE, предоставляя вам обоснованные и действенные рекомендации по улучшению уровня безопасности.
На следующих этапах вы развернете приложение в кластере GKE и проанализируете показатели безопасности на панели мониторинга состояния безопасности GKE.
Убедитесь в готовности кластера, выполнив следующую команду:
gcloud beta container clusters list
Пример выходных данных:
NAME: gke-cluster LOCATION: us-central1-a MASTER_VERSION: 1.24.9-gke.3200 MASTER_IP: 34.29.226.228 MACHINE_TYPE: e2-medium NODE_VERSION: 1.24.9-gke.3200 NUM_NODES: 3 STATUS: RUNNING
Получите учетные данные и конфигурацию для кластера GKE:
gcloud container clusters get-credentials gke-cluster \
--region=us-central1-a
Выполните команду для развертывания приложения, используя образ, созданный на предыдущем шаге:
export PROJECT_ID=$(gcloud config get-value project)
kubectl run starter-app \
--image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
--port 8080
В идеале рабочие нагрузки GKE должны иметь защищенную конфигурацию, ограничивающую их поверхность атаки. Проверка рабочих нагрузок в кластерах на наличие проблем с конфигурацией вручную в масштабе предприятия может быть сложной задачей. Вы можете использовать панель мониторинга состояния безопасности для автоматического сканирования конфигурации всех запущенных рабочих нагрузок в нескольких кластерах и получения действенных, оцененных результатов и рекомендаций по улучшению уровня безопасности.
Включить сканирование конфигурации рабочей нагрузки:
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-config-audit
Помимо сканирования конфигурации рабочей нагрузки, вы также можете включить сканирование уязвимостей рабочей нагрузки и просмотреть результаты на панели мониторинга состояния безопасности, которая представляет собой набор функций, предоставляющих объективную информацию и рекомендации по повышению безопасности ваших кластеров и рабочих нагрузок GKE.
GKE автоматически сканирует образы контейнеров в каждом подходящем Pod, работающем в вашем кластере GKE, на наличие известных уязвимостей, используя данные об уязвимостях из общедоступных баз данных CVE, таких как NIST .
Если в ваших образах контейнеров обнаружена уязвимость, GKE присваивает ей уровень серьезности и отображает результаты на панели мониторинга состояния безопасности в консоли Google Cloud. GKE также добавляет записи в Cloud Logging для аудита и отслеживания.
Включить сканирование уязвимостей рабочей нагрузки:
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-vulnerability-scanning \
--async
Откройте страницу «Состояние безопасности GKE».
Подождите несколько минут, пока завершится проверка рабочей нагрузки, а затем просмотрите результаты.

Проанализируйте проблемы с конфигурацией и затронутые рабочие нагрузки.

Зачем использовать панель мониторинга состояния безопасности?
Панель мониторинга состояния безопасности — это базовая мера безопасности, которую можно включить для любого подходящего кластера GKE. Google Cloud рекомендует использовать панель мониторинга состояния безопасности во всех ваших кластерах по следующим причинам:
- Минимальные сбои: Функции не мешают работе запущенных приложений и не нарушают их выполнение.
- Практические рекомендации: При наличии возможности, панель мониторинга состояния безопасности предоставляет список действий для устранения обнаруженных проблем. Эти действия включают команды, которые вы можете выполнить, примеры изменений конфигурации, которые можно внести, и рекомендации о том, что нужно сделать для смягчения последствий уязвимостей.
- Визуализация: Панель мониторинга состояния безопасности предоставляет общую визуализацию проблем, затрагивающих кластеры в рамках вашего проекта, и включает диаграммы и графики, показывающие достигнутый прогресс и потенциальное влияние каждой проблемы.
- Результаты, основанные на экспертном мнении: GKE присваивает обнаруженным проблемам рейтинг серьезности, опираясь на опыт групп безопасности Google и отраслевые стандарты.
- Журналы событий с возможностью аудита: GKE добавляет все обнаруженные проблемы в систему логирования для повышения удобства составления отчетов и мониторинга.
8. Поздравляем!
Поздравляем! Вы успешно завершили практическое занятие.
Что мы рассмотрели:
- Информация Security Insights о сборочных артефактах и приложениях, работающих в Cloud Run и GKE.
Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избежать выставления счетов — удалить проект, созданный для этого урока.
—
Последнее обновление: 21.03.2023