

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceso al clúster
<a name="accessing-memorydb"></a>

Las instancias de MemoryDB se han diseñado para obtener acceso a ellos a través de una instancia de Amazon EC2.

Puede acceder al nodo de MemoryDB desde una instancia de Amazon EC2 en la misma Amazon VPC. O, utilizando la conexión de emparejamiento de VPC, puede obtener acceso al nodo de MemoryDB desde una Amazon EC2 en otra Amazon VPC.

**Topics**
+ [Conceder acceso a su clúster](#grant-access)
+ [Acceso a los recursos de MemoryDB desde fuera de AWS](#access-from-outside-aws)

## Conceder acceso a su clúster
<a name="grant-access"></a>

Puede conectarse al clúster de MemoryDB solo desde una instancia de Amazon EC2 que se ejecuta en la misma Amazon VPC. En este caso, necesitará conceder acceso de red al clúster.

**Para conceder acceso de red desde un grupo de seguridad de Amazon VPC a un clúster**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. En el panel de navegación de la izquierda, debajo de **Network & Security**, elija **Security Groups**.

1. En la lista de grupos de seguridad, elija el grupo de seguridad para su Amazon VPC. A menos que haya creado un grupo de seguridad para que lo utilice MemoryDB, este grupo de seguridad se denominará *default*.

1. Elija la pestaña **Inbound** y haga lo siguiente:

   1. Elija **Editar**.

   1. Seleccione **Agregar regla**.

   1. En la columna **Type**, elija **Custom TCP rule**.

   1. En el cuadro **Port range**, escriba el número de puerto para su nodo de clúster. Este número debe ser el mismo que especificó cuando lanzó el clúster. El puerto predeterminado para Valkey y Redis OSS es **6379**.

   1. En el cuadro **Origen**, elija **Cualquier lugar** que tenga el rango de puertos (0.0.0.0/0) para que cualquier instancia de Amazon EC2 que lance en su Amazon VPC pueda conectarse a sus nodos de MemoryDB.
**importante**  
Al abrir el clúster de MemoryDB a 0.0.0.0/0 no se expone el clúster a Internet, ya que no tiene ninguna dirección IP pública y, por lo tanto, no se puede acceder a este desde fuera de la VPC. Sin embargo, el grupo de seguridad predeterminado se puede aplicar a otras instancias de Amazon EC2 en la cuenta del cliente y dichas instancias pueden tener una dirección IP pública. Si se está ejecutando algo en el puerto predeterminado, ese servicio podría exponerse de forma involuntaria. Por lo tanto, recomendamos crear un grupo de seguridad de VPC para que lo utilice exclusivamente MemoryDB. Para obtener más información, consulte [Grupos de seguridad personalizados](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#creating-your-own-security-groups).

   1. Seleccione **Save**.

Al lanzar una instancia de Amazon EC2 en su Amazon VPC, esa instancia podrá conectarse a su clúster de MemoryDB.

## Acceso a los recursos de MemoryDB desde fuera de AWS
<a name="access-from-outside-aws"></a>

MemoryDB es un servicio diseñado para que se utilice internamente en su VPC. Se desaconseja el acceso externo debido a la latencia del tráfico de Internet y a los riesgos de seguridad. Sin embargo, si se requiere acceso externo a MemoryDB para fines de desarrollo o pruebas, puede obtenerse a través de una VPN.

Mediante la AWS Client VPN, puede permitir el acceso externo a los nodos de MemoryDB con los siguientes beneficios:
+ Acceso restringido a usuarios aprobados o claves de autenticación
+ Tráfico cifrado entre Client VPN y el punto de conexión de VPN de AWS
+ Acceso limitado a subredes o nodos específicos
+ Revocación sencilla del acceso de los usuarios o claves de autenticación
+ Conexiones de auditoría

Los siguientes procedimientos muestran cómo:

**Topics**
+ [Crear una entidad de certificación](#create-cert)
+ [Configuración de componentes de AWS Client VPN](#configure-vpn-components)
+ [Configurar el cliente de VPN](#configure-vpn-client)

### Crear una entidad de certificación
<a name="create-cert"></a>

Es posible crear una entidad de certificación (CA) utilizando diferentes técnicas o herramientas. Recomendamos la utilidad easy-rsa, proporcionada por el proyecto [OpenVPN](https://openvpn.net/community-resources/openvpn-project/) . Independientemente de la opción que elija, asegúrese de mantener protegidas las claves. El siguiente procedimiento descarga los scripts de easy-rsa, y crea la entidad de certificación y las claves para autenticar el primer cliente de VPN:
+ Para crear los certificados iniciales, abra un terminal y proceda del modo siguiente:
  + `git clone` [https://github.com/OpenVPN/easy-rsa](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`

  Se creará un subdirectorio **pki** que contiene los certificados bajo **easy-rsa**.
+ Envíe el certificado del servidor a AWS Certificate manager (ACM):
  + En la consola de ACM, seleccione **Certificate Manager**.
  + Seleccione **Importar certificado**.
  + Especifique el certificado de clave pública disponible en el archivo `easy-rsa/pki/issued/server.crt` en el campo **Cuerpo del certificado**.
  + Pegue la clave privada disponible en `easy-rsa/pki/private/server.key` en el campo **Clave privada del certificado**. Asegúrese de seleccionar todas las líneas entre `BEGIN AND END PRIVATE KEY` (incluidas las líneas `BEGIN` y `END`).
  + Pegue la clave pública de CA disponible en el archivo `easy-rsa/pki/ca.crt` en el campo **Cadena de certificados**.
  + Seleccione **Revisar e importar**.
  + Seleccione **Importar**.

  Para enviar los certificados del servidor a ACM mediante la AWS CLI, ejecute el siguiente comando: `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`.

  Anote el ARN del certificado para usarlo en el futuro.

### Configuración de componentes de AWS Client VPN
<a name="configure-vpn-components"></a>

**Mediante la consola de AWS**

En la consola de AWS, seleccione **Servicios** y, a continuación, **VPC**.

En **Red virtual privada**, seleccione **Puntos de conexión de VPN de cliente** y proceda del modo siguiente:

**Configuración de componentes de AWS Client VPN**
+ Seleccione **Crear punto de conexión de VPN de cliente**.
+ Especifique las opciones siguientes:
  + **CIDR de IPv4 de cliente**: utilice una red privada con una máscara de red de al menos el intervalo /22. Asegúrese de que la subred seleccionada no entra en conflicto con las direcciones de las redes de la VPC. Ejemplo 10.0.0.0/22.
  + En **ARN del certificado del servidor**, seleccione el ARN del certificado importado previamente.
  + Seleccione **Utilizar la autenticación mutua**.
  + En **ARN del certificado de cliente**, seleccione el ARN del certificado importado previamente.
  + Seleccione **Crear punto de conexión de VPN de cliente**.

**Uso de AWS CLI**

Ejecuta el siguiente comando:

`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 `

Ejemplo de salida:

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

**Asociar las redes de destino al punto de conexión de VPN**
+ Seleccione el nuevo punto de conexión de VPN y, a continuación, seleccione la pestaña **Asociaciones**.
+ Seleccione **Asociar** y especifique las siguientes opciones.
  + **VPC**: seleccione la VPC del clúster de MemoryDB.
  + Seleccione una de las redes del clúster de MemoryDB. En caso de duda, revise las redes en **Grupos de subredes** en el panel de MemoryDB.
  + Seleccione **Asociar**. Si es necesario, repita los pasos para las redes restantes.

**Uso de AWS CLI**

Ejecuta el siguiente comando:

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

Ejemplo de salida:

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

**Revisar el grupo de seguridad de VPN**

El punto de conexión de VPN adoptará automáticamente el grupo de seguridad predeterminado de la VPC. Compruebe las reglas de entrada y salida y confirme si el grupo de seguridad permite el tráfico desde la red VPN (definida en la opción Punto de conexión de VPN) a las redes de MemoryDB en los puertos de servicio (de forma predeterminada, 6379 para Redis).

Si necesita cambiar el grupo de seguridad asignado al punto de conexión de VPN, proceda de la siguiente manera:
+ Seleccione el grupo de seguridad actual
+ Seleccione **Aplicar grupo de seguridad**.
+ Seleccione el nuevo grupo de seguridad.

**Uso de AWS CLI**

Ejecuta el siguiente comando:

`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`

Ejemplo de salida:

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

**nota**  
El grupo de seguridad de MemoryDB también necesita permitir el tráfico procedente de los clientes de VPN. Las direcciones de los clientes se enmascararán con la dirección del punto de conexión de VPN, de acuerdo con la red de la VPC. Por lo tanto, tenga en cuenta la red de la VPC (no la red de los clientes de VPN) cuando cree la regla de entrada en el grupo de seguridad de MemoryDB.

**Autorizar el acceso de VPN a las redes de destino**

En la pestaña **Autorización** seleccione **Autorizar entrada** y especifique lo siguiente:
+ Red de destino para habilitar el acceso: utilice 0.0.0.0/0 para permitir el acceso a cualquier red (incluido Internet) o restrinja las redes o hosts de MemoryDB.
+ En **Conceder acceso a:**, seleccione **Permitir el acceso a todos los usuarios**.
+ Seleccione **Añadir reglas de autorización**.

**Uso de AWS CLI**

Ejecuta el siguiente comando:

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

Ejemplo de salida: 

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

**Permitir el acceso a Internet desde los clientes de VPN**

Si necesita navegar por Internet a través de la VPN, debe crear una ruta adicional. Seleccione la pestaña **Route Table (Tabla de ruteo)** y, a continuación, seleccione **Create Route (Crear ruta)**:
+ Destino de la ruta: 0.0.0.0/0
+ **Target VPC Subnet ID (ID de subred de la VPC de destino)**: seleccione una de las subredes asociadas con acceso a Internet.
+ Seleccione **Create Route (Crear ruta)**.

**Uso de AWS CLI**

Ejecuta el siguiente comando:

`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`

Ejemplo de salida:

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

### Configurar el cliente de VPN
<a name="configure-vpn-client"></a>

En el panel de AWS Client VPN, seleccione el punto de conexión de VPN creado recientemente y seleccione **Download Client Configuration** (Descargar configuración del cliente). Copie el archivo de configuración y los archivos `easy-rsa/pki/issued/client1.domain.tld.crt` y `easy-rsa/pki/private/client1.domain.tld.key`. Edite el archivo de configuración y cambie o agregue los siguientes parámetros:
+ cert: agregue una nueva línea con el parámetro cert apuntando al archivo `client1.domain.tld.crt`. Utilice la ruta completa al archivo. Ejemplo:: `cert /home/user/.cert/client1.domain.tld.crt`
+ cert: key: agregue una nueva línea con el parámetro key apuntando al archivo `client1.domain.tld.key`. Utilice la ruta completa al archivo. Ejemplo:: `key /home/user/.cert/client1.domain.tld.key`

Establezca la conexión de VPN con el comando: `sudo openvpn --config downloaded-client-config.ovpn`

**Revocar el acceso**

Si necesita invalidar el acceso de una clave de cliente concreta, la clave debe revocarse en la CA. A continuación, envíe la lista de revocación a AWS Client VPN.

Revocar la clave con easy-rsa: 
+ `cd easy-rsa`
+ `./easyrsa3/easyrsa revoke client1.domain.tld`
+ Especifique "yes" (sí) para continuar o escriba cualquier otra entrada para cancelar.

  `Continue with revocation: `yes` ... * `./easyrsa3/easyrsa gen-crl`
+ Se ha creado una CRL actualizada. Archivo CRL: `/home/user/easy-rsa/pki/crl.pem` 

Importar la lista de revocación a AWS Client VPN:
+ En la Consola de administración de AWS, seleccione **Services (Servicios)** y, a continuación, **VPC**.
+ Seleccione **Puntos de conexión de VPN de cliente**.
+ Seleccione el punto de conexión de Client VPN y, a continuación, seleccione **Actions (Acciones)** -> **Import Client Certificate CRL (Importar CRL de certificado de cliente)**.
+ Pegue el contenido del archivo `crl.pem`. 

**Uso de AWS CLI**

Ejecuta el siguiente comando:

`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 `

Ejemplo de salida:

`Example output: { "Return": true } `