Passer au contenu

Comment utiliser un proxy NGINX pour accéder aux tableaux de bord OpenSearch avec l'authentification Amazon Cognito depuis l'extérieur d'un VPC ?

Lecture de 6 minute(s)
0

Mon domaine Amazon OpenSearch Service se trouve dans un cloud privé virtuel (VPC). Je souhaite utiliser un proxy NGINX pour accéder aux tableaux de bord OpenSearch avec l'authentification Amazon Cognito depuis l'extérieur du VPC.

Brève description

Utilisez NGINX pour configurer une instance Amazon Elastic Compute Cloud (Amazon EC2) en tant que serveur proxy. Le serveur proxy transmet ensuite les requêtes du navigateur à Cognito et aux tableaux de bord OpenSearch.

Remarque : La résolution suivante ne fonctionne que pour les utilisateurs natifs de Cognito.

Vous pouvez également utiliser un tunnel SSH ou un VPN client pour accéder aux tableaux de bord OpenSearch depuis l'extérieur d'un VPC avec l'authentification Cognito. Pour plus d'informations, consultez la section Comment utiliser l'authentification Amazon Cognito pour accéder aux tableaux de bord OpenSearch depuis l'extérieur d'un VPC ?

Résolution

Important : Lorsque vous limitez l'accès aux utilisateurs de votre VPC, votre domaine OpenSearch Service est plus sécurisé. Avant de poursuivre, assurez-vous que cette résolution est conforme aux exigences de sécurité de votre organisation.

Créer un groupe d'utilisateurs et d'identités Cognito

Procédez comme suit :

  1. Créez un groupe d'utilisateurs Cognito. Configurez les paramètres suivants :
    Dans Type d'application, choisissez Application Web traditionnelle.
    Dans Nommer votre application, saisissez un nom d'application personnalisé ou conservez le nom par défaut.
    Dans Options relatives aux identifiants de connexion, choisissez Nom d'utilisateur.
    Dans Attributs obligatoires pour l'inscription, choisissez E-mail.

  2. Ouvrez la console Cognito.

  3. Dans le volet de navigation, choisissez Groupes d'utilisateurs.

  4. Sélectionnez votre groupe d'utilisateurs, puis configurez les paramètres suivants :
    Dans le volet de navigation, sous Marque, choisissez Connexion gérée.
    Dans Domaines dotés d'une marque de connexion gérée, choisissez Mettre à jour la version.
    Dans Version de la marque, choisissez Interface utilisateur hébergée (classique).

  5. Configurez vos utilisateurs et vos groupes.

  6. Créez un pool d'identités Cognito. Configurez les paramètres suivants :
    Dans Accès utilisateur, choisissez Accès authentifié.
    Dans Sources d'identité authentifiées, saisissez Groupe d'utilisateurs Amazon Cognito.
    Dans Rôle IAM, choisissez Créer un nouveau rôle IAM, puis saisissez un nom de rôle.
    Dans Détails du groupe d'utilisateurs, sélectionnez l’ID de votre groupe d'utilisateurs, puis choisissez ID du client d'application.
    Dans Paramètres de rôle, choisissez Utiliser le rôle authentifié par défaut.
    Dans Mappage des demandes, choisissez Inactif.

  7. Configurez votre domaine OpenSearch Service pour utiliser l'authentification Cognito. Configurez les paramètres suivants :
    Dans Groupe d'utilisateurs Cognito, sélectionnez votre groupe d'utilisateurs.
    Dans Groupe d’identités Cognito, sélectionnez votre pool d'identités.

  8. Dans Politique d'accès au domaine, saisissez la politique d'accès suivante :

    {  "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/\*"  
        }  
      \]  
    }

    Remarque : Remplacez account-id par votre ID de compte AWS et identitypool-role par le nom de votre rôle dans le pool d'identités. Remplacez domain-name par votre domaine OpenSearch Service et region par la région AWS de votre domaine.

Configurer le proxy NGINX

Remarque : Les paramètres suivants s'appliquent à une Amazon Machine Image (AMI) sur Amazon Linux 2023. Si vous utilisez une autre AMI, vous devrez peut-être ajuster les paramètres.

Procédez comme suit :

  1. Lancez une instance EC2 dans le sous-réseau public du VPC dans lequel se trouve votre domaine OpenSearch Service. L'instance doit utiliser le même groupe de sécurité que votre domaine.

  2. (Facultatif) Si vous n'utilisez pas d'environnement de test, attribuez une adresse IP Elastic à associer à votre instance EC2.

  3. (Facultatif) Si vous n'utilisez pas d'environnement de test, configurez votre DNS pour résoudre les requêtes adressées à l'adresse IP Elastic. Pour plus d'informations sur la façon de résoudre les requêtes avec Amazon Route 53, consultez la section Configuration d'Amazon Route 53 pour acheminer le trafic vers une instance Amazon EC2.

  4. Exécutez la commande suivante pour vous connecter à votre instance et installer NGINX :

    sudo yum updatesudo yum install nginx -y
  5. Obtenez un certificat SSL auprès d'une autorité de certification (CA).
    Remarque : Si vous utilisez un environnement de test, générez plutôt un certificat auto-signé. Dans votre environnement de production, il est recommandé d'utiliser des certificats SSL signés par une CA tierce.

  6. (Facultatif) Si vous utilisez un environnement de test avec un certificat auto-signé, exécutez la commande OpenSSL x509 pour générer une clé privée :

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

    Pour plus d’informations, consultez la page x509 sur le site Web d’OpenSSL.
    Remarque : La commande précédente génère cert.key qui est une clé privée pour le certificat SSL auto-signé.

  7. Accédez au répertoire /etc/nginx/conf.d, puis créez un fichier nommé default.conf.

  8. Modifiez le fichier default.conf avec les valeurs suivantes :
    Dans /etc/nginx/cert.crt, saisissez le chemin d'accès à votre certificat SSL.
    Dans /etc/nginx/cert.key, saisissez le chemin d'accès à la clé privée que vous avez générée pour le certificat SSL.
    Dans my_domain_host, saisissez votre point de terminaison OpenSearch Service.
    Pour my_cognito_host, saisissez le domaine de votre groupe d'utilisateurs Cognito.
    Important : Vous devez utiliser le protocole HTTPS.
    Si votre domaine Amazon OpenSearch Service exécute OpenSearch Service version 1.0 ou ultérieure, utilisez le point de terminaison _dashboards.
    Si votre domaine Amazon OpenSearch Service exécute les versions 5.x-7.x d'Elasticsearch, utilisez le point de terminaison _plugin/kibana.

    Remarque : La valeur du résolveur change en fonction des paramètres de votre VPC. Utilisez le résolveur DNS à l'adresse IP de base de votre bloc CIDR principal plus deux. Par exemple, si vous créez un VPC avec le bloc CIDR 10.0.0.0/24, votre résolveur DNS se trouve sur 10.0.0.2.

    Exemple de fichier 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. (Facultatif) Pour attribuer my_domain_host et my_cognito_host en tant que variables, exécutez la commande sed :

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

    Remarque : Si vous exécutez la commande précédente, il n’est pas nécessaire de remplacer my_domain_host et my_cognito_host dans le fichier /etc/nginx/conf.d/default.conf.

  10. Exécutez la commande suivante pour activer et lancer NGINX :

sudo systemctl enable nginx && sudo systemctl start nginx

Accéder aux tableaux de bord OpenSearch

Procédez comme suit :

  1. Utilisez votre navigateur pour ouvrir l'adresse IP NGINX ou le nom DNS qui vous redirige vers la page de connexion Cognito.
  2. Saisissez votre nom d'utilisateur et votre mot de passe temporaire pour vous connecter aux tableaux de bord OpenSearch.
  3. Lorsque vous y êtes invité, modifiez votre mot de passe et reconnectez-vous.
AWS OFFICIELA mis à jour il y a 5 mois