访问您的集群或复制组 - 用于 Redis 的 Amazon ElastiCache
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

访问您的集群或复制组

您的 Amazon ElastiCache 实例设计用于通过 Amazon EC2 实例进行访问。

如果您在 Amazon Virtual Private Cloud (Amazon VPC) 中启动了 ElastiCache 实例,您可以从同一 Amazon VPC 中的 Amazon EC2 实例访问 ElastiCache 实例。或者,通过使用 VPC 对等,您可以从不同 Amazon VPC 中的 Amazon EC2 访问您的 ElastiCache 实例。

如果您已在 EC2 Classic 中启动 ElastiCache 实例,则可以通过向与该实例关联的 Amazon EC2 安全组授予对您的缓存安全组的访问权限来允许 EC2 实例访问您的集群。默认情况下,仅启动了集群的账户能够访问集群。

确定集群的平台

在继续下一步之前,请确定集群是在 EC2-VPC 中还是在 EC2-Classic 中启动的。

有关更多信息,请参阅检测支持的平台以及是否具有默认 VPC

使用 ElastiCache 控制台确定您的集群平台

以下过程使用 ElastiCache 控制台确定您是否已经将集群启动到 EC2-VPC 或 EC2-Classic 中。

使用 ElastiCache 控制台确定集群平台

  1. 登录 AWS 管理控制台并通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 要查看运行 Redis 引擎的集群的列表,请在左侧导航窗格中选择 Redis

  3. 在集群列表中,通过选择集群名称左侧的框,展开要授权访问的集群。

  4. 找到 Subnet group:

有关更多信息,请参阅检测支持的平台以及是否具有默认 VPC

使用 AWS CLI 确定您的集群平台

以下过程使用 AWS CLI 确定您是否已经将集群启动到 EC2-VPC 或 EC2-Classic 中。

使用 AWS CLI 确定集群平台

  1. 打开一个命令窗口。

  2. 在命令提示符下,运行下面的 命令。

    对于 Linux, OS X, or Unix:

    aws elasticache describe-cache-clusters \ --show-cache-cluster-details \ --cache-cluster-id my-cluster

    对于 Windows:

    aws elasticache describe-cache-clusters ^ --show-cache-cluster-details ^ --cache-cluster-id my-cluster

    该命令的 JSON 输出内容如下所示。某些输出会省略,以节省空间。

    { "CacheClusters": [ { "Engine": "redis", "AuthTokenEnabled": false, "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "default.redis3.2", "ParameterApplyStatus": "in-sync" }, "CacheClusterId": "my-cluster-001", "CacheSecurityGroups": [], "NumCacheNodes": 1, "AtRestEncryptionEnabled": false, "CacheClusterCreateTime": "2018-01-16T20:09:34.449Z", "ReplicationGroupId": "my-cluster", "AutoMinorVersionUpgrade": true, "CacheClusterStatus": "available", "PreferredAvailabilityZone": "us-east-2a", "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", "SecurityGroups": [ { "Status": "active", "SecurityGroupId": "sg-e8c03081" } ], "TransitEncryptionEnabled": false, "CacheSubnetGroupName": "default", "EngineVersion": "3.2.10", "PendingModifiedValues": {}, "PreferredMaintenanceWindow": "sat:05:30-sat:06:30", "CacheNodeType": "cache.t2.medium" } ] }

授予访问您的集群或复制组的权限

您在 EC2-VPC 中启动了集群

如果在 Amazon Virtual Private Cloud (Amazon VPC) 中启动了集群,则只能从正在该 Amazon VPC 中运行的 Amazon EC2 实例连接到您的 ElastiCache 集群。在此情况下,您需要向集群授予网络进入。

注意

如果您的正在使用 本地区域,请确保已启用它。有关更多信息,请参阅 启用本地区域. 通过此操作,您的VPC会扩展至该本地区域,您的VPC会将子网视为任何其他可用区中的任何子网,并且相关网关、路由表和其他安全组考虑事项将自动调整。

授予从 Amazon VPC 安全组到集群的网络进入

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon EC2 控制台:https://console.amazonaws.cn/ec2/

  2. 在导航窗格中的 Network & Security 下,选择 Security Groups

  3. 从安全组列表中,选择 Amazon VPC 对应的安全组。除非创建安全组供 ElastiCache 使用,否则此安全组将命名为 default

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

    1. 选择 Edit (编辑)

    2. 选择 Add rule

    3. Type 列中,选择 Custom TCP rule

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

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

      重要

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

    6. 选择 Save (保存)

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

您在 EC2-Classic 中启动了集群

如果您在 EC2-Classic 中启动了集群,若要允许 Amazon EC2 实例访问您的集群,您将需要向与该实例关联的 Amazon EC2 安全组授予对您的缓存安全组的访问权限。

向集群授予对 Amazon EC2 安全组的访问权限

  1. 登录 AWS 管理控制台并通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 要查看安全组列表,请从左侧导航窗格中,选择 Security Groups

    重要

    如果 Security Groups 未在导航窗格列出,则说明您在 EC2-VPC 中而不是 EC2-Classic 中启动了集群,应遵循您在 EC2-VPC 中启动了集群中的说明。

  3. 选择 default 安全组左侧的框。

  4. 从屏幕底部的列表中选择要授权的 EC2 Security Group Name

  5. 要授予访问权限,请选择 Add

    与安全组关联的 Amazon EC2 实例现在获得授权,可以连接到您的 ElastiCache 集群。

要撤销某一安全组的访问权限,请在授权安全组列表中找到相应安全组,然后选择 Remove

有关 ElastiCache 安全组的更多信息,请参阅安全组 EC2-Classic

从外部 AWS 访问 ElastiCache 资源

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

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

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

  • VPN 客户端与 AWS 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

    A pki 包含证书的子目录将创建于 易磨毛.

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

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

    • 选择 Import Certificate (导入证书)

    • Certificate body (证书正文) 字段中输入在 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 公用密钥粘贴到 Certificate chain (证书链) 字段中。

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

    • 选择 Import (导入)

    要使用 AWS CLI 将服务器的证书提交给 ACM,请运行以下命令:aws acm import-certificate --certificate file://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 控制台上,选择 Services (服务) ,然后选择 VPC

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

配置 AWS 客户端 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 终端节点)

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

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

    • VPC 选择ElasticacheCluster的VPC。

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

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

使用 () 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 终端节点设置中定义)到服务端口上的 Elasticache 网络的流量(默认情况下,对于 Redis 为 6379,对于 Memcached 为 11211)。

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

  • 选择当前安全组。

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

  • 选择新的安全组。

使用 () 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" ] }

注意

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

授权 VPN 访问目标网络

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

  • 支持访问的目标网络: 使用0.0.0.0/0来访问任何网络(包括互联网)或限制Elastache网络/主持人。

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

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

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

  • 路线目的地: 0.0.0.0/0

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

  • 选择 Create Route (创建路由)

使用 () 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 客户端 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 中撤消该密钥。然后,将吊销列表提交到 AWS 客户端 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 客户端 VPN:

  • 在 AWS 管理控制台上,选择 Services (服务),然后选择 VPC

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

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