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

访问您的集群

您的 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

我们将于 2022 年 8 月 15 日停用 EC2-Classic。我们建议您从 EC2-Classic 迁移到 VPC。有关更多信息,请参阅 将 EC2-Classic 集群迁移到 VPCEC2-Classic Networking is Retiring – Here’s How to Prepare 博客文章。

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

使用 ElastiCache 控制台确定集群平台
  1. 登录 Amazon Web Services Management Console 并打开 ElastiCache 控制台 (https://console.aws.amazon.com/elasticache/)。

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

  3. 在集群列表中,通过选择集群名称(而不是其左侧的按钮)展开您要授权访问的集群。

  4. 选择 Network and security(网络和安全性)选项卡。

  5. 找到 Subnet group:

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

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

使用 Amazon CLI 确定集群平台
  1. 打开一个命令窗口。

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

    对于 Linux、macOS 或 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": "memcached", "AuthTokenEnabled": false, "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "default.memcached1.4", "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": "6.0", "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 集群。在此情况下,您需要向集群授予网络进入。

注意

如果您正在使用 Local Zones,请确保已启用它。有关更多信息,请参阅启用 Local Zones。通过这样做,您的 VPC 将扩展到该 Local Zone,您的 VPC 会将子网视为任何其他可用区中的任何子网,并且相关网关、路由表和其他安全组注意事项将自动调整。

授予从 Amazon VPC 安全组到集群的网络入口
  1. 登录到 Amazon Web Services Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/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 框中,为您的集群节点键入端口号。此端口号必须与启动集群时指定的端口号相同。Memcached 的默认端口是 11211

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

      重要

      向 0.0.0.0/0 公开 ElastiCache 集群时,不会在互联网上公开集群,因为它没有公有 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. 登录 Amazon Web Services Management Console 并打开 ElastiCache 控制台 (https://console.aws.amazon.com/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

从 Amazon 外部访问 ElastiCache 资源

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

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

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

  • 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 fileb://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:选择 Elasticache 集群的 VPC。

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

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

如果您需要更改分配给 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" ] }

注意

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

授权 VPN 访问目标网络

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

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

  • 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 }