为一个私有 API 网关创建“execute-api”接口 VPC 终端节点会破坏来自 VPC 的所有公共 API 网关访问

问题描述 投票:0回答:2

我正在尝试将我们的一个 API 网关设为私有并将其添加到 VPN。阅读 docs,我需要添加一个接口 VPC 终端节点。我已经使用以下地形完成了此操作:

data "aws_vpc_endpoint_service" "execute-api" {
  service = "execute-api"
}

resource "aws_vpc_endpoint" "gateway-endpoint" {
  vpc_id              = data.aws_vpc.shared.id
  service_name        = data.aws_vpc_endpoint_service.execute-api.service_name
  vpc_endpoint_type   = "Interface"
  private_dns_enabled = true

  subnet_ids         = toset(data.aws_subnets.private.ids)
  security_group_ids = toset([data.aws_security_group.default.id])
}

然后我很高兴地设置我的 API 网关以使其私有,添加资源策略等。

然而,团队中的其他人都在经历地狱,因为事情突然出乎意料地崩溃了。

结果,所有其他 API 网关(配置完全不变)都返回 403,似乎我向 VPC 添加了一个

execute-api
接口,影响了帐户中的所有 API 网关!

这些其他 API 网关不处于私有模式,它们是“边缘优化”的,并且不在 VPC 内:

但是,除非将 lambda 取出到 VPC 之外,否则它们突然无法访问。我是否遗漏了创建此端点会阻止公共网关访问 lambda 的事情?

amazon-web-services aws-api-gateway amazon-vpc
2个回答
3
投票

我有点晚了,但我遇到了完全相同的问题,并且想为将来遇到此问题的人分享一些资源(我只是专门创建此帐户来回答)。

背景

当这种情况发生在我身上时,我发现我通过 Terraform 创建的 VPC 端点覆盖了通用域

*.execute-api.<your-region>.amazonaws.com
。我能够在 AWS 控制台中看到这一点,因为在 Terraform 中我只指定了
execute-api
服务。

此域名被 API Gateway 中的all API 用作默认调用 URL。上面的“*”由您的 API 的唯一 ID 填写(API 的示例调用 URL 通常如下所示:

https://abcdefg.execute-api.<your-region>.amazonaws.com
)。

VPC 接口端点是我设置的,并且根据 VPC 端点上的文档

接口终端节点可通过 AWS PrivateLink 连接到服务。 ...接口端点是一个或多个具有私有 IP 地址的弹性网络接口的集合,用作发往受支持服务的流量的入口点。

根据我对网络概念的有限理解,这对我来说意味着 AWS 中的整个

execute-api
“服务”现在将通过此 VPC 端点进行路由。我的所有公共和私有 API 都使用此
execute-api
服务作为调用 URL 的一部分。由于我启用了私有 DNS,因此 VPC 外部对我的公共 API 之一的任何调用都会失败。请注意,如果您关闭 VPC 终端节点上启用的私有 DNS,公共 API 将再次工作,但私有 API 现在将中断。

潜在的解决方案:公共 API 的自定义域

我发现的一个选项是将公共 API 切换为使用自定义域,以便它们不再使用通用

execute-api
域。您可以在这里阅读更多相关信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

对公共 API 使用自定义域意味着只有您的私有 API 使用默认的

execute-api
服务,因此您可以保持 VPC 终端节点不变。

此外,以下是有关为 API 网关自定义域设置 Route 53 记录的一些说明:https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html

总结

这对我来说也是一个令人沮丧的问题,希望这可以帮助别人比我更快地发现问题......


0
投票

值得阅读这篇文章 - https://www.winglang.io/blog/2024/02/09/private-api-gateway-aws 它是关于在 10 分钟内创建一个 VPC 后面的 API 网关。

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