AWS的跨账号访问不同VPC域中的服务

公司有两个AWS账号,有各自不同的 VPC 域。其中一个账号用到了 Aurora Postgres Serveless 的数据库。

现在另一个账号也需要用到posgres数据库,最直接的想法是在本域再搭一套postgres,或者ec2新加一台,上面安装posgres。

先去检查了一下已有的postgres serverless服务,结果使用率才23%,当下就直接想复用它了。

那能不能单独再开一个db,单独给第二个账号用呢,查了半天资料。可以的,但是吧,chatgpt真的是满嘴胡说八道,连带gemini也是。

aws家的东西都是开源经过魔改,跟网上占大多数的资料是不同的,这直接导致 chatgpt 按照网上大多数文档来进行推理,导致错误!!!

还有就是aws家的东西更新修改很快,最新的文档和之前的文档不同,也导致 chatpt 按照网上大多数的旧文档来进行推理,导致错误!!!

image-20250521100034306

这个东西的架构图如上,右边的VPC里面连着 aurora 服务,它实际是target group的一个目标,然后上联到nlb,nlb再上联到endpoint service,对外提供服务.

然后左面VPC中建endpoint,通过PrivateLink连接到右边的EndpointService,这样通过私有的dns name和security group再进行控制,就可以直接连到右边的endpoint service服务资源了。

具体的做法步骤如下:

一、第一步,右边的VPC中

1、建立EndpointService

到VPC中,左边的Endpoint Services,点击:

image-20250521105156766

点击Create endpoint service新建一个

image-20250521100551854

名字:postgresql-serverless-endpoint-service,由于现在还没有nlb,需要再新建一个;点击Create new load balancer

image-20250521100641452

2、建立nlb

点击:Create load balancer新建

image-20250521100713535

这个类型,只能是nlb

image-20250521100748945

我们这个nlb,不放在公网,不公开,所以选私有的Internal,只有IPV4,不提供IPV6.

image-20250521100909962

网络选该VPC,子网选择三个private的子网

image-20250521101224868

Security groups选择一下,这里rds-sg的inbound规则是允许TCP端口5432的进入,如果没有就新建一个SG

image-20250521101324400

到最后了,居然还没有target group,那又要建一个了,点击Create target group建立

image-20250521101429096

3、建立target group

名字叫做:postgres-target-group

我们选IP addresses,因为要连到后面的postgres服务

image-20250521101530207

然后选好TCP,Port 5432, IPV4,VPC,其它保持缺省,然后建立

image-20250521101642872

4、注册target group

target group建立好以后,我们要把Postgres的服务IP给注册上去

点击Register targets新建

image-20250521101853508

我们把posgres serverless服务解析出来的IP地址天上去,端口也填上5432,然后注册上去即可。

image-20250521102038158

注册好了以后会看到状态healthy是绿色的。这样就ok了

image-20250521102120313

4、完成nlb

target group好了以后,我们返回nlb,其余保持初始值,完成创建

5、完成endpoint service

nlb好了以后,我们返回endpoint service,刷新nlb,然后选中新建的nlb,然后下面不选Supported Regions,因为这个跨多个region的,我们两个vpc都在同一区域。

image-20250521102438550

选中Acceptance required,意思是需要批准endpoint的连入请求,再选中支持IPV4,然后点击创建

5、赋予endpoint service访问权限

建好后,我们去查看这个Endpoint service服务

image-20250521102726132

先点击,Allow principals 的 tab 页,然后点击Allow principals新建

添加另一个vpc的账号:arn:aws:iam::01234567981011:root

注意中间iam后面的一串数字,就是另一个账号登录后的accound id,也就是AWS_PROFILE中值中的那串数字

这样另一个vpc域的所有资源都可以访问到这个endpoint service了

之后还要在Endpoint connections 的 tab 页中批准新连接。

同时把Service name给拷贝下来:com.amazonaws.vpce.ap-southeast-1.vpce-svc-11111111111

image-20250521103127246

二、左边的VPC中

1、建立Endpoint

去到VPC,建endpoint,点击Create ednpoint新建

image-20250521103309277

名字:my-endpoint-postgres,选择类型是Endpoint services that use NLBs and GWLBs

image-20250521103355355

然后Service settings输入右边VPC 上 endpoint service 拷贝的service name,进行验证:com.amazonaws.vpce.ap-southeast-1.vpce-svc-11111111111

image-20250521103816647

然后就得去登录右边vpc的账号,在Endpoint connections中批准这个新连接。

然后再返回来,选VPC,选子网,选SG。这里我们同样选私网的三个子网。SG同样是inbound是TCP 放行5432端口,没有就新建一个

这样endpoint就建好了。查看它detail的tab页,拷贝下来DNS names

image-20250521104235991

2、测试

我们在左边VPC的机器里起个shell,用dns name连接5432端口,测通即可

1telnet vpce-xxxx.vpce-svc-xxxx.ap-southeast-1.vpce.amazonaws.com 5432

Kafka的测试替代品-Redpanda
comments powered by Disqus