Google Cloud Storage для статического сайта общедоступного или с ограничением доступа

от автора

Рассмотрим задачу хостинга статичного веб-сайта, например, Leaflet карты с заранее посчитанными данными на ней или статичной 3D модели. Для этих целей можно воспользоваться статическим хостингом файлов на Google Cloud Storage. Кроме того, этот способ позволяет весьма просто ограничить доступ к сайту в веб-интерфейсе Google Cloud, указывая емайлы пользователей, которым доступ разрешен. За счет Google CDN и кэширования файлов можно не беспокоиться об обработке большой нагрузки, а добавление или удаление файлов доступно с помощью консольной утилиты gsutil и в веб-интерфейсе Google Cloud. Также не нужно заниматься получением и обновлением SSL сертификатов и созданием для них доменных имен. Буквально в несколько консольных команд получается масштабируемое и легко поддерживаемое решение с хранением данных в облаке Google и гарантией защиты данных.

Создание сайта с ограниченным доступом

Ниже приведены необходимые команды для создания и настройки веб-доступа для бакета bucketname:

# create new bucket $ gsutil mb gs://bucketname # allow fine-granted access control for the bucket $ gsutil uniformbucketlevelaccess set off gs://bucketname # prepare OAuth wrapper $ cat redirect.html <html>   <head>     <meta http-equiv="Refresh" content="0; url=https://storage.cloud.google.com/bucketname/index.html">   </head>   Redirecting... </html> # copy the OAuth wrapper to the bucket $ gsutil -m cp redirect.html gs://bucketname/ # make the OAuth wrapper publicly available $ gsutil iam ch allUsers:legacyObjectReader gs://bucketname/redirect.html # setup web site entry point for the bucket $ gsutil web set -m redirect.html gs://bucketname/ # copy your data to the bucket $ gsutil -m cp -r index.html gs://bucketname/ # prepare CORS configuration $ $ cat cors.json  [     {       "origin": ["*"],       "responseHeader": ["Content-Type"],       "method": ["GET"],       "maxAgeSeconds": 3600     } ] # set the CORS configuration for the site $ gsutil cors set cors.json gs://bucketname

Внимание: указанный в документации Google способ не работает, если попытаться указать права доступа на файл redirect.html в веб-интерфейсе Googl Cloud для пользователя allUsers с правами objectViewer, возникает ошибка. Аналогично, через gsutil не удается установить права allUsers:objectViewer. Секрет в том, что необходимо воспользоваться старой версией API и установить права allUsers:legacyObjectReader

Теперь ссылка https://storage.googleapis.com/bucketname/redirect.html при ее открытии в браузере переадресует пользователя на страницу логина аккаунтов Google и после успешной авторизации вернет на страницу созданного статического сайта index.html Ссылки на файлы скриптов и стилей необходимо указывать абсолютные в виде https://storage.cloud.google.com/bucketname/filename или https://www.googleapis.com/download/storage/v1/b/bucketname/o/filename?alt=media. В последнем случае для поддиректорий необходимо кодировать знак слэш, как пример https://www.googleapis.com/download/storage/v1/b/bucketname/o/dirname%2Ffilename?alt=media

Управление доступом к сайту

Выше мы создали сайт с ограничением доступа. Добавить новых пользователей можно как в веб-интерфейсе Google Cloud, так и с помощью консольной команды:

gsutil acl ch -u USER_EMAIL:objectViewer gs://BUCKET_NAME

Для превращения нашего веб-ресурса в общедоступный достаточно будет разрешить доступ всем пользователям ко всем файлам:

gsutil acl ch -u allUsers:legacyObjectReader gs://BUCKET_NAME

После выполнения этой команды любой пользователь сможет зайти на сайт по ссылке https://storage.googleapis.com/bucketname/index.html. Если хочется укоротить эту ссылку до https://storage.googleapis.com/bucketname/ можно воспользоваться командой

# setup web site entry point for the bucket $ gsutil web set -m index.html gs://bucketname/

Также общедоступный сайт можно создать и сразу, без конфигурирования CORS и OAuth.

Пользовательский домен

Возможно использование пользовательских доменов, для этого в настройках DNS нужно указать c.storage.googleapis.com как CNAME для bucketname на пользовательском домене. Если это делать не в Google DNS, то при открытии такого адреса браузеры будет справедливо ругаться на не соответствующий SSL сертификат сайта.

Заключение

К счастью, и в современном мире непредсказуемых нагрузок, огромных файлов и SSL сертификатов все еще остаются простые способы статического хостинга. Есть и другие пути, в том числе, GitHub Pages позволяют создать сайт на основе GitHub репозитория, смотрите как пример Геологические модели в виртуальной/дополненной реальности (VR/AR) Amazon S3 тоже можно превратить в статический сайт (раньше я там и размещал подобные проекты, но перестал пользоваться из-за их намеренно мучительно неудобной работы с регионами).

Также смотрите


ссылка на оригинал статьи https://habr.com/ru/articles/591451/