Salta al contenuto

Come posso utilizzare un proxy NGINX per accedere a OpenSearch Dashboards con l'autenticazione di Amazon Cognito dall'esterno di un VPC?

6 minuti di lettura
0

Il mio dominio del Servizio OpenSearch di Amazon si trova in un cloud privato virtuale (VPC). Desidero utilizzare un proxy NGINX per accedere a OpenSearch Dashboards con l'autenticazione di Amazon Cognito dall'esterno del VPC.

Breve descrizione

Utilizza NGINX per configurare un'istanza Amazon Elastic Compute Cloud (Amazon EC2) come server proxy. Il server proxy inoltra quindi le richieste del browser a Cognito e OpenSearch Dashboards.

Nota: la seguente risoluzione funziona solo per gli utenti Cognito nativi.

Per accedere a OpenSearch Dashboards dall'esterno di un VPC con l'autenticazione di Amazon Cognito, puoi anche utilizzare un tunnel SSH o una VPN client. Per ulteriori informazioni, consulta Come posso utilizzare l'autenticazione Amazon Cognito per accedere a OpenSearch Dashboards dall'esterno di un VPC?

Risoluzione

Importante: quando limiti l'accesso agli utenti nel VPC, il dominio OpenSearch Service è più sicuro. Prima di continuare, assicurati che questa risoluzione sia in linea con i requisiti di sicurezza dell'organizzazione.

Crea un pool di utenti e un pool di identità Cognito

Completa i seguenti passaggi:

  1. Crea un pool di utenti Cognito. Configura le seguenti impostazioni:
    Per Tipo di applicazione, scegli Applicazione Web tradizionale.
    In Assegna un nome all'applicazione, inserisci un nome personalizzato o mantieni il nome predefinito.
    Per Opzioni per gli identificativi di accesso, scegli Nome utente.
    Per Attributi richiesti per l'accesso, scegli E-mail.

  2. Apri la console Cognito.

  3. Nel pannello di navigazione, scegli Pool di utenti.

  4. Seleziona il Pool di utenti, quindi configura le seguenti impostazioni:
    Nel pannello di navigazione, in Branding, scegli Accesso gestito.
    Per Domains with managed login branding (Domini con branding accesso gestito), scegli Aggiorna versione.
    Per Versione del branding, scegli Interfaccia utente ospitata (classica).

  5. Configura utenti e gruppi.

  6. Crea un pool di identità Cognito. Configura le seguenti impostazioni:
    Per Accesso utente, scegli Accesso autenticato.
    In Origini di identità autenticate, inserisci Pool di utenti Amazon Cognito.
    Per Ruolo IAM, scegli Crea un nuovo ruolo IAM, quindi inserisci un nome per il ruolo.
    Per Dettagli del pool di utenti, seleziona l'ID del pool di utenti, quindi scegli ID del client dell'app.
    Per Impostazioni ruolo, scegli Utilizza ruolo autenticato predefinito.
    Per Mappatura delle richieste, scegli Inattiva.

  7. Configura il dominio del Servizio OpenSearch per utilizzare l'autenticazione di Cognito. Configura le seguenti impostazioni:
    Per Pool di utenti Cognito, seleziona il pool di utenti.
    Per Cognito Identity Pool (Pool di identità Cognito), seleziona il pool di identità.

  8. Per la policy di accesso del Dominio, inserisci la seguente policy:

    {  "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: sostituisci account-id con l'ID del tuo account AWS e identitypool-role con il nome del ruolo del tuo pool di identità. Sostituisci domain-name con il tuo dominio del Servizio OpenSearch e region con la Regione AWS del tuo dominio.

Configura il proxy NGINX

Nota: le seguenti impostazioni si applicano a un'Amazon Machine Image (AMI) su Amazon Linux 2023. Se utilizzi un'AMI diversa, potrebbe essere necessario modificare le impostazioni.

Completa i seguenti passaggi:

  1. Avvia un'istanza EC2 nella sottorete pubblica del VPC in cui si trova il dominio del Servizio OpenSearch. L'istanza deve utilizzare lo stesso gruppo di sicurezza del dominio.

  2. (Facoltativo) Se non utilizzi un ambiente di test, assegna un indirizzo IP elastico da associare all'istanza EC2.

  3. (Facoltativo) Se non utilizzi un ambiente di test, configura il DNS per risolvere le richieste all'indirizzo IP elastico. Per ulteriori informazioni sulla risoluzione delle richieste con Amazon Route 53, consulta Configurazione di Amazon Route 53 per instradare il traffico verso un'istanza Amazon EC2.

  4. Esegui questo comando per connetterti all'istanza e installare NGINX:

    sudo yum updatesudo yum install nginx -y
  5. Ottieni un certificato SSL da un'autorità di certificazione (CA).
    Nota: se utilizzi un ambiente di test, genera invece un certificato autofirmato. Nell'ambiente di produzione, è consigliabile utilizzare certificati SSL firmati da una CA di terze parti.

  6. (Facoltativo) Se utilizzi un ambiente di test con un certificato autofirmato, esegui il comando OpenSSL x509 per generare una chiave privata:

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

    Per ulteriori informazioni, consulta x509 sul sito web OpenSSL.
    Nota: il comando precedente genera cert.key, che è una chiave privata per il certificato SSL autofirmato.

  7. Accedi alla directory /etc/nginx/conf.d, quindi crea un file denominatodefault.conf.

  8. Modifica il file default.conf con i seguenti valori:
    In /etc/nginx/cert.crt, inserisci il percorso del certificato SSL.
    In /etc/nginx/cert.key, inserisci il percorso della chiave privata che hai generato per il certificato SSL.
    In my_domain_host, inserisci l'endpoint del Servizio OpenSearch.
    In my_cognito_host, inserisci il dominio del pool di utenti Cognito.
    Importante: è necessario utilizzare HTTPS.
    Se il dominio del Servizio OpenSearch di Amazon esegue il Servizio OpenSearch versione 1.0 o successiva, utilizza l'endpoint _dashboards.
    Se il dominio del Servizio OpenSearch di Amazon esegue le versioni di Elasticsearch 5.x-7.x, utilizza l'endpoint _plugin/kibana.

    Nota: il valore del risolutore cambia in base alle impostazioni del VPC. Utilizza il risolutore DNS sull'indirizzo IP di base del blocco CIDR primario più due. Ad esempio, se crei un VPC con il blocco CIDR 10.0.0.0/24, il risolutore DNS si trova in 10.0.0.2.

    Esempio di file 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. (Facoltativo) Per assegnare my_domain_host e my_cognito_host come variabili, esegui il comando 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

    Nota: se esegui il comando precedente, non devi sostituire my_domain_host e my_cognito_host nel file /etc/nginx/conf.d/default.conf.

  10. Esegui questo comando per attivare e avviare NGINX:

sudo systemctl enable nginx && sudo systemctl start nginx

Accedi a OpenSearch Dashboards

Completa i seguenti passaggi:

  1. Utilizza il browser per aprire l'indirizzo IP di NGINX o il nome DNS che ti reindirizza alla pagina di accesso di Cognito.
  2. Inserisci il nome utente e la password temporanea per accedere a OpenSearch Dashboards.
  3. Quando richiesto, cambia la password e accedi nuovamente.
AWS UFFICIALEAggiornata 7 mesi fa