访问您的集群 - Amazon 内存 DB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问您的集群

您的 MemoryDB 实例设计为可通过 Amazon EC2 实例进行访问。

您可以从同一 Amazon VPC 中的 Amazon EC2 实例访问 MemoryDB 节点。或者,通过使用 VPC 对等连接,您可以从不同 Amazon VPC 中的 Amazon EC2 访问您的 MemoryDB 节点。

授予对集群的访问权限

您只能从正在同一 Amazon VPC 中运行的 Amazon EC2 实例连接到您的 MemoryDB 集群。在此情况下,您需要向集群授予网络进入。

授予从 Amazon VPC 安全组到集群的网络入口
  1. 登录 AWS Management Console 并打开亚马逊 EC2 控制台,网址为 https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中的网络和安全下,选择安全组

  3. 从安全组列表中,为 Amazon VPC 选择安全组。除非创建安全组供 MemoryDB 使用,否则此安全组将命名为默认

  4. 选择 Inbound 选项卡,然后执行以下操作:

    1. 选择 Edit(编辑)。

    2. 选择 添加规则

    3. Type 列中,选择 Custom TCP rule

    4. Port range 框中,为您的集群节点键入端口号。此端口号必须与启动集群时指定的端口号相同。Redis OSS 的默认端口是6379

    5. 框中,选择端口范围为(0.0.0.0/0)的任何位置,以便从 Amazon VPC 中启动的任何 Amazon EC2 实例都可以连接到您的 MemoryDB 节点。

      重要

      向 0.0.0.0/0 公开 MemoryDB 集群时,不会在互联网上公开集群,因为它没有公有 IP 地址,因此无法从 VPC 外部访问。但是,默认安全组可以应用到客户账户中的其他 Amazon EC2 实例,这些实例可能具有公有 IP 地址。如果这些实例碰巧在默认端口上运行某些内容,则该服务可能会意外暴露。因此,我们建议创建将由 MemoryDB 独占使用的 VPC 安全组。有关更多信息,请参阅自定义安全组

    6. 选择保存

当您将 Amazon EC2 实例启动到您的 Amazon VPC 中时,该实例将能够连接到您的 MemoryDB 集群。

从外部访问 MemoryDB 资源 AWS

MemoryDB 是一项设计为在 VPC 内部使用的服务。由于 Internet 流量的延迟以及安全问题,不鼓励外部访问。但是,如果出于测试或开发目的需要对 MemoryDB 进行外部访问,则可以通过 VPN 完成。

使用 AWS Client VPN,您可以允许外部访问您的 MemoryDB 节点,具有以下好处:

  • 限制访问获得批准的用户或身份验证密钥;

  • VPN 客户端和 VP AWS N 端点之间的加密流量;

  • 对特定子网或节点的限制访问;

  • 轻松撤消对用户或身份验证密钥的访问;

  • 审核连接;

以下过程演示如何:

创建证书颁发机构

可以使用不同的技术或工具创建证书颁发机构(CA)。我们建议使用 OpenVPN 项目提供的 easy-rsa 实用程序。无论您选择哪种选项,请确保密钥安全。以下过程下载 easy-rsa 脚本,创建证书颁发机构和用于验证第一个 VPN 客户端的密钥:

  • 要创建初始证书,请打开终端并执行以下操作:

    • git clone https://github.com/OpenVPN/easy-rsa

    • cd easy-rsa

    • ./easyrsa3/easyrsa init-pki

    • ./easyrsa3/easyrsa build-ca nopass

    • ./easyrsa3/easyrsa build-server-full server nopass

    • ./easyrsa3/easyrsa build-client-full client1.domain.tld nopass

    pki 子目录包含将在 easy-rsa 下创建的证书。

  • 将服务器证书提交给 AWS 证书管理器 (ACM):

    • 在 ACM 控制台上,选择 Certificate Manager

    • 选择导入证书

    • easy-rsa/pki/issued/server.crt 文件中提供的公有密钥证书输入到证书文本字段中。

    • Certificate private key(证书私有密钥)easy-rsa/pki/private/server.key 的粘贴可用私有密钥。确保选择 BEGIN AND END PRIVATE KEY 之间的所有行(包括 BEGINEND 行)。

    • easy-rsa/pki/ca.crt 文件中提供的 CA 公用密钥粘贴到证书链字段中。

    • 选择查看并导入

    • 选择导入

    要使用 AWS CLI 将服务器的证书提交给 ACM,请运行以下命令:aws acm import-certificate --certificate fileb://easy-rsa/pki/issued/server.crt --private-key file://easy-rsa/pki/private/server.key --certificate-chain file://easy-rsa/pki/ca.crt --region region

    请记下证书 ARN 以供将来使用。

配置 AWS 客户端 VPN 组件

使用控制 AWS 台

在 AWS 控制台上,选择服务,然后选择 VPC

虚拟专用网下,选择客户端 VPN 终端节点并执行以下操作:

配置 AWS Client VPN 组件

  • 选择创建客户端 VPN 端点

  • 指定以下选项:

    • 客户端 IPv4 CIDR:使用具有至少 /22 范围的网络掩码的专用网络。确保所选子网与 VPC 网络的地址不冲突。示例:10.0.0.0/22。

    • 服务器证书 ARN 中,选择之前导入的证书的 ARN。

    • 选择使用双向身份验证

    • 客户端证书 ARN 中,选择之前导入的证书的 ARN。

    • 选择创建客户端 VPN 端点

使用 AWS CLI

运行以下命令:

aws ec2 create-client-vpn-endpoint --client-cidr-block "10.0.0.0/22" --server-certificate-arn arn:aws:acm:us-east-1:012345678912:certificate/0123abcd-ab12-01a0-123a-123456abcdef --authentication-options Type=certificate-authentication,,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:012345678912:certificate/123abcd-ab12-01a0-123a-123456abcdef} --connection-log-options Enabled=false

输出示例:

"ClientVpnEndpointId": "cvpn-endpoint-0123456789abcdefg", "Status": { "Code": "pending-associate" }, "DnsName": "cvpn-endpoint-0123456789abcdefg.prod.clientvpn.us-east-1.amazonaws.com" }

将目标网络关联到 VPN 终端节点

  • 选择新的 VPN 终端节点,然后选择关联选项卡。

  • 选择关联并指定以下选项。

    • VPC:选择 MemoryDB 集群的 VPC。

    • 选择其中一个 MemoryDB 集群的网络。如果有疑问,请在 MemoryDB 控制面板上查看子网组 中的网络。

    • 选择关联。如有必要,请为其余网络重复执行这些步骤。

使用 AWS CLI

运行以下命令:

aws ec2 associate-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --subnet-id subnet-0123456789abdcdef

输出示例:

"Status": { "Code": "associating" }, "AssociationId": "cvpn-assoc-0123456789abdcdef" }

查看 VPN 安全组

VPN 终端节点将自动采用 VPC 的默认安全组。检查入站和出站规则,并确认安全组是否允许从 VPN 网络(在 VPN 端点设置中定义)到服务端口上的 MemoryDB 网络的流量(默认情况下,对于 Redis 为 6379)。

如果您需要更改分配给 VPN 终端节点的安全组,请按以下步骤操作:

  • 选择当前安全组。

  • 选择应用安全组

  • 选择新的安全组。

使用 AWS CLI

运行以下命令:

aws ec2 apply-security-groups-to-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefga  --vpc-id vpc-0123456789abdcdef --security-group-ids sg-0123456789abdcdef

输出示例:

"SecurityGroupIds": [ "sg-0123456789abdcdef" ] }

注意

MemoryDB 安全组还需要允许来自 VPN 客户端的流量。根据 VPC 网络,客户端的地址将被 VPN 终端节点地址掩盖。因此,在 MemoryDB 安全组上创建入站规则时,请考虑 VPC 网络(而不是 VPN 客户端的网络)。

授权 VPN 访问目标网络

授权选项卡上,选择授权入口并指定以下内容:

  • 启用访问的目标网络:使用 0.0.0.0/0 以允许访问任何网络(包括互联网),或限制 MemoryDB 网络/主机。

  • 授予访问权限:下,选择允许访问所有用户

  • 选择添加授权规则

使用 AWS CLI

运行以下命令:

aws ec2 authorize-client-vpn-ingress --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --target-network-cidr 0.0.0.0/0 --authorize-all-groups

输出示例:

{ "Status": { "Code": "authorizing" } }

允许从 VPN 客户端访问 Internet

如果您需要通过 VPN 浏览 Internet,则需要创建一个额外的路由。选择路由表选项卡,然后单击创建路由

  • 路由目的地:0.0.0.0/0

  • 目标 VPC 子网 ID:选择可访问 Internet 的关联子网之一。

  • 选择创建路由

使用 AWS CLI

运行以下命令:

aws ec2 create-client-vpn-route --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --destination-cidr-block 0.0.0.0/0 --target-vpc-subnet-id subnet-0123456789abdcdef

输出示例:

{ "Status": { "Code": "creating" } }

配置 VPN 客户端

在 AWS Client VPN 控制面板上,选择最近创建的 VPN 端点,然后选择下载客户端配置。复制配置文件,以及文件 easy-rsa/pki/issued/client1.domain.tld.crteasy-rsa/pki/private/client1.domain.tld.key。编辑配置文件并更改或添加以下参数:

  • cert:添加一个新行,其参数证书指向 client1.domain.tld.crt 文件。使用到文件的完整路径。例如:cert /home/user/.cert/client1.domain.tld.crt

  • cert: key:添加一个新行,其参数键指向 client1.domain.tld.key 文件。使用到文件的完整路径。例如:key /home/user/.cert/client1.domain.tld.key

使用以下命令建立 VPN 连接:sudo openvpn --config downloaded-client-config.ovpn

撤消访问权限

如果您需要使来自特定客户端密钥的访问失效,则需要在 CA 中撤消该密钥。然后将撤销清单提交给 AWS Client VPN。

使用 easy-rsa 撤消密钥:

  • cd easy-rsa

  • ./easyrsa3/easyrsa revoke client1.domain.tld

  • 输入“是” 以继续,或输入任何其他输入以中止。

    Continue with revocation: `yes` ... * `./easyrsa3/easyrsa gen-crl

  • 已创建更新的 CRL。CRL 文件:/home/user/easy-rsa/pki/crl.pem

将吊销列表导入到 AWS Client VPN:

  • 在上 AWS Management Console,选择服务,然后选择 VPC

  • 选择客户端 VPN 端点

  • 选择客户端 VPN 端点,然后选择操作 -> 导入客户端证书 CRL

  • 查看 crl.pem 文件的内容。

使用 AWS CLI

运行以下命令:

aws ec2 import-client-vpn-client-certificate-revocation-list --certificate-revocation-list file://./easy-rsa/pki/crl.pem --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg

输出示例:

Example output: { "Return": true }