当前位置: 首页 > 知识库问答 >
问题:

我可以将VPC中的HTTPendpoint指定为AWS API网关中的资源吗?

陶成济
2023-03-14

我遇到过这样的情况,我的产品(某些Web API)位于VPC内部,即没有任何外部访问权限。我想公开这个API的部分(只是几个HTTP方法),以便从互联网上访问。我正在尝试使用 AWS API 网关实现此目的,但看起来我无法使内部 ELB 终端节点成为 API 网关资源。任何想法,我怎么能做到这一点?

谢谢,--Vovan

共有2个答案

裴韬
2023-03-14

这有点迂回,但您可以通过Lambda函数代理VPC中的Web服务endpoint。可以直接从API网关调用该Lambda函数。这篇博客文章详细介绍了如何做到这一点。

史劲
2023-03-14

这最初是不可能的,后来通过支持客户端证书得到了解决,API Gateway可以使用客户端证书向您的服务进行自我认证。这是一个很好的解决方案,并且仍然可用,但是仍然需要您的服务向互联网公开——至少在某种意义上。

2017 年 11 月,AWS 发布了一项新功能,允许您在 API 网关和内部服务之间实际预置网络路径。

您现在可以在Amazon专有网络(VPC)中提供对HTTP(S)资源的访问,而无需将其直接暴露给公共Internet。您可以使用API网关创建与VPC集成的APIendpoint。您可以通过在VPC和网络负载均衡器(NLB)之间设置VPC链接来创建VPCendpoint,网络负载均衡器由弹性负载均衡提供。

https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/

历史背景如下。

<罢工> 到目前为止,还没有简单和万无一失的方法来做到这一点,因为API Gateway可以访问的服务需要通过公共互联网访问/向公共互联网公开 并且没有内置的信任机制来确保这样的请求实际上是从哪里发出的 任何API网关部署,更不用说 您的API网关部署。

Amazon似乎已经解决了对后端服务的身份验证请求的问题,因为它肯定不仅来自API网关,而且来自您的API网关实例。和以前一样,endpoint仍然需要暴露在Internet上,因为源IP地址是不可预测的——但是API网关现在支持客户端SSL证书,API网关的背面使用这些证书向API网关正在调用的后端服务的前端进行身份验证。

问:亚马逊 API 网关能否在亚马逊 VPC 内工作?

不会。Amazon API网关endpoint始终对Internet公开。后端操作的代理请求也需要在Internet上公开访问。但是,您可以在Amazon API网关中生成客户端SSL证书,以验证API网关使用证书的公钥发送到后端系统的请求。

问:我可以验证是API Gateway调用我的后端吗?

是的。亚马逊 API 网关可以生成客户端 SSL 证书,并使该证书的公有密钥可供您使用。可以使用生成的证书对后端进行调用,并且您可以使用证书的公有密钥验证来自 Amazon API 网关的调用。

-https://aws.amazon.com/api-gateway/faqs/#security

在API网关控制台中生成客户端证书时,会为您提供该证书的公钥。为了安全起见,私钥由API网关保留,您无法访问。在协商SSL时,API网关将向后端提供公钥。任何不提供相同公钥的对等方都不是API网关,后端应该拒绝SSL协商。

如果恶意行为者拥有公钥,他们仍然无法通过SSL与您的后端通信,因为他们将缺少只有API Gateway知道的配对私钥。(您的交互将使用您的SSL证书进行加密,它是配对私钥,当然只有您知道。)

此功能解决了API网关HTTP代理功能实用性以前似乎存在的一个重大限制……事实上,当我发现上面修改过的信息时,我开始怀疑自己:这是不是一直存在的,而我却设法忽略了它?运回机说不,它是新的。该信息于2015年9月添加

 类似资料:
  • 问题内容: 假设我的类是从压缩的.war文件加载的,或者是在其他位置加载的,那么如何发现给定包中的所有资源?枚举文件实际上是行不通的,因此无法真正枚举文件。这很可能会涉及使用当前的类加载器? 那里有一个像这样的图书馆吗?Google搜寻仅发现了一些列出文件的骇客。 问题答案: 不,您无法列出软件包中的资源,因为JVM根本不知道哪个软件包中有哪些资源。看到这个问题。

  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • Remove wrapper, open mouth, insert muffin, eat. — Instructions on 7-11 muffin packaging 为确保事物以正确的顺序发生,你可以在 Puppet 中指定一个资源依赖另一个资源, 例如:你必须先安装软件包 X 然后再启动它提供的服务,因此应该标记这项服务依赖于软件包 X。 Puppet 会按要求的顺序排出它遇到的所有依

  • 问题内容: 我可以在CSS中用某些东西代替maxlength属性吗? 问题答案: 否。这需要在HTML中完成。如果需要,可以使用Javascript设置值。

  • 问题内容: 该方法返回枚举实例的序数。 如何设置枚举的序数? 问题答案: 您无法设定。它始终是常量定义的序数。请参阅Enum.ordinal()的文档: 返回此枚举常量的序数(其在枚举声明中的位置,其中初始常量的序数为零)。大多数程序员都不会使用这种方法。它设计用于复杂的基于枚举的数据结构,例如EnumSet和EnumMap。 实际上-您不需要。如果要一些整数属性,请定义一个。

  • 问题内容: 在AngularJS中定义隔离资源的常用方法是: 我正在尝试找出编写与其他模型相关的模型的最佳方法,例如具有1个或多个s的模型。我的第一个想法是: 创建和作为独立资源模型 编写一个查询并观察结果数组的控制器 当结果数组更改时,请查询的所有商品ID,并使用扩展信息来装饰对象。 似乎有点混乱。有没有更优雅的方式? 问题答案: 上面的东西可以解决您的问题吗?然后,您将其用作 Angular的