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

Ultimo aggiornamento: 26-10-2021

Il mio cluster Amazon OpenSearch Service (successore di Amazon Elasticsearch Service) si trova in un virtual private cloud (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 OpenSearch Dashboards.

Puoi anche utilizzare un tunnel SSH o VPN Cliente per accedere a OpenSearch Dashboards dall'esterno di un VPC con l'autenticazione di Amazon Cognito. Per ulteriori informazioni, consulta In che modo posso utilizzare un tunnel SSH per accedere a OpenSearch Dashboards dall'esterno di un VPC con l'autenticazione di Amazon Cognito. Per ulteriori informazioni, consulta In che modo posso utilizzare un tunnel SSH per accedere a OpenSearch Dashboards dall'esterno di un VPC con 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.    ScegliCrea 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, scegliConsenti per creare i due ruoli predefiniti associati al tuo gruppo di identità. Creare un ruolo predefinito per gli utenti non autenticati e l'altro ruolo predefinito per gli utenti autenticati.

10.    Configura il tuo dominio OpenSearch Services per utilizzare l'autenticazione Amazon Cognito per OpenSearch Dashboards:
Per Cognito User Pool, scegli il gruppo di utenti che hai creato.
Per Cognito Identity Pool, scegli il gruppo di identità che hai creato.
Per ulteriori informazioni, consulta Introduzione ad Amazon OpenSearch Service: utilizzare Amazon Cognito per il controllo dell'accesso alle dashboard di 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
ES-Name: il nome del dominio di OpenSearch Services
region: la regione in cui risiede il tuo dominio OpenSearch Service, comeus-east-1

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 installa NGINX.

Per le istanze lanciate con un'AMI Amazon Linux 2, utilizzare il seguente comando:

$ sudo amazon-linux-extras install nginx1

16.    Ottenere 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. I certificati autofirmati non sono considerati attendibili dai browser e non devono essere utilizzati negli ambienti 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.    Passare alla directory /etc/nginx/conf.d, quindi creare un file chiamato default.conf. Modificate 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
$domain-endpoint: il tuo endpoint di OpenSearch Services
$cognito_host: il dominio del gruppo di utenti Amazon Cognito (configurato nel passaggio 2)

Puoi utilizzare il comandosed per assegnare $domain-endpoint e $cognito_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 Amazon OpenSearch Service esegue Elasticsearch versione 5.x-7.x, utilizza l'endpoint _plugin/kibana.
server {
    listen 443;
    server_name $host;
    rewrite ^/$ https://$host/_dashboards redirect;

    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/_dashboards;

        # Handle redirects to Cognito
        proxy_redirect https://$cognito_host 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) {
        # Forward requests to Cognito
        proxy_pass https://$cognito_host;

        # Handle redirects to Dashboards
        proxy_redirect https://$domain-endpoint https://$host;

        # Update cookie domain
        proxy_cookie_domain $cognito_host $host;
    }
}

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.

19.    (Facoltativo) Usate il comando sed per assegnare le variabili $domain-endpoint e $cognito_host:

$ sudo sed -i 's/$domain-endpoint/vpc-mydashboards-111xxx.us-east1.es.amazonaws.com/' /etc/nginx/conf.d/default.conf
$ sudo sed -i 's/$cognito_host/mydomain.auth.us-east-1.amazoncognito.com/' /etc/nginx/conf.d/default.conf

Nota: non è necessario sostituire $domain-endpoint e $cognito_host nel file /etc/nginx/conf.d/default.conf.

20.    Riavvia NGINX.

Per le istanze lanciate con un'AMI Amazon Linux, usa questo comando:

$ sudo service nginx restart

Per le istanze lanciate con un'AMI Amazon Linux 2, usa questo comando:

$ 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.