Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何通过prem/VPN访问专用API网关?_Amazon Web Services_Aws Api Gateway_Amazon Vpc - Fatal编程技术网

Amazon web services 如何通过prem/VPN访问专用API网关?

Amazon web services 如何通过prem/VPN访问专用API网关?,amazon-web-services,aws-api-gateway,amazon-vpc,Amazon Web Services,Aws Api Gateway,Amazon Vpc,我已经创建了一个API网关来运行Lambda函数。这意味着要用作内部服务,因此我的API网关是私有的。为了私下访问API网关,我执行了以下操作: 在我们的专有网络的几个子网中创建了专有网络端点 将终结点添加到仅允许来自prem的流量的安全组 向API网关添加了一个资源策略,该策略只允许来自VPC端点的请求 这些步骤有效地阻止了公共请求,并允许通过VPC端点创建的DNS名称从on prem发出请求 这种方法的问题是,为了调用API,必须在请求中指定主机或x-apigw-API-id。目标是让用户能

我已经创建了一个API网关来运行Lambda函数。这意味着要用作内部服务,因此我的API网关是私有的。为了私下访问API网关,我执行了以下操作:

  • 在我们的专有网络的几个子网中创建了专有网络端点
  • 将终结点添加到仅允许来自prem的流量的安全组
  • 向API网关添加了一个资源策略,该策略只允许来自VPC端点的请求
  • 这些步骤有效地阻止了公共请求,并允许通过VPC端点创建的DNS名称从on prem发出请求

    这种方法的问题是,为了调用API,必须在请求中指定
    主机
    x-apigw-API-id
    。目标是让用户能够在浏览器上运行,输入URL和查询字符串参数,并从服务获得响应

    讨论了一种避免指定API id或主机的方法,但没有提供太多细节。相关部分说解决方案是:

    将带有SSL证书的应用程序负载平衡器(例如api.mydomain.com)放在PrivateLink网络接口的IP地址前面。还要为api.mydomain.com部署自定义域名,并为api网关部署基本路径映射。然后将指向api.mydomain.com的Route 53记录作为别名添加到ALB。这个解决方案相当复杂,但我们已经测试过了,它可以正常工作。描述完整的解决方案超出了本文的范围,但我们可能会在以后写一篇单独的博文


    有人知道怎么做吗?或者有不同的方法吗?

    我找到了这个问题的答案,所以我想我应该分享一下,以防其他人想知道怎么做。我找到了写这篇文章的人,他给了我一些建议。他后来写了一篇文章解释这个解决方案,如果我对它的总结令人困惑,你可以在这里阅读他的文章:

    基本上,一旦您拥有私有API网关VPC端点和ALB,您就需要这样做:

    • 使用与ALB侦听器相同的证书创建自定义域名
    • 为要连接到的API网关的所需阶段添加基本路径映射
    • 添加一条路由53记录,其中自定义域名作为名称,ALB DNS作为目标(或者如果您有自己的DNS服务器,请在此处添加该记录)
    • 为ALB创建IP类型的目标组,并为VPC端点添加IP
    • 在ALB侦听器中,创建当url与自定义域名匹配且路径与为API网关定义的基本路径映射匹配时向目标组发送流量的规则
    我缺少的是基本路径映射,这就是ALB如何知道将流量路由到哪个API网关,而不知道任何ID或主机名


    我分享的帖子更详细,写得更好。我建议任何有兴趣学习如何私下访问API网关的人阅读它。

    建议实现此访问模式的方法是将接口VPC端点与私有API网关显式关联:

    aws apigateway update-rest-api \
        --rest-api-id u67n3ov968 \
        --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'"
        --region us-east-1
    
    这将创建一个新的可公开解析的DNS名称,该名称解析为VPC端点专用IP地址:

    > nslookup u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com    
    
    Non-authoritative answer:
    Name:   u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com
    Address: 10.0.0.200
    Name:   u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com
    Address: 10.0.0.155
    

    本地客户端可以使用此DNS名称调用专用API网关,而无需传递标头或覆盖主机。

    看起来该博客文章被移动到了一个新的URL:我尝试了此解决方案,它对我有效!谢谢。但是我想知道这是否是最好的解决方案?AWS是否提供了其他最佳连接实践通过VPN连接到私有API网关?这真的很有帮助,而且很有效!!我在Route53中创建了一个私有托管区域,并在ALB和API网关自定义域中使用了相同的域。