You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Amplify应用中仅限制单个子页面的访问权限?

针对AWS Amplify路径级访问限制的实现方案

要在AWS Amplify托管的站点中仅限制website.com/subpage路径的访问,同时开放其余页面,可以通过以下几种方案实现:

方案1:Amplify重写规则 + 自定义Lambda认证函数

这是最贴合Amplify生态的方案,无需额外依赖CloudFront配置:

  1. 创建认证Lambda函数
    在Amplify控制台中添加一个Lambda函数(类型选"API"或"自定义"),编写逻辑验证请求的合法性:

    • 检查请求头中的Authorization凭证(比如基本认证、API密钥)
    • 若凭证有效,返回原/subpage路径的内容;若无效,返回401 Unauthorized状态码
  2. 配置重写规则
    进入Amplify控制台的"重写和重定向"页面,添加规则:

    • 源地址:^/subpage/(.*)$
    • 目标地址:/your-lambda-endpoint/$1(替换为你的Lambda函数访问地址)
    • 类型:200 (Rewrite)
      这条规则会将所有/subpage下的请求转发到Lambda函数进行认证,验证通过后返回页面内容。

方案2:Lambda@Edge + CloudFront(适合复杂场景)

由于Amplify默认通过CloudFront分发内容,可以利用Lambda@Edge在请求到达前进行路径级校验:

  1. 创建Lambda@Edge函数
    在us-east-1区域创建Lambda函数,编写Viewer Request阶段的处理逻辑:

    exports.handler = async (event) => {
      const request = event.Records[0].cf.request;
      const uri = request.uri;
    
      // 匹配/subpage路径
      if (uri.startsWith('/subpage/') || uri === '/subpage') {
        const authHeader = request.headers.authorization;
        // 这里添加你的认证逻辑,比如验证基本认证凭证
        if (!authHeader || !validateCredentials(authHeader)) {
          return {
            status: '401',
            statusDescription: 'Unauthorized',
            headers: {
              'www-authenticate': [{ key: 'WWW-Authenticate', value: 'Basic realm="Restricted Area"' }]
            }
          };
        }
      }
      // 非受限路径直接放行
      return request;
    };
    
    function validateCredentials(authHeader) {
      // 实现你的凭证验证逻辑,比如对比预设的用户名密码
      const encoded = authHeader.split(' ')[1];
      const [user, pass] = Buffer.from(encoded, 'base64').toString().split(':');
      return user === 'your-user' && pass === 'your-pass';
    }
    
  2. 关联到CloudFront分发
    找到Amplify对应的CloudFront分发,在"行为"中编辑默认行为,将上述Lambda@Edge函数关联到"Viewer Request"事件。

方案3:简单基本认证(适合快速场景)

如果只需要简单的密码保护,可通过自定义HTTP头配合前端认证提示:

在项目根目录的amplify.yml中添加headers配置,仅对/subpage路径返回认证提示头:

version: 1
frontend:
  phases:
    build:
      commands:
        - # 你的构建命令
  artifacts:
    baseDirectory: dist
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
headers:
  - pattern: /subpage/**
    headers:
      - key: WWW-Authenticate
        value: Basic realm="Restricted Subpage"

然后配合方案1的Lambda函数来验证用户输入的凭证,确保只有合法用户能访问该路径。


内容的提问来源于stack exchange,提问作者darthV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:17:29