Amazon DocumentDB(与MongoDB兼容)是一种可扩展、高耐久性且完全托管的数据库服务,适用于运行关键任务的MongoDB工作负载。当与像Amazon DocumentDB这样的文档数据库交互时,开发人员需要一个环境来测试和调试他们的应用程序。本文将介绍如何通过AWS Certificate Manager(ACM)和AWS Client VPN从集群的VPC外部连接到您的Amazon DocumentDB资源。
连接Amazon DocumentDB的选项
Amazon DocumentDB集群部署在VPC内。以下是您可以从本地机器连接到Amazon DocumentDB资源的选项:
- AWS Direct Connect:允许您直接创建虚拟接口连接到Amazon DocumentDB VPC。
- VPN连接:您可以建立与AWS管理的虚拟专用网关的连接,这是VPN连接在AWS端的设备。
- SSH隧道:如果您需要从集群的VPC外部访问Amazon DocumentDB资源,可以使用这种方法(也称为端口转发)。
对初学云计算的开发人员来说,使用本地开发机器及其所有库、工具和自定义配置与AWS服务连接是首选方式。这允许开发人员在本地机器上调用自定义脚本、资源和工具,而无需上传到另一个环境。
前提条件
运行此解决方案需要以下内容:
- OpenVPN EasyRSA:用于创建证书。
- VPN客户端:本演示使用OpenVPN Connect。
在本文中,您将使用EasyRSA在本地创建自己的证书颁发机构(CA),然后将其导出到ACM以管理自生成的密钥和证书。VPN客户端用于安全地将本地机器连接到您的Amazon DocumentDB资源。
请注意,本文中所遵循的步骤和通过AWS CloudFormation模板部署的架构仅用于测试目的。如果您可以使用自己的CA创建证书,AWS非常重视云安全,任何部署到您的账户都应包含适当的安全审查和控制。建议为任何VPN连接到您的AWS资源集成适当的日志记录和检测能力。有关更多信息,请参阅AWS Client VPN的安全最佳实践。
您还应具备以下前提条件:
- 一个具有至少一个公共子网和一个私有子网的VPC。这种架构允许您拥有一个路由到NAT网关的私有子网和一个路由到互联网网关的公共子网。
- 一个Amazon DocumentDB集群。如果您尚未设置Amazon DocumentDB集群,请参阅创建Amazon DocumentDB集群。
- 一个Amazon Simple Storage Service(Amazon S3)存储桶。
如果您将多个子网与Client VPN终端节点关联,则每个子网必须位于不同的可用区。您的公共子网和私有子网也必须位于不同的可用区。
使用AWS CloudFormation配置资源
您可以从GitHub下载一个CloudFormation模板,该模板为您部署大部分解决方案:
- Client VPN终端节点:用于从本地工作站连接到位于VPC私有子网中的Amazon DocumentDB集群。
- 必要的资源:使此客户端VPN工作。它创建安全组、客户端VPN路由、子网关联和授权规则。
- 自定义资源:带有AWS Lambda函数的自定义资源,将OVPN配置文件放在S3存储桶中,成功启动CloudFormation堆栈后即可下载和使用。
要使用此模板,您首先需要完成以下部分以生成服务器和客户端证书。请参阅GitHub repo的自述文件,以获取如何启动此CloudFormation堆栈的完整步骤。
生成服务器和客户端证书
本文中的Client VPN终端节点使用双向认证。通过双向认证,Client VPN使用证书在客户端和Client VPN终端节点之间进行身份验证。您需要有一个服务器证书和密钥,至少一个客户端证书和密钥。您使用EasyRSA创建新的CA,生成服务器和客户端证书及密钥,然后将后者导入ACM。
首先,下载并安装OpenVPN软件和EasyRSA CLI工具,以创建根CA,并请求和签署您的证书。对于本演示,我们使用Windows版本的OpenVPN和EasyRSA。
- 访问OpenVPN社区下载页面下载适合您操作系统的安装程序并运行。
- 访问EasyRSA发布页面下载适合您操作系统的相应文件。
- 解压缩ZIP文件并将EasyRSA文件夹复制到
C:\Program Files\OpenVPN
文件夹中。 - 以管理员身份打开命令提示符,导航到
C:\Program Files\OpenVPN\EasyRSA
目录,并运行以下命令以打开EasyRSA 3 shell:
shell
C:\Program Files\OpenVPN\EasyRSA>EasyRSA-Start
您应该会看到类似以下的输出,确认您已进入EasyRSA shell:
``` EasyRSA Shell
```
初始化新的公钥基础设施(PKI)环境,使用以下代码:
```shell EasyRSA Shell
```
您应该会看到类似以下的输出:
...
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: C:/Program Files/OpenVPN2/EasyRSA/pki
要构建新的CA,请运行以下命令并按照提示操作。当提示时,提供一个通用名称:
```shell EasyRSA Shell
```
您应该会看到类似以下的输出:
``` Using SSL: openssl OpenSSL 1.1.0j 20 Nov 2018 ... Common Name (eg: your user, host, or server name) [Easy-RSA CA]:user
CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: C:/Program Files/OpenVPN2/EasyRSA/pki/ca.crt ```
生成服务器证书和密钥:
```shell EasyRSA Shell
```
生成客户端证书和密钥:
```shell EasyRSA Shell
```
现在您可以退出EasyRSA 3 shell:
```shell EasyRSA Shell
```
创建一个新文件夹。将新的CA、服务器证书和密钥,以及客户端证书和密钥复制到自定义文件夹并导航到新文件夹。您可以从命令提示符运行以下命令:
shell
copy "C:\Program Files\OpenVPN\EasyRSA\pki\ca.crt" C:\custom_folder
copy "C:\Program Files\OpenVPN\EasyRSA\pki\issued\server.crt" C:\custom_folder
copy "C:\Program Files\OpenVPN\EasyRSA\pki\issued\client1.domain.tld.crt" C:\custom_folder
copy "C:\Program Files\OpenVPN\EasyRSA\pki\private\server.key" C:\custom_folder
copy "C:\Program Files\OpenVPN\EasyRSA\pki\private\client1.domain.tld.key" C:\custom_folder
将服务器证书和密钥上传到ACM。确保在您打算创建Client VPN终端节点的同一区域上传它们。以下命令使用AWS命令行界面(AWS CLI)上传证书:
shell
aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
请确认您已通过aws configure
配置AWS CLI,并具有执行这些操作的适当权限。
结论
通过上述步骤,您可以安全地将本地开发环境与Amazon DocumentDB连接,利用AWS Client VPN确保数据的安全性和可访问性。希望本文能帮助到您!