标签: aws-api-gateway

从 AWS ApiGateway 重定向到公共 ELB

我正在尝试将 api 网关的调用重定向到 AWS 中的公共 elb。ELB 向世界开放,但我无法通过 API 网关使其工作。

API网关配置

当我调用事件操作 { "message": "Internal server error" } 时,我从邮递员那里收到此响应

从 AWS 测试控制台,我收到此错误:

2018 年 1 月 17 日星期三 20:29:12 UTC :由于配置错误而执行失败:主机名“public-elb.amazonaws.com”与对等方提供的证书主题不匹配 (CN=*.confidential.com) 17 20:29:12 UTC 2018:方法已完成,状态:500

我假设 ELB 是可访问的,因为然后我更改为另一个随机 URL,错误代码是“无效的端点地址”。

为什么我会收到此错误?我只有一个证书,并且 url 和 elb 中的证书相同。

amazon-web-services amazon-elb aws-api-gateway elastic-load-balancer api-gateway

2
推荐指数
1
解决办法
3316
查看次数

强制对 ASP.NET Core 2 中的已知标头进行特定大小写

我有一个带有 Kestrel 的 ASP.NET Core 2 应用程序。该应用程序部署到 AWS Lambda/API Gateway。一切都按预期进行,除了一个导致一切不同的小细节。

对我的应用程序的某些请求需要发出多个与安全相关的Set-Cookie标头。由于 API Gateway 和 Lambda 之间传递数据的方式,重复的标头名称会连接在一起,这会导致标Set-Cookie头无效并且浏览器拒绝接受它。

克服此限制的建议解决方案是使用仅因大小写而异的多个标头名称:Set-Cookie, Set-cookie, set-cookie...

我知道这是一个 hacky 解决方案,但如果它有效,那么在 AWS 修复这个限制的同时,它应该已经足够好了。

但是,当使用 时HttpContext.Response.Headers.Add(name, value),已知的标头名称将被规范化并成为常规的重复标头。

是否有可能绕过这种常态化机制或以其他方式实现最终目标?

c# cookies aws-lambda aws-api-gateway asp.net-core-2.0

2
推荐指数
1
解决办法
2453
查看次数

AWS:将 Cognito 授权用户限制为特定 Lambda 函数

我正在使用 AWS,并且有以下设置:UserPool; API网关、Lambda函数

API 网关使用 UserPool 授权者来保护 lambda 函数。到目前为止,这是有效的。现在我想将每个 lambda 函数限制为特定的用户组。因此,我在 CognitoPool 中创建了两个用户组(useradmin),并使用策略为每个组分配了特定角色。之后,我在 UserPool 中创建了一个用户并将其添加到该user组中。该用户仍然能够向每个路由/lambda 函数提交请求。

我如何提交请求?

  • 邮差
  • 在标头中设置IdToken(经过身份验证的用户)Authorization
  • 没有Authorization标头,响应是 401(如预期)
  • 使用Authorization标头,每个 lambda 函数都可以被触发(不是预期的)

用户池组的配置:

  • 团体用户:

    • 阿恩:Role ARN: arn:aws:iam::xxxxxx:role/User
    • 用户角色指定为

      {
        "Version": "2012-10-17",
        "Statement": [
          "Action": [
            "lambda:InvokeFunction",
            "lambda:InvokeAsync"
          ],
         "Resource": [
           "arn:aws:lambda:region:xxxxxx:function:api-dev-getItems
          ],
          "Effect": "Allow"
        ]
      }
      
      Run Code Online (Sandbox Code Playgroud)
  • 群组管理员:

    • 阿恩:Role ARN: arn:aws:iam::xxxxxx:role/Admin
    • AdminRole 指定为

      {
        "Version": "2012-10-17",
        "Statement": [
            "Action": [
            "lambda:InvokeFunction",
            "lambda:InvokeAsync"
          ],
          "Resource": …
      Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cognito aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
1391
查看次数

无法在 apigateway 中正确启用 cors

我正在使用 API 网关,这是我的 api 网关:

在此输入图像描述

所以这只是一种post方法,其更多细节如下:

在此输入图像描述

因此,当我运行启用 cors 时,出现以下错误: 在此输入图像描述

该问题与方法响应中的 200 响应中缺少 og application/json 有关,如以下链接中所述:

API网关功能启用CORS失败

为了解决这个问题,我尝试手动添加

在此输入图像描述

现在我将 application/json 添加为空。但当我尝试启用 cors 时,我仍然收到指定的无效状态代码。知道如何修复它吗?

amazon-web-services aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
3404
查看次数

特定用户的 IP 地址限制 - AWS / Cognito / IAM / API Gateway

我正在使用 API Gateway 和 Lambda 构建一个无服务器 Web 应用程序,它限制 Cognito 和 IAM 对注册用户的 API 调用。我们有个人/企业用户,希望对特定企业用户设置额外的访问限制。

所以就有了如下的用户组。

  • 个人用户可以从任何地方访问
  • A公司用户只能从A网络访问
  • B公司用户只能从B网络访问
  • C 公司用户可以从任何地方访问

控制这种访问限制的有效方法是什么?

amazon-iam amazon-cognito aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
4951
查看次数

无法在 Cloudfront 层上的 Lambda + API Gateway + Cloudfront 上启用 CORS

我部署了一个 lambda,它本身'Access-Control-Allow-Origin': '*'在其响应中返回一个标头。

我从 API 网关调用它。调用API网关URL时,CORS配置即可。

我将 CloudFront 放在 API 前面,但是现在我无法访问 API,因为 CORS 配置似乎被 CloudFront 覆盖,并且我不确定在 CloudFront 中的何处添加自定义标头。

如何在 CloudFront 中启用 CORS?

amazon-web-services amazon-cloudfront aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
5443
查看次数

当方括号(“[”,“]”)位于路径中时,AWS API 网关返回 400 错误

我使用 Lambda Integration 设置 API 网关并遇到了这个问题。

好的案例

请求URI:https://api-gateway-host/stage/hoge

hoge 不是配置的路径,因此返回:

正常:缺少身份验证令牌

不合格案例

请求URI:https://api-gateway-host/stage/ho[ge

路径是ho"["ge。它也不是配置的路径,所以我期望相同的结果,但是:

异常:400

/ho]ge/ho[]ge/ho[g]e/hoge[]和都/hoge[1]返回相同的结果。实际上,如果方括号是在“查询”中,例如/hoge?q=hoge[],它是可以接受的。

有谁知道原因吗?这是Api网关的限制吗?我认为这并不违反RFC。

环境

  • AWS us-east-1
  • 使用空 lambda 函数的 Lambda 代理的基本设置
  • 没有请求验证(我启用了请求验证,但结果是相同的)
  • 浏览器是Google Chrome(与Curl相同)

amazon-web-services aws-api-gateway

2
推荐指数
1
解决办法
2551
查看次数

如何从控制台获取aws apigateway中api的部署ID?

您好,我正在尝试aws apigateway create-stage 命令,我需要部署 ID 来创建新阶段,因为它是[必需]选项。

我在控制台上找不到部署 ID。

我已经从控制台创建了 2 个阶段(从 Actions--> DeployApi)。在哪里可以找到部署 ID?它在控制台上可用吗?

请帮忙。

amazon-web-services aws-api-gateway

2
推荐指数
1
解决办法
3006
查看次数

在 Flask 上显示 Swagger UI,无需任何连接

有人知道我可以.yml在 Flask 上提供 swagger UI 文件而不创建或连接 API 的方法吗?我只是想在网站上显示 swagger 文件,以便人们可以看到如何使用 API,但我不想创建 API 或连接任何东西,因为 API 是私有的,所以无论如何都不能调用它。

该API来自AWS API Gateway,所以我无法将任何东西与fla​​sk连接起来。

我研究了connexion,但我需要连接我的 API 方法才能使用它,但这是行不通的。

我可以使用 openapi 编辑器将 api 规范转换为 html,然后提供 html,但我想尝试使用 swagger ui 提供的漂亮布局。

python flask python-3.x swagger-ui aws-api-gateway

2
推荐指数
1
解决办法
2678
查看次数

经过身份验证登录后,AWS Cognito NotAuthorizedException“无效的访问令牌”错误

我设置了一个 AWS Cognito 用户池/身份池来授权 API 网关后面的 Lambda 函数。我的 lambda 使用适用于 Node.js 的 AWS 开发工具包。登录过程工作正常。在我的函数中,我有一个CognitoIdentityServiceProvider用于调用该getUser函数的对象。我为函数提供的访问密钥来自 lambda 变量event.requestContext.identity.accessKey。但是,函数调用失败,并通过我的 Cloud Watch 日志查看以下错误:

{
  "message": "Invalid Access Token",
  "code": "NotAuthorizedException",
  "time": "2019-08-03T20:34:50.511Z",
  "requestId": ...,
  "statusCode": 400,
  "retryable": false,
  "retryDelay": 36.048605458111794
}
Run Code Online (Sandbox Code Playgroud)

在经过身份验证的请求中提供给我的令牌为何无效?我什至不确定如何调试它,或者我应该寻找什么问题。

我如何尝试在 lamdba 处理程序中进行调用的示例:

var AWS = require('aws-sdk');
AWS.config.region = "us-west-2";
let poolData = {
  UserPoolId: MY_POOL_ID,
  ClientId: MY_CLIENT_ID
};
const cognito = new AWS.CognitoIdentityServiceProvider(poolData);

export async function myHandler(event, context, cb) {
  var params = {
    AccessToken: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cognito aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
1万
查看次数