¿Cómo uso un proxy de NGINX para acceder a los paneles de OpenSearch con la autenticación de Amazon Cognito desde fuera de una VPC?

7 minutos de lectura
0

Mi dominio de Amazon OpenSearch Service está en una nube virtual privada (VPC). Quiero usar un proxy de NGINX para acceder a los paneles de OpenSearch con la autenticación de Amazon Cognito desde fuera de la VPC.

Descripción corta

Utilice NGINX para configurar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) como servidor proxy. A continuación, el servidor proxy reenvía las solicitudes del navegador a los paneles de Amazon Cognito y OpenSearch.

Nota: La siguiente resolución solo funciona para los usuarios nativos de Amazon Cognito.

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

Resolución

Importante: Cuando restringe el acceso a los usuarios de su VPC, el dominio de OpenSearch Service es más seguro. Antes de continuar, asegúrese de que esta resolución se ajusta a los requisitos de seguridad de su organización.

Creación de un grupo de usuarios y un grupo de identidades de Amazon Cognito

Siga estos pasos:

  1. Cree un grupo de usuarios de Amazon Cognito. Configure los siguientes ajustes:
    En Tipo de aplicación, elija Aplicación web tradicional.
    En Asigne un nombre a su aplicación, introduzca un nombre de aplicación personalizado o mantenga el nombre predeterminado.
    En Opciones para los identificadores de inicio de sesión, elija Nombre de usuario.
    En Atributos obligatorios para el registro, seleccione Correo electrónico.

  2. Abra la consola de Amazon Cognito.

  3. En el panel de navegación, elija Grupos de usuarios.

  4. Seleccione su grupo de usuarios y, a continuación, configure las siguientes opciones: 
    En el panel de navegación, en Marca, elija Inicio de sesión administrado.
    En el caso de los dominios con marca de inicio de sesión administrado, seleccione Actualizar versión.
    En Versión de la marca, elija Interfaz de usuario alojada (clásica).

  5. Configure sus usuarios y grupos.

  6. Cree un grupo de identidades de Amazon Cognito. Configure los siguientes ajustes:
    En Acceso de usuario, elija Acceso autenticado.
    En Orígenes de identidad autenticados, introduzca el grupo de usuarios de Amazon Cognito.
    En Rol de IAM, elija Crear un nuevo rol de IAM y, a continuación, introduzca un nombre de rol.
    En Detalles del grupo de usuarios, seleccione su ID de grupo de usuarios y, a continuación, elija el ID de cliente de la aplicación.
    En Configuración del rol, elija Usar el rol autenticado predeterminado.
    En Asignación de reclamaciones, seleccione Inactivo.

  7. Configure su dominio de OpenSearch Service para usar la autenticación de Amazon Cognito. Configure los siguientes ajustes:
    En Grupo de usuarios de Cognito, seleccione su grupo de usuarios.
    En Grupo de identidades de Cognito, seleccione su grupo de identidades.

  8. En la política de acceso al dominio, introduzca la siguiente política de acceso:

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

    Nota: Sustituya account-id por el ID de su cuenta de AWS e identitypool-role por el nombre de su rol en el grupo de identidades. Sustituya el domain-name por su dominio de OpenSearch Service y region por la región de AWS de su dominio.

Configuración del proxy NGINX

Nota: La siguiente configuración se aplica a una imagen de máquina de Amazon (AMI) en Amazon Linux 2023. Si usa una AMI diferente, es posible que tenga que ajustar la configuración.

Siga estos pasos:

  1. Inicie una instancia de Amazon EC2 en la subred pública de la VPC en la que se encuentra su dominio de OpenSearch Service. La instancia debe usar el mismo grupo de seguridad que su dominio.

  2. (Opcional) Si no usa un entorno de prueba, asigne una dirección IP elástica para asociarla a su instancia de EC2.

  3. (Opcional) Si no usa un entorno de prueba, configure su DNS para resolver las solicitudes a 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 Amazon Route 53 para enrutar el tráfico a una instancia de Amazon EC2.

  4. Para conectarse a su instancia e instalar NGINX, ejecute el siguiente comando:

    sudo yum update
    sudo yum install nginx -y
  5. Para configurar SSL para NGINX, obtenga un certificado SSL de una autoridad de certificación (CA).
    Nota: Si usa un entorno de prueba, genere un certificado autofirmado en su lugar. Se recomienda usar los certificados SSL firmados por una autoridad de certificación externa solo en su entorno de producción.

  6. (Opcional) Si usa un entorno de prueba con un certificado autofirmado, ejecute 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

    Para obtener más información, consulte x509 en el sitio web de OpenSSL.
    El comando anterior genera el archivo cert.key, que es una clave privada para el certificado SSL autofirmado.

  7. Navegue hasta el directorio /etc/nginx/conf.d y, a continuación, cree un archivo denominado default.conf.

  8. Modifique el archivo default.conf con los valores siguientes:
    En /etc/nginx/cert.crt, introduzca la ruta del certificado SSL.
    En /etc/nginx/cert.key, introduzca la ruta de acceso a la clave privada que ha generado para el certificado SSL.
    En my_domain_host, introduzca su punto de enlace de OpenSearch Service.
    En my_cognito_host, introduzca el dominio de su grupo de usuarios de Amazon Cognito.
    Importante: Debe usar HTTPS.
    Si su dominio de Amazon OpenSearch Service ejecuta la versión 1.0 o posterior de OpenSearch Service, utilice el punto de enlace _dashboards.
    Si su dominio de Amazon OpenSearch Service ejecuta las versiones 5.x-7.x de Elasticsearch, utilice el punto de enlace _plugin/kibana.

    Nota: El valor de resolución cambia según la configuración de la VPC. Use el solucionador de DNS en la dirección IP base de su bloque CIDR principal más dos. Por ejemplo, si crea una VPC con el bloque CIDR 10.0.0.0/24, la resolución de DNS se encuentra en 10.0.0.2.

    Ejemplo de archivo default.conf:

    server {  listen 443 ssl;
      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;
      }
    }
  9. (Opcional) Para asignar my_domain_host y my_cognito_host como variables, ejecute el comando sed:

    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/domain-xxxxxxx.auth.us-east-1.amazoncognito.com/' /etc/nginx/conf.d/default.conf

    Nota: Si ejecuta el comando anterior, no tendrá que sustituir my_domain_host y my_cognito_host en el archivo /etc/nginx/conf.d/default.conf.

  10. Para activar e iniciar NGINX, ejecute el siguiente comando:

sudo systemctl enable nginx && sudo systemctl start nginx

Acceso a Paneles de OpenSearch

Siga estos pasos:

  1. Utilice su navegador para abrir la dirección IP de NGINX o el nombre DNS que lo redirige a la página de inicio de sesión de Amazon Cognito.
  2. Introduzca su nombre de usuario y contraseña temporal para iniciar sesión en Paneles de OpenSearch.
  3. Cuando se le pida, cambie la contraseña y vuelva a iniciar sesión.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses