amazon-web-services - 在 aws 中使用 lambda 函数密码保护 s3 存储桶
问题描述
我使用 lambda 函数为 s3 存储桶添加了网站身份验证,然后使用分发设置中的行为设置将 lambda 函数与 CloudFront 连接,它工作正常并添加了身份验证(意味着简单服务器中的 htaccess 身份验证)。现在我想更改我的网站身份验证的密码。为此,我更新了密码并发布了新版本的 lambda 函数,然后在分发设置中;我创建了一个新的失效来清除缓存。但它不起作用,并且网站验证密码没有改变。下面是我添加身份验证的 lambda 函数代码。
'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 函数视图中,保存更改后(使用 Firefox 可能是更安全的选择,如果您想知道原因,请参阅下文)
您将在 Configuration -> Designer -> CloudFront 下看到一个菜单项。您将看到以下屏幕。
部署后:
您可以将更改发布到 CloudFront 分配。发布后,它将自动开始部署 CF 分发,您可以在 CF 菜单上查看。
此外,我更喜欢使用“查看器请求”作为 CloudFront 触发事件,不确定您使用的是哪一个,因为这应该避免 Cloudfront 缓存。除此之外,Chrome 有时无法在 Lambda 上保存更改。aws 控制台上应该有一个错误。在编辑 lambda 函数时,请尝试使用 Firefox 以确保安全。
推荐阅读
- python - 在 Raspberry Pi 上安装密码学时出现问题
- jmeter - 测试期间任何特定 API 的 Jmeter On Demand 触发
- javascript - typescript 如何输入 Promise.all()
- xamarin - Xamarin iOS 和 Android 项目不再编译
- angular - 如何解决 Angular 应用程序的浏览器缓存问题
- amazon-web-services - Athena 未收集 Amazon S3 中部分文件的结果
- vue.js - 网站冻结但仅适用于某些用户 - 不确定从哪里开始
- php - Hiding the version of Revive Adserver on IIS Webserver 10
- java - Choosing the right list for unknown numbers
- ruby - Stuck with rdoc: Any way to add indentation to call-seq?