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

新AWS Amplify无服务器应用返回403 Access Denied问题排查

解决AWS Amplify托管域名下的403 Access Denied问题

问题核心

Amplify Hosting默认面向静态网站设计,你的请求被当作静态资源查找,找不到就返回403。Function URL能正常工作说明Lambda函数本身无问题,问题出在Amplify的请求路由配置上。

解决步骤

1. 配置Amplify重写/重定向规则

将目标路径的请求转发到你的API Gateway(即Function URL对应的端点):

  • 打开Amplify控制台,进入目标项目
  • 导航到App Settings > Rewrites and redirects
  • 点击Add rule,添加规则:
    • Source address: </^staging\/.*$/>(匹配staging下所有路径,可根据实际调整)
    • Target address: https://<你的API Gateway ID>.execute-api.us-west-2.amazonaws.com/staging/$1($1会自动匹配source中的路径部分)
    • Type: 200 (Rewrite)
  • 保存规则后重新部署项目

也可直接在项目根目录的amplify.yml中添加配置:

version: 1
frontend:
  phases:
    build:
      commands:
        - echo "No frontend build needed" # 纯后端项目无需构建前端
  artifacts:
    baseDirectory: . # 指定任意存在的目录,避免Amplify因找不到静态文件报错
  rewriteRules:
    - source: /staging/<.*>
      target: https://<你的API Gateway ID>.execute-api.us-west-2.amazonaws.com/staging/$1
      status: 200

2. 确认Lambda函数与Amplify的关联

  • 进入Amplify项目的Backend标签页,找到你的Lambda函数
  • 检查触发配置,确保已启用Amplify Hosting作为触发源,且路径映射正确(比如/staging/*对应函数入口)

3. 验证Lambda执行角色权限

  • 打开IAM控制台,找到Lambda函数对应的执行角色
  • 确保角色拥有lambda:InvokeFunction权限,且信任策略允许Amplify服务调用该函数:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "lambda.amazonaws.com",
          "amplify.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4. 确保EJS模板路径正确

Lambda环境的文件路径与本地开发不同,需用绝对路径加载模板:

const path = require('path');
app.set('views', path.join(__dirname, 'views')); // 假设模板放在views目录
app.set('view engine', 'ejs');

验证

重新部署Amplify项目后,访问master.<...>.amplifyapp.com/staging/<...>,即可正常返回EJS渲染的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:32:51