在AWS中使用Lambda功能对s3存储桶进行密码保护

时间:2018-10-20 07:11:34

标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudfront

我使用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);
};

任何人都可以帮助我解决问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

在Lambda函数视图上,保存更改后(使用Firefox可能是一个更安全的选择,如果您想知道为什么,请参见下文)

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

enter image description here

enter image description here

部署后:

enter image description here

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

我还希望将“查看器请求”用作CloudFront触发事件,不确定您使用的是哪个事件,因为这样可以避免Cloudfront缓存。 Chrome有时甚至无法在Lambda上保存更改。 AWS控制台上应该有一个错误。为了在编辑Lambda函数时安全起见,请尝试使用Firefox。