In che modo posso utilizzare un proxy NGINX per accedere ai pannelli di controllo OpenSearch dall'esterno di un VPC che utilizza l'autenticazione di Amazon Cognito?

Ultimo aggiornamento: 16/09/2022

Il mio cluster del servizio OpenSearch di Amazon si trova in un cloud privato virtuale (VPC). Voglio utilizzare un proxy NGINX per accedere ai pannelli di controllo OpenSearch dall'esterno di un VPC con l'autenticazione di Amazon Cognito. In che modo posso farlo?

Breve descrizione

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

Nota: questa soluzione funziona solo per gli utenti nativi di Amazon Cognito.

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 In che modo è possibile accedere ai pannelli di controllo OpenSearch dall'esterno di un VPC utilizzando l'autenticazione di Amazon Cognito?

Nota: OpenSearch Dashboards è il successore di Kibana.

Risoluzione

Importante: il dominio OpenSearch Services è più sicuro quando si limita l'accesso agli utenti nel VPC. Prima di continuare, assicurati che questa procedura non violi i requisiti di sicurezza della tua organizzazione.

1.    Crea un gruppo di utenti Amazon Cognito.

2.    Configura un dominio del gruppo di utenti con hosting.

3.    Nel pannello di navigazione della console Amazon Cognito, scegli Utenti e gruppi.

4.    Scegli Crea utente e quindi completa i campi. Assicurati di inserire un indirizzo e-mail e seleziona la casella di controllo Contrassegna e-mail come verificata.

5.    Scegliere la schedaGruppi e quindi scegliere Crea gruppo. PerPrecedenza, immettere0. Per ulteriori informazioni, consulta Creazione di un nuovo gruppo nella Console di gestione AWS.

6.    Apri di nuovo la console Amazon Cognito.

7.    Scegli Gestisci gruppi di identità, quindi scegli Crea nuovo gruppo di identità.

8.    Immetti un nome per il gruppo di identità, seleziona la casella di controllo Abilita l'accesso alle identità non autenticate, quindi scegli Crea gruppo.

9.    Quando ti viene richiesto di accedere alle tue risorse AWS, scegli Allow (Consenti) per creare i due ruoli predefiniti associati al tuo gruppo di identità. Crea un ruolo predefinito per gli utenti non autenticati e poi crea l'altro ruolo predefinito per gli utenti autenticati.

10.    Configura il tuo dominio OpenSearch Services per utilizzare l'autenticazione Amazon Cognito per i pannelli di controllo OpenSearch: per pool di utenti di Cognito, scegli il pool di utenti che hai creato. Per pool di identità di Cognito, scegli il pool di identità che hai creato. Per ulteriori informazioni, consulta Introduzione al servizio OpenSearch di Amazon: utilizzo di Amazon Cognito per il controllo dell'accesso ai pannelli di controllo OpenSearch .

11.    Configura la policy di accesso in modo che si tratti di una policy basata sulle risorse come la seguente:

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

È necessario aggiornare questi valori:
account-id: il tuo ID account AWS
identity-name: il nome del grupo di identità Amazon Cognito
domain-Name: il nome del dominio di OpenSearch Services
region: la regione in cui si trova il tuo dominio OpenSearch Service, come us-east-1

Nota: le impostazioni in questo esempio si applicano alle AMI Amazon Linux 2. Se utilizzi un'AMI diversa, potrebbe essere necessario modificare le impostazioni specifiche.

12.    Avvia un'istanza EC2 in una sottorete pubblica dello stesso VPC del dominio OpenSearch Services. Assicurati che l'istanza utilizzi lo stesso gruppo di sicurezza del tuo dominio.

13.    (Facoltativo) Se non utilizzi un ambiente di test, allocare un indirizzo IP elastico da associare all'istanza creata. Per ulteriori informazioni sull'allocazione di indirizzi IP elastici, consulta Utilizzo degli indirizzi IP elastici.

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

15.    Connettiti alla tua istanza e poi installa NGINX.

Per le istanze avviate con un'AMI Amazon Linux 2, utilizza il seguente comando:

$ sudo amazon-linux-extras install nginx1

16.    Ottieni un certificato SSL da un'autorità di certificazione (CA) per configurare SSL per NGINX.

Nota: se utilizzi un ambiente di test, genera invece un certificato autofirmato. Tieni presente che è consigliabile utilizzare certificati SSL firmati da un'autorità di certificazione di terze parti solo nell'ambiente di produzione.

17.    (Facoltativo) Se si utilizza un ambiente di test con un certificato autofirmato, utilizzare il comandoOpenSSL 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

La sintassi di questo comando genera cert.key, una chiave privata per il certificato SSL autofirmato.

18.    Passa alla directory /etc/nginx/conf.d, quindi crea un file chiamato default.conf. Modifica il file con i seguenti valori: /etc/nginx/cert.crt: il percorso del certificato SSL /etc/nginx/cert.key: il percorso della chiave privata generata per il certificato SSL my_domain_host: l'endpoint OpenSearch Services my_cognito_host: il dominio del pool di utenti Amazon Cognito (configurato nella Fase 2)

È possibile utilizzare il comando sed per assegnare my_cognito_host e my_domain_host come variabili, invece di sostituirle direttamente nel file default.conf. Inoltre, assicurati di utilizzare HTTPS o potresti riscontrare un errore.

In questo esempio, tieni presente quanto segue:

  • Se il tuo dominio Amazon OpenSearch Service esegue OpenSearch Service versione 1.0+, utilizza l'endpoint _dashboards.
  • Se il tuo dominio di servizio OpenSearch di Amazon esegue Elasticsearch versione 5.x-7.x, utilizza l'endpoint _plugin/kibana.

Importante: il parametro del resolver cambia in base alle impostazioni del VPC. Il resolver DNS si trova sull'IP di base del blocco CIDR principale più due. Ad esempio, se si crea un VPC con il blocco CIDR 10.0.0.0/24, il resolver DNS si trova in 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.    (Facoltativo) Usa il comando sed per assegnare le variabili my_domain_host e 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: non è necessario sostituiremy_domain_host e my_cognito_host nel file /etc/nginx/conf.d/default.conf.

20.    Usa questo comando per riavviare NGINX.

$ sudo systemctl restart nginx.service

21.    Utilizzare il browser per accedere all'IP NGINX o al nome DNS. Verrai reindirizzato alla pagina di accesso di Amazon Cognito.

22.    Per accedere alle dashboard, inserisci il tuo nome utente e la password temporanea. Quindi, cambia la password quando richiesto e accedi di nuovo.