1. Введение
Политики безопасности Google Cloud Armor Edge позволяют ограничивать доступ к кэшированным объектам в Google Cloud CDN и Google Cloud Storage. Примерами причин для этого являются обеспечение того, чтобы ваши пользователи не получали доступ к объектам в хранилищах из регионов с ограниченным доступом, или обеспечение фильтрации распространения медиаконтента в тех регионах, где у вас есть лицензия на это.
В этой лабораторной работе мы создадим хранилище GCS, загрузим в него образ, привяжем его к балансировщику нагрузки, а затем включим политики Cloud CDN и Edge Security.
Что вы узнаете
- Как настроить хранилище Cloud Storage с возможностью кэширования контента
- Как создать политику безопасности на границе сети для защиты контента.
- Как проверить, что политика безопасности Edge работает должным образом?
Что вам понадобится
- Базовые знания сетевых технологий и протокола HTTP.
- Базовые знания командной строки Unix/Linux.
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



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

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

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.
Прежде чем начать
Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Включить API
Включите все необходимые службы
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Создайте сегмент облачного хранилища.
В консоли Cloud перейдите в меню «Навигация» > «Облачное хранилище» > «Браузер» . Нажмите «СОЗДАТЬ КОРЗИНУ» :

Правила именования контейнеров:
- Не включайте конфиденциальную информацию в имя корзины, поскольку пространство имен корзины является глобальным и общедоступным.
- Названия контейнеров должны содержать только строчные буквы, цифры, дефисы (-), подчеркивания (_) и точки (.). Названия, содержащие точки, требуют проверки .
- Названия категорий должны начинаться и заканчиваться цифрой или буквой.
- Названия сегментов должны содержать от 3 до 63 символов. Названия, содержащие точки, могут содержать до 222 символов, но каждый компонент, разделённый точкой, не может быть длиннее 63 символов.
- Имена сегментов (bucket names) нельзя представить в виде IP-адреса в десятичной точечной записи (например, 192.168.5.4).
- Названия сегментов не могут начинаться с префикса "goog".
- В названиях контейнеров не может содержаться слово «google» или его близкие по написанию орфографические ошибки.
- Кроме того, для соответствия требованиям DNS и обеспечения совместимости в будущем не следует использовать символы подчеркивания (_) или точки, расположенные рядом с другой точкой или дефисом. Например, "." или "-." или ".-" недопустимы в DNS-именах.
Нажмите ПРОДОЛЖИТЬ .
Тип местоположения: регион
Местоположение: выберите регион, расположенный далеко от вас.
Нажмите ПРОДОЛЖИТЬ .
Класс хранилища по умолчанию: Стандартный
Нажмите ПРОДОЛЖИТЬ .
Снимите флажок «Применить предотвращение публичного доступа к этому сегменту» в разделе «Предотвратить публичный доступ».
В разделе «Контроль доступа» выберите «Тонкая детализация» .
Нажмите ПРОДОЛЖИТЬ .
После настройки хранилища нажмите кнопку СОЗДАТЬ :
Вот и все — вы только что создали хранилище Cloud Storage!
4. Загрузите объект в свой бакет.
Теперь загрузите объект в корзину.
Сначала загрузите это изображение во временный экземпляр Cloud Shell. В приведенном ниже примере используется изображение Google с главной страницы Google.
Из Cloud Shell
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
Используйте команду gsutil cp, чтобы загрузить изображение из места, где вы его сохранили, в созданный вами бакет:
Из Cloud Shell
gsutil cp google.png gs://YOUR-BUCKET-NAME
Теперь удалите загруженное изображение:
Из Cloud Shell
rm google.png
Найдите свой объект, щелкните по трем точкам справа и измените права доступа на общедоступные.


5. Создайте балансировщик нагрузки.
Далее мы создадим балансировщик нагрузки HTTP.
Перейдите в раздел «Сеть» >> «Сетевые службы» >> «Балансировка нагрузки» >> «Создать балансировщик нагрузки» >> «Балансировщик нагрузки HTTP» >> «Интернет для моих виртуальных машин» >> «Классический балансировщик нагрузки HTTP(S)».
Для начала придумайте имя для балансировщика нагрузки, который вы будете создавать.
Создать бэкэнд-бакет
Создайте новый бэкэнд-корзину, используя ту же самую, которую вы только что создали, и выберите «Включить CDN» и «Кэшировать статический контент». Нажмите «Создать».

Создайте правила для хоста и пути.
Перейдите к правилам хоста и пути в левой части экрана. Мы будем использовать простое правило хоста/пути и отправлять все запросы в хранилище.

Создание конфигурации внешнего интерфейса
Выберите конфигурацию интерфейса. Для конфигурации интерфейса мы будем использовать HTTP (хотя HTTPS также будет работать, если у вас есть сертификат) и временный IP-адрес, а также убедитесь, что вы выбрали сеть премиум-уровня.

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

Запрос к балансировщику нагрузки
Через пару минут попробуйте запросить у балансировщика нагрузки информацию о загруженном вами объекте. Вам понадобится IP-адрес балансировщика нагрузки и имя образа. Команда имеет следующую структуру:
Из терминала
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Выход
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
Убедитесь, что ваш контент загружается из CDN через мониторинг CDN или балансировки нагрузки. Вы должны получить коэффициент попаданий, близкий к 100%. Если вам нужно выполнить несколько запросов, вы можете сделать следующее.
Из терминала
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
Подтвердите, что контент предоставляется облачной CDN-сетью.
Убедитесь, что вы обслуживаете трафик из CDN, перейдя в раздел «Сетевые службы» >> «CDN».

6. Удалите объект из GCS.
Теперь, когда кэш заполнен, давайте удалим объект из хранилища, чтобы подчеркнуть, что мы применяем политику к кэшу, а не к бэкэнду.
Перейдите в Cloud Storage >> %bucket name% >> objects
Выберите изображение и удалите его.

7. Создайте политику безопасности Edge для кэша вашей CDN.
Перейдите в раздел «Сетевая безопасность» >> «Cloud Armor» и нажмите «Создать политику».
Выберите следующее
Тип политики: Политика безопасности на границе сети
Действие по умолчанию: Запретить



Примените эту политику к вашему бэкэнд-хранилищу.
8. Проверьте политику безопасности Edge.
Теперь, когда мы создали политику безопасности Edge перед нашим бэкэнд-сервером, давайте проверим, работает ли она должным образом.
Проверьте политику безопасности.
Через несколько минут вы сможете убедиться, что политика Cloud Armor запущена. В командной строке выполнение следующей команды приведет к ошибке 403.
Из терминала
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Выход
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
Изучите журналы событий.
Далее вы можете проверить журналы, чтобы увидеть применяемую политику безопасности на границе сети. Перейдите в раздел «Операции» >> «Ведение журналов» >> «Проводник журналов».
Введите приведенный ниже фрагмент в запрос и нажмите «Выполнить».

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
Обратите внимание на ответ 403 и на применяемую политику безопасности.

Удалите политику безопасности
Удалите политику безопасности и запросите объект из кэша.
Перейдите в раздел «Сетевая безопасность» >> «Cloud Armor» >> «%POLICY NAME%» >> «цели» и удалите целевой сегмент.

Подтверждение удаления политики
Через несколько минут отправьте еще один запрос curl к ресурсу в хранилище. На этот раз вы получите ответ с кодом 200.
Из терминала
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Выход
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
* Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0
Поздравляем! Вы успешно завершили эту лабораторную работу по политикам безопасности Cloud Armor Edge.
©2020 Google LLC. Все права защищены. Google и логотип Google являются товарными знаками Google LLC. Все остальные названия компаний и продуктов могут являться товарными знаками соответствующих компаний, с которыми они связаны.
9. Уборка лаборатории
Перейдите в раздел «Сетевая безопасность» >> «Cloud Armor» >> «%НАЗВАНИЕ ПОЛИТИКИ%» и выберите «Удалить».

Перейдите в раздел «Облачное хранилище», выберите созданный вами сегмент и нажмите «Удалить».

Перейдите в раздел «Сеть» >> «Сетевые службы» >> «Балансировка нагрузки». Выберите созданный вами балансировщик нагрузки и нажмите «Удалить».

10. Поздравляем!
Вы успешно завершили практическое задание «Защита кэша Edge с помощью Cloud Armor»!
Что мы рассмотрели
- Как настроить хранилище в облаке и связанный с ним балансировщик нагрузки в облаке
- Как создать политику безопасности Cloud Armor Edge
- Как проверить, что политика безопасности Edge работает должным образом.
Следующие шаги
- Попробуйте настроить политику безопасности Edge с учетом попадания в кэш ресурса вычислительного ядра.