Анализ безопасности во время выполнения

1. Введение

В этой лабораторной работе вы развернете приложение в кластере Cloud Run и GKE и просмотрите информацию о безопасности развертывания в рамках механизма безопасности Software Delivery Shield.

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

  • Анализ безопасности реестра артефактов
  • Анализ безопасности облачных сервисов
  • Позиция безопасности GKE

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 долларов США .

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

Активируйте Cloud Shell, нажав на значок справа от строки поиска.

ecdc43ada29e91b.png

В Cloud Shell включите API, необходимые для этой лабораторной работы:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

6356559df3eccdda.png

В результате должно появиться сообщение об успешном завершении, похожее на это:

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, любые уязвимости в зависимостях и происхождение сборки.

7d9fd2213f3704c4.png

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

Вернитесь в консоль 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 и просмотрите раздел "Аналитика безопасности" на вкладке "ИЗМЕНЕНИЯ / БЕЗОПАСНОСТЬ".

62a9f5d26207e58e.png

На этой панели отображается следующая информация:

  • Идентификация и шифрование: адрес электронной почты учетной записи службы 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».

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

5b1b8158bc55ce67.png

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

58e6f4b6d8eaa99a.png

Зачем использовать панель мониторинга состояния безопасности?

Панель мониторинга состояния безопасности — это базовая мера безопасности, которую можно включить для любого подходящего кластера GKE. Google Cloud рекомендует использовать панель мониторинга состояния безопасности во всех ваших кластерах по следующим причинам:

  • Минимальные сбои: Функции не мешают работе запущенных приложений и не нарушают их выполнение.
  • Практические рекомендации: При наличии возможности, панель мониторинга состояния безопасности предоставляет список действий для устранения обнаруженных проблем. Эти действия включают команды, которые вы можете выполнить, примеры изменений конфигурации, которые можно внести, и рекомендации о том, что нужно сделать для смягчения последствий уязвимостей.
  • Визуализация: Панель мониторинга состояния безопасности предоставляет общую визуализацию проблем, затрагивающих кластеры в рамках вашего проекта, и включает диаграммы и графики, показывающие достигнутый прогресс и потенциальное влияние каждой проблемы.
  • Результаты, основанные на экспертном мнении: GKE присваивает обнаруженным проблемам рейтинг серьезности, опираясь на опыт групп безопасности Google и отраслевые стандарты.
  • Журналы событий с возможностью аудита: GKE добавляет все обнаруженные проблемы в систему логирования для повышения удобства составления отчетов и мониторинга.

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

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

Что мы рассмотрели:

  • Информация Security Insights о сборочных артефактах и ​​приложениях, работающих в Cloud Run и GKE.

Уборка

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

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

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

Последнее обновление: 21.03.2023