CloudFront后面的API网关不支持AWS_IAM身份验证吗?

问题描述 投票:13回答:5

似乎无法调用通过CloudFront发行版启用了AWS_IAM保护的REST API。

这里是如何重现此内容:

  • 使用API​​网关创建REST API
  • 使用AWS_IAM身份验证保护REST API方法
  • 创建针对REST API的CloudFront发行版
  • 在Route 53中创建针对CloudFront分布的A记录

现在使用经过身份验证的用户(我使用Cognito UserPool用户并通过aws-amplify进行呼叫)>

  1. 受保护的REST API方法及其API网关URL =成功
  2. 通过CloudFront分发URL受保护的REST API方法= FAILURE
  3. 通过Route 53域URL的受保护REST API方法= FAILURE
  4. 我得到的错误是:

{“ message”:“我们计算出的请求签名与您提供的签名不匹配。请检查您的AWS Secret Access密钥和签名方法。有关详细信息,请参阅服务文档。”}

我简直不敢相信AWS不支持自定义域后面的受AWS_IAM保护的端点,因为这必须是一个非常常见的用例。

因此,您能为我提供实现此目的的详细列表吗?

谢谢

似乎无法调用通过CloudFront分发启用了AWS_IAM保护的REST API。重现此内容的方法如下:使用API​​ Gateway创建REST API保护...

aws-sdk amazon-cloudfront aws-api-gateway amazon-cognito aws-amplify
5个回答
2
投票

我怀疑这是不可能的,有两个原因。


1
投票

如果为API设置了自定义域,API网关现在将使用该自定义域作为主机来生成签名。


1
投票

CloudFront不支持IAM身份验证以匹配分配的呼叫。正如其他人所强调的那样,SigV4依赖于主机标头,并且在访问您的域时无法计算签名(没有做一些棘手的事情,例如在客户端对API网关域进行硬编码,然后使用该标头对SigV4进行硬编码)。但是,您可以使用Lambda @ Edge函数将IAM从分发版本添加到API。


0
投票

尝试转到您的api网关控制台并执行以下操作:


0
投票
  1. 在APIGW中创建一个自定义域,如www.example.com,并将该域映射到特定的API,但不要将www.example.com解析为APIGW的域

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