我希望将基本用户身份验证添加到我将在AWS上的静态站点,以便只有具有正确用户名+密码的用户才能访问这些用户才能访问该站点。我找到了s3auth,它似乎正是我正在寻找的,但是,我想知道我是否需要以某种方式为index.html之外的页面设置授权。例如,我有3个页面索引,关于和contact.html,没有身份验证设置about.html什么阻止个人通过www.mywebsite.com/about.html直接访问该网站?我更希望澄清或任何人都可以提供的资源来解释这个!
谢谢您的帮助!
这是Lambda @ Edge的完美用法。
由于您在S3上管理静态站点,因此您可以通过使用CloudFront(AWS的内容分发网络)轻松且非常经济地(便士)为您的站点添加一些非常棒的功能,从而为您的站点提供站点服务。您可以了解如何使用CloudFront(包括100%免费SSL)here在S3上设置您的站点托管。
在部署CloudFront分配时,您将有时间设置Lambda,您将用它来执行基本用户身份验证。如果这是您第一次创建Lambda或创建Lambda以便使用@Edge,那么这个过程会感觉非常复杂,但是如果您按照下面的分步说明进行操作,那么您将无限制地执行无服务器基本身份验证可在不到10分钟内缩放。我将使用us-east-1进行此操作,重要的是要知道如果你使用Lambda @ Edge,你应该在us-east-1中编写你的函数,当它们与你的CloudFront分配相关联时将在全球范围内自动复制。让我们开始...
Function Code
部分的index.js文件中 - 您可以通过更改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 @ Edge需要几分钟(15-20)。转到CloudFront以监控功能的部署。当您的CloudFront分配状态显示“已部署”时,您的Lambda @ Edge功能即可使用。