【问题标题】:Password protect s3 bucket with lambda function in aws在 aws 中使用 lambda 函数密码保护 s3 存储桶
【发布时间】:2019-03-24 23:48:04
【问题描述】:

我使用 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 应该被部署到 Lambda@Edge (us-east-1)。不确定 backet...
  • 你能解释一下吗,如何?

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


【解决方案1】:

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

您将在配置 -> 设计器 -> CloudFront 下看到一个菜单项。您将看到以下屏幕。

部署后:

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

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

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2020-07-05
    • 1970-01-01
    • 2019-01-03
    • 2017-06-26
    • 1970-01-01
    • 2018-05-05
    • 2015-03-21
    • 2019-07-27
    相关资源
    最近更新 更多