访问您的集群 - 适用于 Redis 的 Amazon MemoryDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

访问您的集群

MemoryDB for Redis 实例设计为通过 Amazon EC2 实例对其进行访问。

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

授予对集群的访问权限

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

授予从 Amazon VPC 安全组到集群的网络入口
  1. 登录到 Amazon Web Services Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

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

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

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

    1. 选择 Edit(编辑)。

    2. 选择 Add rule

    3. Type 列中,选择 Custom TCP rule

    4. Port range 框中,为您的集群节点键入端口号。此端口号必须与启动集群时指定的端口号相同。Redis 的默认端口为 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. 选择 Save(保存)。

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

从外部 Amazon 访问 MemoryDB 资源

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

使用 Amazon 客户端 VPN,您允许对 MemoryDB 节点进行外部访问且具有以下优势:

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

  • VPN 客户端与 Amazon VPN 端点之间的加密流量;

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

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

  • 审核连接;

以下过程演示如何:

创建证书颁发机构

可以使用不同的技术或工具创建证书颁发机构 (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 下创建的证书。

  • 将服务器证书提交给 Amazon Certificate Manager (ACM):

    • 在 ACM 控制台上,选择 Certificate Manager (证书管理器)

    • 选择 Import Certificate (导入证书)

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

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

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

    • 选择 Review and import (查看并导入)

    • 选择 Import (导入)

    要使用 Amazon 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 以供将来使用。

配置 Amazon 客户端 VPN 组件

使用 Amazon 控制台

在 Amazon 控制台上,选择 Services(服务),然后选择 VPC

Virtual Private Network (虚拟专用网) 下,选择 Client VPN Endpoints (客户端 VPN 终端节点) 并执行以下操作:

配置 Amazon Client VPN 组件

  • 选择 Create Client VPN Endpoint(创建客户端 VPN 端点)。

  • 指定以下选项:

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

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

    • 选择 Use mutual authentication (使用双向身份验证)

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

    • 选择 Create Client VPN Endpoint(创建客户端 VPN 端点)。

使用 Amazon 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 终端节点,然后选择 Associations (关联) 选项卡。

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

    • VPC:选择 MemoryDB 集群的 VPC。

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

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

使用 Amazon 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 终端节点的安全组,请按以下步骤操作:

  • 选择当前安全组。

  • 选择 Apply Security Group (应用安全组)

  • 选择新的安全组。

使用 Amazon 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 访问目标网络

Authorization (授权) 选项卡上,选择 Authorize Ingress (授权入口) 并指定以下内容:

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

  • Grant access to: (授予访问权限:) 下,选择 Allow access to all users (允许访问所有用户)

  • 选择 Add Authorization Rules (添加授权规则)

使用 Amazon 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,则需要创建一个额外的路由。选择 Route Table (路由表) 选项卡,然后单击 Create Route (创建路由)

  • 路由目的地:0.0.0.0/0

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

  • 选择 Create Route (创建路由)

使用 Amazon 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 客户端

在 Amazon Client VPN 控制面板上,选择最近创建的 VPN 端点,然后选择 Download Client Configuration(下载客户端配置)。复制配置文件,以及文件 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 中撤消该密钥。然后,将吊销列表提交到 Amazon 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

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

  • 在 Amazon Web Services Management Console上,选择 Services (服务),然后选择 VPC

  • 选择 Client VPN Endpoints (客户端 VPN 终端节点)

  • 选择客户端 VPN 终端节点,然后选择 Actions (操作) -> Import Client Certificate CRL (导入客户端证书 CRL)

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

使用 Amazon 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 }