Interface Endpoint

Interface Endpoint介绍

Interface endpoint是基于AWS PrivateLink实现的技术,它在每个VPC的子网中创建一个ENI并给它分配一个私网IP。这个ENI是requester-managed 类型,可以查看它的信息,但不能做更改:

image-20220919112236780

Interface Endpoint测试

本部分我们将创建SQS服务的Interface endpoint,并测试在私网的机器上往SQS里发送消息:

image-20220927103118459

首先创建具有公网和私网的VPC(可以直接使用第二章创建的)


创建一个SQS队列:

image-20220927165909847

记录下它的URL:

image-20220927165939541

由于私网机器要向SQS里发送消息,所以要为它绑定一个Role:

image-20220927170159340

创建Endpoint:

image-20220927170344083

搜索并选择sqs的interface endpoint:

image-20220927170414459

这里先选择Interface Endpoint所在的VPC,将公有子网和私有子网都钩选上:

image-20220927170457919

transit gateway不一样,如果创建TGW时没有钩选某个子网,则该子网不具有和TGW通讯的能力;但是Interface Endpoint只要选择一个子网,则VPC下的其他子网都可以跟它通讯。选择多个子网可以实现Interface Enpoint的高可用

由于Interface Endpoint要在VPC的子网里创建ENI,所以这个ENI上可以绑定安全组,这里我们先选择默认的安全组:

image-20220927170520344

这个安全组用于控制Interface Endpoint上的流量,由于它要与SQS进行通讯,所以要把443端口放开:

image-20220927170733972

最后点击创建Interface Endpoint

测试

默认EC2上装的是AWS CLI V1,测试一定要使用V2版本的CLI!!否则执行sqs命令会失败

先为私网机器的路由表添加一条NAT Gateway解析,让它具有访问公网的能力,然后更新CLI:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

更新完成后,再把这条路由删除,此时私网机器访问不到公网。


创建完成后,登录到私网机器,然后执行sqs的命令往队列里发送消息:

aws sqs send-message --queue-url https://sqs.us-west-2.amazonaws.com/145197526627/interface-test  --message-body="Hello via interface endpoint"  --region=us-west-2

image-20220928183022370

queue-urlregion参数根据实际情况进行替换

可见,使用Interface Endpoint后,即使在私网里(没有NAT)也能跟SQS服务通讯。

此时我们解析SQS的域名,发现正好是Interface Endpoint两个ENI的IP:

image-20220928183219890

image-20220928183522677


上面我们把Interface Endpoint的安全组上放通了443端口,我们测试下把这条规则去掉会如何:

image-20220928183814218

此时执行sqs命令,会发现被卡住:

image-20220928183841968

通过Interface Endpoint的安全组,我们拥有了控制流量访问的能力