Это идеальное использование для Lambda@Edge.
Поскольку вы закрываете свой статический сайт на S3, вы можете легко и очень экономно (копейки) добавить некоторые действительно замечательные функции на свой сайт с помощью CloudFront, Сеть распространения контента AWS, чтобы обслуживать ваш сайт на ваш сайт.Вы можете узнать, как настроить размещение вашего сайта на S3 с CloudFront (включая 100% бесплатный SSL) здесь .
Пока развертывание вашего CloudFront развертывается, у вас будет некоторое время для настройкиВы лямбда, которую вы будете использовать, чтобы выполнить базовую аутентификацию пользователя.Если вы впервые создаете Lambda или Lambda для использования @Edge, процесс будет казаться очень сложным, но если вы будете следовать моим пошаговым инструкциям, приведенным ниже, вы будете выполнять бессерверную базовую аутентификацию, которая будет бесконечной.масштабируется менее чем за 10 минут.Я собираюсь использовать us-east-1 для этого, и важно знать, что если вы используете Lambda @ Edge, вы должны создавать свои функции в us-east-1, и когда они связаны с вашим дистрибутивом CloudFront, ониБуду автоматически реплицироваться во всем мире.Давайте начнем ...
- Перейдите к Lambda в консоли AWS и нажмите " Создать функцию "
- Создайте свою Lambda с нуля и дайте ейимя
- Установите для среды выполнения Node.js 8.10
- Дайте Lambda некоторые разрешения, выбрав «Выбрать или создать роль выполнения»
- Присвойте роли имя
- В шаблонах политик выберите «Базовые полномочия Lambda @ Edge (для триггера CloudFront)»
- Нажмите «Создать функцию»
- После создания лямбда-кода возьмите следующий код и вставьте его вв файл index.js раздела
Function Code
- вы можете обновить имя пользователя и пароль, которые хотите использовать, изменив переменные authUser и authPass:
'use strict';
exports.handler = (event, context, callback) => {
// Get request and request headers
const request = event.Records[0].cf.request;
const headers = request.headers;
// Configure authentication
const authUser = 'user';
const authPass = 'pass';
// Construct the Basic Auth string
const authString = 'Basic ' + new Buffer(authUser + ':' + authPass).toString('base64');
// Require Basic authentication
if (typeof headers.authorization == 'undefined' || headers.authorization[0].value != authString) {
const body = 'Unauthorized';
const response = {
status: '401',
statusDescription: 'Unauthorized',
body: body,
headers: {
'www-authenticate': [{key: 'WWW-Authenticate', value:'Basic'}]
},
};
callback(null, response);
}
// Continue request processing if authentication passed
callback(null, request);
};
Нажмите «Сохранить» в правом верхнем углу. Теперь, когда ваша Lambda сохранена, она готова к подключению к вашему дистрибутиву CloudFront.В верхнем меню выберите Действия -> Развернуть на Lambda@Edge. . В появившемся модале выберите созданный ранее дистрибутив CloudFront из раскрывающегося меню, оставьте Поведение кэша как *, а для CloudFront -Событие измените его на «Запрос зрителя» и, наконец, выберите / отметьте «Включить тело».Выберите / установите флажок Подтвердить развертывание в Lambda @ Edge и нажмите «Развернуть».
А теперь подождите.Репликация Lambda @ Edge занимает несколько минут (15-20) во всех регионах и краях.Перейдите в CloudFront, чтобы отслеживать развертывание вашей функции.Когда ваш статус распространения CloudFront сообщает «Развернуто», ваша функция Lambda @ Edge готова к использованию.