AWS使用 Client VPN 配置访问VPC 内网资源

AWS使用AWS Client VPN 访问云上VPC 内网资源

一、背景和架构

AWS Client VPN是一种基于客户端的托管VPN服务,让您能够安全地访问云上资源或借助云作为网络通道访问其他资源。AWS Client VPN具有专用的VPN客户端,也支持使用OpenVPN作为客户端。

注意:AWS Client VPN只能用于企业海外员工到附近的海外AWS区域的访问接入,不可用于跨境访问。跨境需求需要申请符合相关法律规定的具有资质的跨境专线。

与云上自行部署Client VPN相比,AWS Client VPN除了具有运维管理的便捷性之外,还可以用于与没有Internet Gateway的VPC内网互联实现对云上私密数据的访问,且访问VPN同时不影响客户端本机的互联网访问。如下图架构所示。

在上图中,位于海外区域的远程用户希望访问云上的VPC内的应用,且出于合规安全考虑云上的VPC是一个没有关联Internet Gateway、也没有外网路由的内部VPC。此时AWS Client VPN支持通过ENI方式将流量注入到VPC内实现访问。同时,为了确保客户端能对其他Internet网络正常访问,本方案将使用AWS Client VPN 的 Split-tunnul 功能分离网络流量,允许去往非VPC的流量直接从客户端对外发出而不经过VPN。本文描述此场景下的配置过程。

二、创建 AWS Client VPN 需要的证书

AWS Client VPN 使用的是OpenVPN协议,身份认证方式支持微软AD认证和SSL证书认证等方式。本文采用证书方式认证进行配置。

1 、创建CA和服务器证书以及客户端证书,导出证书并上传到 ACM

首先在海外AWS区域创建一个EC2,建议使用Amazon Linux 2系统,在其上配置AWSCLI工具和对应的AKSK,使其具有AWS Certificate Manager(ACM)服务操作权限。

执行如下命令生成CA证书。注意最后一个命令执行后,需要输入证书使用的域名。

git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass   【中途输入yes】
./easyrsa build-client-full all.man.use  nopass   【中途输入yes】
mkdir ~/custom_folder/
cp pki/ca.crt ~/custom_folder/
cp pki/issued/server.crt ~/custom_folder/
cp pki/private/server.key ~/custom_folder/
cp pki/issued/all.man.use.crt ~/custom_folder
cp pki/private/all.man.use.key ~/custom_folder/
cd ~/custom_folder/    

2、导出证书并上传到 ACM

本地上传证书
需要aws的token具有证书管理员权限
aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1     
aws acm import-certificate --certificate fileb://all.man.use.crt  --private-key fileb://all.man.use.key   --certificate-chain fileb://ca.crt --region ap-northeast-1  

返回CertificateArn信息则表示成功。

3 **、**生成单个用户登陆证书【需要为每个用户设置单独的证书提供使用】

cd /home/ec2-user/config/vpn/easy-rsa/easyrsa3
./easyrsa build-client-full jack.man.use  nopass
cp pki/issued/jack.man.use.crt ~/custom_folder
cp pki/private/jack.man.use.key ~/custom_folder/
cd ~/custom_folder/
aws acm import-certificate --certificate fileb://jack.man.use.crt  --private-key fileb://jack.man.use.key   --certificate-chain fileb://ca.crt --region ap-northeast-1
然后需要修改客户端的连接密钥文件才能远程连接 

4、续订服务器证书【参考】

因为生成的证书每隔一年会到期,所以到一年后需要续订

$ ./easyrsa renew server nopass
$ mkdir ~/custom_folder2
$ cp pki/ca.crt ~/custom_folder2/
$ cp pki/issued/server.crt ~/custom_folder2/
$ cp pki/private/server.key ~/custom_folder2/
$ cd ~/custom_folder2/
$ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt   

三、创建 AWS Client VPN 终端节点

1 、创建 Endpoint 终端节点

进入对应区域的VPC服务界面,在左侧菜单中找到Client VPN Endpoints,点击进入,并点击新建,如下截图。

在创建界面上填写VPN服务名称、描述信息,并设置IP地址段。IP地址段是AWS Client VPN 服务器与客户端之间的一个私有网络,这个地址段的子网掩码范围/12和/22之间,且地址不能与客户端本地或云上VPC冲突。例如本文使用10.88.0.0/16作为地址段。

然后在下方的服务器证书位置,选择ACM中包含的server证书。如下截图。

在客户端认证选项中,选择Use mutual authentication使用证书双向认证,然后在Client证书选择框中,选择ACM中包含的client证书。如下截图。

接下来将页面向下移动。在DNS位置留空,VPN 服务器将不强制推送DNS服务器。在对接企业AD场景下如果有需要的话可推送自己的DNS。在传输协议位置保持默认的UDP协议。在Enable split-tunnel位置,选中这个选项,表示客户端将把去往AWS的流量和本地互联网流量分离。由此不需要所有流量都经过VPN处理。接下来选择安全组为本VPC默认的安全组,默认的安全组规则是对外出栈放行,对内入栈禁止所有。如下截图。

页面继续向下移动,在页面下方,选中Do you want to enable Client Login Banner text的选项,并设置一段文本,可以在VPN连接过程中显示这个文本信息。最后点击右下角创建按钮。如下截图。

至此创建Client VPN Endpoint完成。

2 、绑定子网

进入创建好的AWS Client VPN Endpoint界面,找到第二个标签页Associations,点击Associate按钮。如下截图。

在弹出的绑定子网界面中,选中AWS Client VPN 要连接的子网。首先选择VPC和第一个子网。然后点确定。如下截图。

重复以上步骤,将两个子网都绑定到AWS Client VPN。如下截图。

接下来需要等待几分钟,等待黄色的Associating字样变成绿色的Associated。如下截图。

3 、绑定策略

进入创建好的AWS Client VPN Endpoint界面,找到第四个标签页Authorization授权界面。点击Authorize Ingress按钮。如下截图。

输入AWS Client VPN要访问的VPC的CIDR,例如本文的VPC地址段是10.1.0.0/16,然后点击授权。如下截图。

至此VPC服务器端配置完成。

四、获取客户端配置文件并修改配置

1 、下载客户端配置文件

在上一步完成操作的界面,点击页面中间蓝色的按钮Download Client Configuration,获取客户端配置文件。

这样将在下载目录中打开名为downloaded-client-config.ovpn的文件,接下来使用任意文本编辑器修改其配置。

2 、设置客户端证书

接上一步,打开扩展名为ovpn的配置文件,在最后增加如下两段内容:

<cert>
这里粘贴上前文生成的客户端密钥username.domain.tld.crt的内容
</cert>

<key>
这里粘贴上前文生成的客户端密钥username.domain.tld.key的内容
</key>

3 、设置访问域名

接上一步,找到配置文件中开头部分如下一行。

remote cvpn-endpoint-05ba461a63c340555.prod.clientvpn.eu-central-1.amazonaws.com 443

在其前方增加一个子域名,使用前边申请证书的子域名即可,例如username.domain.tld。如下配置。

remote username.cvpn-endpoint-05ba461a63c340555.prod.clientvpn.eu-central-1.amazonaws.com 443

保存退出,至此本用户的客户端配置文件修改完成。现在需要将此文件复制到要连接VPN的客户机上。

请注意,今后每增加一个新的用户,都需要新制作这样一个客户端配置文件。由此,当单个用户需要注销的时候,只要在ACM服务内注销掉用户对应的客户端证书即可。

五、下载客户端并连接 VPN

在要使用VPN的客户机上下载AWS Client VPN 客户端对应的操作系统的版本,包括Windows、Linux和MacOS的支持。如下截图。

AWS Client VPN Download | Amazon Web Services

安装完成后启动客户端。点击菜单上的File命令,然后点击Manage Profiles按钮管理配置文件。如下截图。

点击添加按钮,再选择前文编辑完成的客户端配置文件,然后点击Add Profile按钮完成添加。如下截图。

添加配置文件完成。此时可以准备开始连接了。如下截图。

连接成功后,使用cmd去ping在VPC内网的环境,可看到ping成功。如下截图。

此外,通过AWS控制台上Client VPN界面的Connections标签页,也可以看到当前连接的客户端。如下截图。

在前文配置VPN过程中已经将Split-tunnel选项设置为Enable启用状态,所以只有去往VPC中的流量才会通过VPN传输,其他流量将从客户本地网络上直接访问互联网。由于本次配置的云上VPC是没有Internet Gateway的,因此当您连接到Client VPN后能同时访问VPC和访问Internet,就意味着启用了Split-tunnel分流功能工作正常。

至此配置完成。

相关推荐
終不似少年遊*5 分钟前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
KubeSphere 云原生2 小时前
云原生周刊:利用 eBPF 增强 K8s
云计算·k8s·容器平台·kubesphere
木子Linux14 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
HaoHao_0102 天前
云消息队列 Kafka 版
分布式·阿里云·kafka·云计算·云服务器
sinat_307021532 天前
大数据技术与应用——大数据处理技术(一)(山东省大数据职称考试)
大数据·云计算
HaoHao_0103 天前
云消息队列 RabbitMQ 版
阿里云·云计算·云服务器
終不似少年遊*3 天前
云计算HCIP-OpenStack01
云原生·云计算·学习笔记·openstack·hcip·虚拟化
云计算DevOps-韩老师3 天前
【网络云计算】2024第51周-每日【2024/12/20】小测-理论-周测
云计算
jmoych3 天前
我在华为的安全日常
大数据·运维·网络·安全·华为·架构·云计算
HaoHao_0103 天前
应用实时监控服务ARMS
阿里云·云计算·云服务器