Kul*_*dav 10 amazon-web-services aws-api-gateway
我在 api 网关后面有一个 lambda 函数。当使用Invoke URL触发时,此功能工作正常。调用 URL 是阶段下方法选项卡中提供的链接。
\n\n\n\n\n\n我想为我的 api 设置自定义域,因此我按照标准程序设置 ACM 证书。除此之外,我还在route53中设置了域(api.tarkshala.com)。检查下面给出的屏幕截图。
\n\n\n\n\n\n\n\n但是,当我使用 Cloudfront 链接(d3pn2j4magp6tp.cloudfront.net)或使用 POSTMAN 的域名(api.tarkshala.com)访问 API 时,它最终会变成403 Forbidden。
\n\n我不知道我到底错过了什么?
\n\n响应标头如下所示:
\n\nConnection \xe2\x86\x92keep-alive\nContent-Length \xe2\x86\x9223\nContent-Type \xe2\x86\x92application/json\nDate \xe2\x86\x92Fri, 13 Apr 2018 03:17:25 GMT\nVia \xe2\x86\x921.1 a1cf0e6cf29b584b5fe1ada9ccee9758.cloudfront.net (CloudFront)\nX-Amz-Cf-Id \xe2\x86\x929Jh5HeQIuDNfm5WGlTae34oYZ7BiN3nI2VlH_8PJHLQ0mr2C20njJQ==\nX-Cache \xe2\x86\x92Error from cloudfront\nx-amz-apigw-id \xe2\x86\x92FQoiyF1phcwFVrg=\nx-amzn-ErrorType \xe2\x86\x92ForbiddenException\nx-amzn-RequestId \xe2\x86\x923013c239-3ec9-11e8-abe6-53449bcfc96c\nRun Code Online (Sandbox Code Playgroud)\n\n回复:
\n\n{\n "message": "Forbidden"\n}\nRun Code Online (Sandbox Code Playgroud)\n
Mic*_*bot 13
该文档似乎没有提及与 API 网关端点关联的 CloudFront 发行版配置的重要方面...似乎只能推断:
当您为边缘优化的 API 创建自定义域名时,API Gateway 会设置 CloudFront 分配。但是,您必须设置一条 DNS 记录以将自定义域名映射到 CloudFront 分配域名,[以便]绑定到自定义域名的 API 请求能够通过映射的 CloudFront 分配[并理解][正确]路由到 API Gateway当他们到达时]。您还必须提供自定义域名的证书。(强调,括号内的词是我的,为了清楚起见而添加)
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html
在内部,CloudFront 发行版有两种方式处理Host传入请求中到达的标头 - CloudFront 可以将Host浏览器提交的标头移交(如果它位于预期值列表中),或者始终可以将单个静态值传递给浏览器。从源配置推断出的后端源。
对于 API Gateway 管理的 CloudFront 发行版,配置显然是要传递浏览器发送的内容,这很有意义,因为另一种选择需要 API Gateway 对传入请求进行额外的操作,这将是复杂的,并且至少可以说很复杂。
因此,要在 API 网关部署上测试自定义域名,请求者必须包含自定义域名作为 HTTPHost标头。cloudfront.net 别名目标主机名仅用于 DNS 映射 - 它不是 API Gateway 在处理传入请求时实际与您的部署阶段关联的备用主机名。
如果您的自定义域名指向 DNS 中的“目标”域名,并且您通过自定义域访问 API,则这一切都会自动发生。否则,Host如果您使用的工具允许,您可以手动设置标头以进行测试。
| 归档时间: |
|
| 查看次数: |
17443 次 |
| 最近记录: |