¿Cómo utilizo un proxy de NGINX para acceder a OpenSearch Dashboards desde fuera de una VPC que utiliza la autenticación de Amazon Cognito?

7 minutos de lectura
0

Mi clúster de Amazon OpenSearch Service se encuentra en una nube virtual privada (VPC). Quiero utilizar un proxy de NGINX para acceder a OpenSearch Dashboards desde fuera de la VPC con autenticación de Amazon Cognito. ¿Cómo puedo hacerlo?

Descripción breve

Utilice NGINX para configurar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) como servidor proxy. Después, el servidor proxy reenvía las solicitudes del navegador a Amazon Cognito y OpenSearch Dashboards.

Nota: Esta solución solo funciona para usuarios nativos de Amazon Cognito.

También puede utilizar un túnel SSH o Client VPN para acceder a OpenSearch Dashboards desde fuera de una VPC con autenticación de Amazon Cognito. Para obtener más información, consulte ¿Cómo puedo acceder a OpenSearch Dashboards desde fuera de una VPC mediante la autenticación de Amazon Cognito?

Resolución

Importante: El dominio de OpenSearch Service es más seguro cuando el usuario restringe el acceso a los usuarios de la VPC. Antes de continuar, asegúrese de que este procedimiento no infrinja los requisitos de seguridad de su organización.

1.    Cree un grupo de usuarios de Amazon Cognito.

2.    Configure un dominio de grupo de usuarios alojado.

3.    En el panel de navegación de la consola de Amazon Cognito, elija Users and groups (Usuarios y grupos).

4.    Elija Create user (Crear un usuario) y, a continuación, complete los campos. Asegúrese de ingresar una dirección de email y, luego, seleccionar la casilla Mark email as verified (Marcar email como verificado).

5.    Elija la pestaña Groups (Grupos) y, a continuación, elija Create group (Crear un grupo). En Precedence (Prioridad), ingrese 0. Para obtener más información, consulte Creación de un grupo nuevo en la consola de administración de AWS.

6.    Vuelva a abrir la consola de Amazon Cognito.

7.    Elija Manage Identity Pools (Administrar grupos de identidades) y, a continuación, elija Create new identity pool (Crear un nuevo grupo de identidades).

8.    Ingrese un nombre para el grupo de identidades, active la casilla de verificación de Enable access to unauthenticated identities (Habilitar el acceso a identidades no autenticadas) y, a continuación, elija Create Pool (Crear un grupo).

9.    Cuando se le solicite el acceso a sus recursos de AWS, elija Allow (Permitir) para crear los dos roles predeterminados asociados a su grupo de identidades. Cree un rol predeterminado para los usuarios no autenticados y cree el otro rol predeterminado para los usuarios autenticados.

10.    Configure su dominio de OpenSearch Service para usar la autenticación de Amazon Cognito para OpenSearch Dashboards: en el caso del Cognito User Pool (Grupo de usuarios de Cognito), elija el grupo de usuarios que creó. En Cognito Identity Pool (Grupo de identidades de Cognito), elija el grupo de identidades que creó. Para obtener más información, consulte Get started with OpenSearch Service: Use Amazon Cognito for OpenSearch Dashboards access control (Primeros paso en OpenSearch Service: usar Amazon Cognito para controlar el acceso a OpenSearch Dashboards).

11.    Configure la política de acceso para que sea una política basada en recursos como la siguiente:

{
     "Version": "2012-10-17",
     "Statement": [{
          "Effect": "Allow",
          "Principal": {
               "AWS": "arn:aws:iam::account-id:role/Cognito_identity-nameAuth_Role"
          },
          "Action": "es:*",
          "Resource": "arn:aws:es:region:aws-account-id:domain/domain-name/*"
     }]
}

Debe actualizar estos valores:
account-id: el ID de la cuenta de AWS
identity-name: el nombre del grupo de identidades de Amazon Cognito
domain-name: el nombre del dominio de OpenSearch Service
region: la región en la que reside el dominio de OpenSearch Service, como us-east-1

Nota: La configuración de este ejemplo se aplica a la AMI de Amazon Linux 2. Si utiliza una AMI diferente, es posible que tenga que ajustar la configuración específica.

12.    Lance una instancia EC2 en una subred pública de la misma VPC que el dominio de OpenSearch Service. Asegúrese de que la instancia utilice el mismo grupo de seguridad que el dominio.

13.    (Opcional) Si no utiliza un entorno de prueba, asigne una dirección IP elástica para asociarla a la instancia que haya creado. Para obtener más información sobre la asignación de direcciones IP elásticas, consulte Trabajar con direcciones IP elásticas.

14.    (Opcional) Si no usa un entorno de prueba, configure el DNS para resolver las solicitudes de la dirección IP elástica. Para obtener más información sobre cómo resolver solicitudes con Amazon Route 53, consulte Configuración de Route 53 para dirigir el tráfico a una instancia de EC2.

15.    Conéctese a la instancia e instale NGINX.

Para las instancias lanzadas con una AMI de Amazon Linux 2, utilice el siguiente comando:

$ sudo amazon-linux-extras install nginx1

16.    Obtenga un certificado SSL de una entidad emisora de certificados (CA) para configurar SSL para NGINX.

Nota: Si utiliza un entorno de prueba, genere un certificado autofirmado en su lugar. Tenga en cuenta que se recomienda usar solo certificados SSL firmados por una autoridad de certificación externa en su entorno de producción.

17.    (Opcional) Si utiliza un entorno de prueba con un certificado autofirmado, utilice el comando OpenSSL x509 para generar una clave privada:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt

Esta sintaxis de comandos genera cert.key, una clave privada para el certificado SSL autofirmado.

18.    Vaya al directorio /etc/nginx/conf.d y, a continuación, cree un archivo denominado default.conf. Modifique el archivo con los siguientes valores: /etc/nginx/cert.crt: la ruta a su certificado SSL /etc/nginx/cert.key: la ruta a la clave privada que generó para el certificado SSL my_domain_host: el punto de conexión de OpenSearch Service my_cognito_host: el dominio del grupo de usuarios de Amazon Cognito (que configuró en el paso 2).

Puede usar el comando sed para asignar my_cognito_host y my_domain_host como variables, en lugar de reemplazarlos directamente en el archivo default.conf. Además, asegúrese de usar HTTPS o podría producirse un error.

En este ejemplo, tenga en cuenta lo siguiente:

  • Si en el dominio de Amazon OpenSearch Service se está ejecutando OpenSearch Service versión 1.0+, utilice el punto de enlace _dashboards.
  • Si en el dominio de Amazon OpenSearch Service se están ejecutando las versiones 5.x-7.x de Elasticsearch, utilice el punto de conexión _plugin/kibana.

Importante: El parámetro resolver (solucionador) cambia según la configuración de la VPC. El solucionador del DNS se encuentra en la IP base del bloque de CIDR principal más dos. Por ejemplo, si crea una VPC con el bloque de CIDR 10.0.0.0/24, el solucionador del DNS se encuentra en 10.0.0.2.

server {
  listen 443;
  server_name $host;
  rewrite ^/$ https://$host/_dashboards redirect;
  resolver 10.0.0.2 ipv6=off valid=5s;
  set $domain_endpoint my_domain_host;
  set $cognito_host my_cognito_host;

  ssl_certificate           /etc/nginx/cert.crt;
  ssl_certificate_key       /etc/nginx/cert.key;

  ssl on;
  ssl_session_cache  builtin:1000  shared:SSL:10m;
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
  ssl_prefer_server_ciphers on;

  location ^~ /_dashboards {

    # Forward requests to Dashboards
    proxy_pass https://$domain_endpoint;

    # Handle redirects to Cognito
    proxy_redirect https://$cognito_host https://$host;

    # Handle redirects to Dashboards
    proxy_redirect https://$domain_endpoint https://$host;

    # Update cookie domain and path
    proxy_cookie_domain $domain_endpoint $host;
    proxy_cookie_path ~*^/$ /_dashboards/;

    # Response buffer settings
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
  } 

  location ~ \/(log|sign|fav|forgot|change|saml|oauth2|confirm) {

    # Forward requests to Cognito
    proxy_pass https://$cognito_host;

    # Handle redirects to Dashboards
    proxy_redirect https://$domain_endpoint https://$host;

    # Handle redirects to Cognito
    proxy_redirect https://$cognito_host https://$host;

    proxy_cookie_domain $cognito_host $host;
  }
}

19.    (Opcional) Utilice el comando sed para asignar las variables my_domain_host y my_cognito_host:

sudo sed -i 's/my_domain_host/vpc-cognito-private-xxxxxxxxxx.us-east-1.es.amazonaws.com/' /etc/nginx/conf.d/default.conf
sudo sed -i 's/my_cognito_host/dean-kumo-xxxxxxx.auth.us-east-1.amazoncognito.com/' /etc/nginx/conf.d/default.conf

Nota: No es necesario reemplazar my_domain_host y my_cognito_host en el archivo /etc/nginx/conf.d/default.conf.

20.    Use este comando para reiniciar NGINX.

$ sudo systemctl restart nginx.service

21.    Utilice su navegador para acceder a la IP de NGINX o al nombre de DNS. Se le redirigirá a la página de inicio de sesión de Amazon Cognito.

22.    Para iniciar sesión en Dashboards, ingrese su nombre de usuario y contraseña temporal. A continuación, cambie la contraseña cuando se le solicite e inicie sesión de nuevo.


Información relacionada

Using a proxy to access OpenSearch Service from Dashboards (Uso de un proxy para acceder a OpenSearch Service desde Dashboards)

¿Cómo se solucionan los problemas de autenticación de Amazon Cognito con OpenSearch Dashboards?

Aparece el error “El usuario anónimo no está autorizado” al intentar acceder al clúster de Amazon OpenSearch Service

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años