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

AWS Lambda Function URL调用返回Forbidden错误求助

解决Lambda Function URL(AWS IAM认证)从EC2调用返回Forbidden的问题

以下是排查和解决该问题的核心步骤:

  • 确认Lambda资源策略的准确性
    确保策略中指定的Resource是Function URL的ARN(而非Lambda函数本身的ARN),同时Principal是EC2实例所关联角色的ARN,动作明确为lambda:InvokeFunctionUrl。正确的策略示例:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::123456789012:role/你的EC2实例角色名"
          },
          "Action": "lambda:InvokeFunctionUrl",
          "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名:function-url"
        }
      ]
    }
    

    注意:Function URL的ARN可以在Lambda控制台的"Function URL"标签页中查看。

  • 确保EC2实例角色权限包含lambda:InvokeFunctionUrl
    即使你给了Lambda全权限,也要确认策略中明确包含lambda:InvokeFunctionUrl动作(部分旧版全权限策略可能未覆盖该动作)。如果是自定义策略,需添加如下语句:

    {
      "Effect": "Allow",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名:function-url"
    }
    
  • 必须使用AWS SigV4签名调用Function URL
    这是最常见的问题:启用IAM认证的Function URL要求请求必须携带有效的SigV4签名,直接裸curl调用会因缺少签名返回Forbidden。你可以通过以下方式正确调用:

    1. 使用AWS CLI(EC2实例需已配置角色凭证):
      aws lambda invoke-function-url --function-name 你的Lambda函数名 --cli-binary-format raw-in-base64-out --payload '{}'
      
    2. 生成SigV4签名后通过curl调用:可以借助aws-sdk或第三方工具(如sigv4命令行工具)生成签名头,再附加到curl请求中。
  • 验证EC2实例的IAM角色凭证有效性
    在EC2实例上执行以下命令,确认能正常获取角色凭证:

    # 查看关联的角色名
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
    # 获取凭证详情
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/你的角色名
    

    如果无法获取凭证,需检查EC2实例的角色是否正确附加,以及实例所在的VPC是否允许访问元数据服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:30:55