Защита Edge Cache с помощью Cloud Armor

1. Введение

Политики безопасности Google Cloud Armor Edge позволяют ограничить доступ к кэшированным объектам в Google Cloud CDN и Google Cloud Storage. Примеры причин для этого включают обеспечение того, чтобы ваши пользователи не получали доступ к объектам в сегментах хранилища из ограниченных географических регионов, или обеспечение того, чтобы ваше распространение мультимедиа осуществляло фильтрацию по географическим регионам, на которые у вас есть лицензия.

В этой лабораторной работе мы создадим корзину GCS, загрузим в нее изображение, привяжем его к балансировщику нагрузки, а затем включим для него политики Cloud CDN и Edge Security.

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

  • Как настроить сегмент облачного хранилища с кэшируемым содержимым
  • Как создать политику безопасности Edge для защиты контента
  • Как проверить, что политика безопасности Edge работает должным образом

Что вам понадобится

  • Базовые настройки сети и знание HTTP
  • Базовые знания командной строки Unix/Linux.

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

Самостоятельная настройка среды

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

Запустить Cloud Shell

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

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.

Прежде чем начать

В 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 Console перейдите в меню «Навигация» > «Облачное хранилище» > «Браузер» . Нажмите СОЗДАТЬ ВЕДРО :

baf3d3c74282ecba.png

Правила именования бакетов:

  • Не включайте конфиденциальную информацию в имя сегмента, поскольку пространство имен сегмента является глобальным и общедоступным.
  • Имена сегментов должны содержать только строчные буквы, цифры, дефисы (-), символы подчеркивания (_) и точки (.). Имена, содержащие точки, требуют проверки .
  • Имена сегментов должны начинаться и заканчиваться цифрой или буквой.
  • Имена сегментов должны содержать от 3 до 63 символов. Имена, содержащие точки, могут содержать до 222 символов, но длина каждого компонента, разделенного точкой, не может превышать 63 символа.
  • Имена сегментов не могут быть представлены как IP-адреса в десятичном формате с точками (например, 192.168.5.4).
  • Имена сегментов не могут начинаться с префикса «goog».
  • Названия сегментов не могут содержать слово "google" или близкие к орфографическим ошибкам слова "google".
  • Кроме того, для обеспечения соответствия DNS и будущей совместимости не следует использовать символы подчеркивания (_) или ставить точку рядом с другой точкой или тире. Например, «..» или «-». или «.-» недопустимы в именах DNS.

Нажмите ПРОДОЛЖИТЬ .

Тип локации: регион

Местоположение: выберите регион далеко от вас

Нажмите ПРОДОЛЖИТЬ .

Класс хранилища по умолчанию: Стандартный

Нажмите ПРОДОЛЖИТЬ .

Снимите флажок «Применять запрет публичного доступа к этому сегменту» в разделе «Запретить общий доступ».

Выберите «Мелкозернистый» в разделе «Контроль доступа».

Нажмите ПРОДОЛЖИТЬ .

После того, как вы настроили корзину, нажмите CREATE :

Вот и все — вы только что создали корзину 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

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

821aad82d8633922.png

30a975d3ad22d33d.png

5. Создайте балансировщик нагрузки

Далее мы создадим балансировщик нагрузки HTTP.

Перейдите в раздел «Сеть» >> «Сетевые службы» >> «Балансировка нагрузки» >> «Создать балансировщик нагрузки» >> «Балансировщик нагрузки HTTP» >> «Интернет к моим виртуальным машинам» >> «Классический балансировщик нагрузки HTTP(S)».

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

Создать серверный сегмент

Создайте новый серверный сегмент, который является только что созданным, и выберите «Включить CDN и кэшировать статический контент». Нажмите Создать.

ed392a56538d499e.png

Создание правил хоста и пути

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

7c1a664e0d1f15b0.png

Создать конфигурацию внешнего интерфейса

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

2597a5e63d618622.png

Нажмите Создать

Получить IP-адрес балансировщика нагрузки

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

9b757362d806e835.png

Запросить балансировщик нагрузки

Через пару минут попытайтесь запросить балансировщик нагрузки для загруженного вами объекта. Вам понадобится 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

Подтвердите контент, обслуживаемый Cloud CDN

Убедитесь, что вы обслуживаете трафик из CDN, перейдя в Сетевые службы >> CDN.

a52d0ba4c084aa05.png

6. Удалить объект из GCS.

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

Перейдите в Cloud Storage >> %bucket name% >> объекты.

Выберите изображение и удалите его.

a1cc1bb9a0ff41df.png

7. Создайте политику безопасности Edge для вашего кэша CDN.

Перейдите в раздел «Сетевая безопасность» >> Cloud Armor и нажмите «Создать политику».

Выберите следующее

Тип политики: Пограничная политика безопасности

Действие по умолчанию: Запретить

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Примените политику к своему серверному сегменту.

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
<

Изучите журналы

Затем вы можете проверить журналы, чтобы увидеть примененную политику безопасности пограничных устройств. Перейдите в «Операции >> Ведение журнала >> Обозреватель журналов».

Введите приведенный ниже фрагмент в запрос и нажмите «Выполнить».

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Обратите внимание на ответ 403 и принудительную политику безопасности.

cddc48ca93ad79ca.png

Удалить политику безопасности

Удалите политику безопасности и запросите объект из кэша.

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

350655729a89eb33.png

Подтвердить удаление политики

По прошествии нескольких минут отправьте еще один локон на ресурс в сегменте хранилища. На этот раз вы получите 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.

© Google LLC, 2020. Все права защищены. Google и логотип Google являются товарными знаками Google LLC. Все остальные названия компаний и продуктов могут быть товарными знаками соответствующих компаний, с которыми они связаны.

9. Уборка лаборатории

Перейдите в раздел «Сетевая безопасность» >> Cloud Armor >> %POLICY NAME% и выберите «Удалить».

21eefb5f375e8fee.png

Перейдите в Cloud Storage, выберите созданную вами корзину и нажмите «Удалить».

ef2fa8d45c1d3452.png

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

ee2e78c10f4104eb.png

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

Вы завершили работу над кодовой лабораторией Defending Edge Cache с Cloud Armor!

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

  • Как настроить сегмент облачного хранилища и связанный с ним балансировщик нагрузки в облаке
  • Как создать политику безопасности Cloud Armor Edge
  • Как проверить, что политика безопасности Edge работает должным образом.

Следующие шаги

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