API Gateway跨账号代理NLB接口(privateLink方式)

发布于:2025-08-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

一图胜千言

基本架构

问题

我有两个AWS账号,其中一个账号提供业务接口服务,其中一个账号提供集中统一网关服务,即Api Gateway。

  • 账号A:提供API Gateway网关服务
  • 账号B:提供业务接口服务,即将自身接口服务以VPC Endpoint服务方式对外暴露。

现在的问题是,需要在账号A中代理账号B的接口服务,并且,让用户流量通过账号A的业务接口服务统一访问。

前提

这里假设账号B已经准备好接口服务的NLB负载均衡器和VPC端点服务。账号A已经存在API Gateway网关。

步骤

创建VPC端点安全组

在账号A中,创建一个安全组,来保障下一步账号A中内网机器,能够通过创建的VPC端点来访问账号B业务接口。下面就是对账号A内网ip段和业务端口(9011)进行放行。内容如下:
创建VPC端点安全组

创建VPC端点

打开创建vpc端点页面,如下图:
找到创建VPC端点页面
开始创建,如下图:
开始创建VPC端点
这里第3步需要由账号B的VPC端点服务提供委托。现在我们回到账号B,开始对账号A进行委托授权后,再来账号A中验证服务名称。

VPC端点服务委托授权

在账号B中的VPC端点服务部分,对账号A进行委托授权。找到需要授权的VPC端点服务,如下图:
找到委托入口
进入永许委托人管理界面,输入账号A对ARN即可,内容如下:
arn:aws-cn:iam::账号id:root
委托授权管理,具体如下:
设置委托人
这里在账号B中设置账号A的委托人,有资格调用这个账号B的VPC端点服务。委托授权完成后,继续在账号B中找到这个VPC端点服务,并复制它的服务名称后,准备回到账号A中继续服务名称验证。具体如下图:
复制账号B的VPC端点服务的服务名称

继续创建VPC端点之服务名称验证

复制账号B的服务名称后,回到账号A继续进行创建VPC端点,粘贴服务名称到对应的输入框中,开始验证服务。如下图:
验证服务
但出现服务名称已验证,则可以继续下一步配置VPC和安全组了。配置vpc和安全组如下:
配置vpc和安全组
注意,这里的子网都选择私有的的子网。第9步点击创建后,则需要回到账号B中进行审核。

审核VPC端点连接

再次回到账号B的VPC端点服务页面,对账号A的连接进行审批,具体入口下图:
接受VPC端点连接
这里因为我已经接受过连接了,这个截图没有截图成功,就只能这样了。接下来回到账号A看看VPC端点是否成功。

检查创建的VPC端点

回到账号A查看VPC端点状态,如下图:
查看VPC端点状态
如果账号A对VPC端点状态为可用,就表示没有问题了。现在就可以尝试通过账号A内网测试访问账号B中的接口了。

验证VPC端点

登录到账号A内网任意一台服务器,发送如下请求:

curl -v http://vpce-xxxxxxxxx-xxxxxxxx.vpce-svc-xxxxxxx.cn-north-1.vpce.amazonaws.com.cn:9011/actuator/health

如果出现正常响应200,说明账号A内网可以通过privateLink方式访问到账号B的业务接口。这个健康是Spring Actuator的健康检查接口。

创建目标组

继续在账号A创建一个目标组,如下图:
创建目标组
接下来,将VPC端点的ip注册到目标组中即可,先找到VPC端点IP地址,如下:
找到VPC端点子网IP地址
将这些VPC端点子网IP地址注册到目标组中即可。如下图:
注册目标VPC端点IP
最后点击创建目标组即可。

创建NLB

接下来,继续在账号A的控制面板操作。创建NLB,找到入口如下:
LB创建入口
下面选择NLB进行创建,如下图:
选择NLB类型进行创建
接下来,进行详细的NLB创建设置,如下图:
NLB详细设置

配置DNS

注意这里我使用了自定义域名来配置这个内网NLB的,因为这个项目有严格云安全要求,如果是一般项目,就没必要这样做了。有了这个自定义域名设置,我们还需要配置一下这个NLB的CNAME设置。先要找到我们创建的NLB的DNS名称,如下图:
找到NLB的A记录
然后,在我们自己的自定义域名DNS服务器,配置自定义域名CNAME记录即可:
xxx.xxx.xxxx.cn 300 IN CNAME xxxx-xxxx.elb.cn-north-1.amazonaws.com.cn

测试验证

在账号A内网中随意找一台机器,通过自定义域名发起如下请求:

curl -v https://xxx.xxx.xxxx.cn/actuator/health

如果出现正常响应200,说明账号A内网可以通过NLB访问到账号B的业务接口。验证通过后,继续下一步。

创建VPC Link

我们接下来在账号A的API Gateway控制面板开始准备创建VPC Link,以便后续API Gateway能够正常代理使用。找到VPC Link创建入口如下:
创建VPC Link入口
选择上面创建的NLB,开始创建VPC Link,如下图:
创建VPC Link
等待一段时间(等的时间有点久),VPC Link创建成功后,就可以继续设置API Gateway了。

设置API Gateway

在账号A中的网关中创建,如下路径资源:
创建的网关路径
等待VPC Link创建完成后,开始在这个{proxy+}资源下面创建ANY方法,如下图开始:
创建方法入口
下面开始设置ANY方法如下图:
创建ANY方法
然后,点击API Gateway重新部署这个API Gateway即可。如果需要对这个资源进行IP白名单现在,还需要设置如下资格策略,内容如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws-cn:execute-api:cn-north-1:账号ID:网关ID/*/*/资源路径/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws-cn:execute-api:cn-north-1:账号ID:网关ID/*/*/资源路径/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "23.6.3.162/32"
          ]
        }
      }
    }
  ]
}

到这里就可以通过API Gateway进行测量效果了,如果API Gateway是通过CloudFront(CDN服务)出去的。需要进一步配置CloudFront行为方式,最后,通过CloudFront测试接口即可。CloudFront行为创建配置类似如下:
Cloudfront行为配置
等待一段时间,等CloudFront部署完成后,就可以开始测试验证了。

测试验证

打开浏览器,访问cloudfront如下地址,看看是否有正常响应:

https://xxxx.xxxxxx.cn/xxxx/actuator/health

效果如下图:
测试通过
也可以在API Gateway资源策略里面关闭这个Spring Actuator对外的访问,拒绝策略内容如下:

{
  "Effect": "Deny",
  "Principal": "*",
  "Action": "execute-api:Invoke",
  "Resource": "arn:aws-cn:execute-api:cn-north-1:账号ID:网关ID/*/*/资源路径/actuator/*"
}

添加这个资格策略后,重新部署API Gateway,就发现浏览器无法通过CloudFront方式打开Spring Actuator相关状态监控接口了。这样来说,更加安全一些。

总结

这就是AWS跨账号的云服务发现机制。通过PrivateLink实现内网打通后,通过VPC端口方式来发现服务。

参考


网站公告

今日签到

点亮在社区的每一天
去签到