首页 > 解决方案 > 在 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);
};

谁能帮我解决这个问题。

提前致谢。

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-cloudfront

解决方案


在 Lambda 函数视图中,保存更改后(使用 Firefox 可能是更安全的选择,如果您想知道原因,请参阅下文)

您将在 Configuration -> Designer -> CloudFront 下看到一个菜单项。您将看到以下屏幕。

在此处输入图像描述

在此处输入图像描述

部署后:

在此处输入图像描述

您可以将更改发布到 CloudFront 分配。发布后,它将自动开始部署 CF 分发,您可以在 CF 菜单上查看。

此外,我更喜欢使用“查看器请求”作为 CloudFront 触发事件,不确定您使用的是哪一个,因为这应该避免 Cloudfront 缓存。除此之外,Chrome 有时无法在 Lambda 上保存更改。aws 控制台上应该有一个错误。在编辑 lambda 函数时,请尝试使用 Firefox 以确保安全。


推荐阅读