使用AWS和S3存储桶的静态站点的基本用户身份验证

问题描述 投票:0回答:1

我希望将基本用户身份验证添加到我将在AWS上的静态站点,以便只有具有正确用户名+密码的用户才能访问这些用户才能访问该站点。我找到了s3auth,它似​​乎正是我正在寻找的,但是,我想知道我是否需要以某种方式为index.html之外的页面设置授权。例如,我有3个页面索引,关于和contact.html,没有身份验证设置about.html什么阻止个人通过www.mywebsite.com/about.html直接访问该网站?我更希望澄清或任何人都可以提供的资源来解释这个!

谢谢您的帮助!

amazon-web-services authentication amazon-s3 amazon-cloudfront bucket
1个回答
2
投票

这是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分配相关联时将在全球范围内自动复制。让我们开始...

  1. 在AWS控制台中转到Lambda,然后单击“Create Function
  2. 从头开始创建Lambda并为其命名
  3. 将运行时设置为Node.js 8.10
  4. 选择“选择或创建执行角色”,为Lambda授予一些权限
  5. 为角色命名
  6. 从策略模板中选择“基本Lambda @ Edge权限(对于CloudFront触发器)”
  7. 点击“创建功能”
  8. 创建Lambda后,请使用以下代码并将其粘贴到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);
};

  1. 点击右上角的“保存”。
  2. 现在您的Lambda已保存,它已准备好附加到您的CloudFront分配。在上面的菜单中,选择Actions - > Deploy to Lambda @ Edge。
  3. 在出现的模式中,从下拉菜单中选择您之前创建的CloudFront分配,将Cache Behavior保留为*,并将CloudFront Event更改为“Viewer Request”,最后选择/勾选“Include Body”。选择/勾选确认部署到Lambda @ Edge并单击“部署”。

现在你等在所有区域和边缘位置复制Lambda @ Edge需要几分钟(15-20)。转到CloudFront以监控功能的部署。当您的CloudFront分配状态显示“已部署”时,您的Lambda @ Edge功能即可使用。

© www.soinside.com 2019 - 2024. All rights reserved.