Wie verwende ich einen NGINX-Proxy, um von außerhalb einer VPC auf OpenSearch-Dashboards mit Amazon-Cognito-Authentifizierung zuzugreifen?

Lesedauer: 6 Minute
0

Meine Amazon-OpenSearch-Service-Domain befindet sich in einer Virtual Private Cloud (VPC). Ich möchte einen NGINX-Proxy verwenden, um von außerhalb der VPC auf OpenSearch-Dashboards mit Amazon-Cognito-Authentifizierung zuzugreifen.

Kurzbeschreibung

Verwende NGINX, um eine Instance von Amazon-Elastic-Compute-Cloud (Amazon EC2) als Proxyserver zu konfigurieren. Der Proxyserver leitet dann Browseranfragen an Amazon Cognito- und OpenSearch-Dashboards weiter.

Hinweis: Der folgende Lösungsvorschlag funktioniert nur bei nativen Amazon-Cognito-Benutzern.

Du kannst auch einen SSH-Tunnel oder ein Client-VPN verwenden, um von außerhalb einer VPC mit Amazon-Cognito-Authentifizierung auf OpenSearch-Dashboards zuzugreifen. Weitere Informationen findest du unter Wie kann ich mithilfe der Amazon-Cognito-Authentifizierung von außerhalb einer VPC auf OpenSearch-Dashboards zugreifen?

Lösung

Wichtig: Wenn du den Zugriff auf Benutzer in deiner VPC einschränkst, erhöhst du damit die Sicherheit deiner OpenSearch-Service-Domain. Bevor du fortfährst, vergewissere dich, dass diese Lösung den Sicherheitsanforderungen deines Unternehmens entspricht.

Erstelle einen Amazon-Cognito-Benutzerpool und einen Identitätspool

Führe die folgenden Schritte aus:

  1. Erstelle einen Amazon-Cognito-Benutzerpool. Konfiguriere folgende Einstellungen:
    Wähle als Anwendungstyp die Option Traditionelle Webanwendung aus.
    Gib unter Anwendungsnamen vergeben einen benutzerdefinierten Anwendungsnamen ein oder behalte den Standardnamen bei.
    Wähle unter Optionen für Anmeldekennungen die Option Benutzername aus.
    Wähle unter Erforderliche Attribute für die Registrierung die Option E-Mail aus.

  2. Öffne die Amazon-Cognito-Konsole.

  3. Wähle im Navigationsbereich Benutzerpools aus.

  4. Wähle deinen Benutzerpool aus und konfiguriere dann die folgenden Einstellungen: 
    Wähle im Navigationsbereich unter Branding die Option Verwaltete Anmeldung aus.
    Wähle unter Domains mit Branding für die verwaltete Anmeldung die Option Version aktualisieren aus.
    Wähle unter Branding-Version gehostetes UI (klassisch) aus.

  5. Konfiguriere deine Benutzer und Gruppen.

  6. Erstelle einen Amazon-Cognito-Identitätspool. Konfiguriere folgende Einstellungen:
    Wähle unter Benutzerzugriff die Option Authentifizierter Zugriff aus.
    Gib bei Authentifizierte Identitätsquellen Amazon-Cognito-Benutzerpool ein.
    Wähle unter IAM-Rolle die Option Neue IAM-Rolle erstellen aus und gib dann einen Rollennamen ein.
    Wähle unter Benutzerpool-Details deine Benutzerpool-ID und dann App-Client-ID aus.
    Wähle unter Rolleneinstellungen die Option Authentifizierte Standardrolle verwenden aus.
    Wählen unter Zuweisung von Ansprüchen die Option Inaktiv aus.

  7. Konfiguriere deine OpenSearch-Service-Domain für die Verwendung der Amazon-Cognito-Authentifizierung. Konfiguriere folgende Einstellungen:
    Wähle unter Cognito-Benutzerpool deinen Benutzerpool aus.
    Wähle unter Cognito-Identitätspool deinen Identitätspool aus.

  8. Gib unter Domain-Zugriffsrichtlinie die folgende Zugriffsrichtlinie ein:

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

    Hinweis: Ersetze account-id durch deine AWS-Konto-ID und identitypool-role durch den Namen deiner Identitätspool-Rolle. Ersetze domain-name durch deine OpenSearch-Service-Domain und region durch die AWS-Region deiner Domain.

Konfiguriere den NGINX-Proxy

Hinweis: Die folgenden Einstellungen gelten für ein Amazon Machine Image (AMI) auf Amazon Linux 2023. Wenn du ein anderes AMI verwendest, musst du möglicherweise die Einstellungen anpassen.

Führe die folgenden Schritte aus:

  1. Starte eine Amazon-EC2-Instance im öffentlichen Subnetz der VPC, in der sich deine OpenSearch-Service-Domain befindet. Die Instance muss dieselbe Sicherheitsgruppe wie deine Domain verwenden.

  2. (Optional) Wenn du keine Testumgebung verwendest, weise deiner EC2-Instance eine Elastic-IP-Adresse zu.

  3. (Optional) Wenn du keine Testumgebung verwendest, konfiguriere deinen DNS so, dass Anfragen an die Elastic-IP-Adresse aufgelöst werden. Weitere Informationen zum Auflösen von Anfragen mit Amazon Route 53 findest du unter Konfigurieren von Route 53, um den Datenverkehr an eine EC2-Instance weiterzuleiten.

  4. Führe den folgenden Befehl aus, um eine Verbindung zu deiner Instance herzustellen und NGINX zu installieren:

    sudo yum update
    sudo yum install nginx -y
  5. Besorge dir ein SSL-Zertifikat von einer Zertifizierungsstelle (CA), um für NGINX SSL zu konfigurieren.
    **Hinweis:**Wenn du eine Testumgebung verwenden, generiere stattdessen ein selbstsigniertes Zertifikat. Es hat sich bewährt, SSL-Zertifikate, die von einer Drittanbieter-Zertifizierungsstelle signiert wurden, nur in deiner Produktionsumgebung zu verwenden.

  6. (Optional) Wenn du eine Testumgebung mit einem selbstsignierten Zertifikat verwendest, führe den Befehl OpenSSL x509 aus, um einen privaten Schlüssel zu generieren:

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

    Weitere Informationen findest du unter x509 auf der OpenSSL-Website.
    Der vorhergehende Befehl generiert cert.key, einen privaten Schlüssel für das selbstsignierte SSL-Zertifikat.

  7. Navigiere zum Verzeichnis /etc/nginx/conf.d und erstelle dann eine Datei mit dem Namen default.conf.

  8. Ändere die Datei default.conf mit den folgenden Werten:
    Gib unter /etc/nginx/cert.crt den Pfad zu deinem SSL-Zertifikat ein.
    Gib unter /etc/nginx/cert.key den Pfad zu dem privaten Schlüssel ein, den du für das SSL-Zertifikat generiert hast.
    Gib unter my_domain_host deinen OpenSearch-Service-Endpunkt ein.
    Gib unter my_cognito_host deine Amazon-Cognito-Benutzerpool-Domain ein.
    Wichtig: Du musst HTTPS verwenden.
    Wenn auf deiner Amazon-OpenSearch-Service-Domain OpenSearch-Service-Version 1.0 oder später ausgeführt wird, verwende den Endpunkt _dashboards.
    Wenn auf deiner Amazon-OpenSearch-Service-Domain die Elasticsearch-Versionen 5.x-7.x ausgeführt werden, verwende den Endpunkt _plugin/kibana.

    Hinweis: Der Resolver-Wert ändert sich je nach deinen VPC-Einstellungen. Verwende den DNS-Resolver an der Basis-IP-Adresse deines primären CIDR-Blocks plus zwei. Wenn du beispielsweise eine VPC mit dem CIDR-Block 10.0.0.0/24 erstellst, befindet sich dein DNS-Resolver unter 10.0.0.2.

    Beispiel für eine default.conf-Datei:

    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. (Optional) Um my_domain_host und my_cognito_host als Variablen zuzuweisen, führe den Befehl sed aus:

    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

    Hinweis: Wenn du den vorherigen Befehl ausführst, musst du my_domain_host und my_cognito_host in der Datei /etc/nginx/conf.d/default.conf nicht ersetzen.

  10. Führe den folgenden Befehl aus, um NGINX zu aktivieren und zu starten:

sudo systemctl enable nginx && sudo systemctl start nginx

Greife auf die OpenSearch-Dashboards zu

Führe die folgenden Schritte aus:

  1. Öffne in deinem Browser die NGINX-IP-Adresse oder den DNS-Namen, der dich zur Amazon-Cognito-Anmeldeseite weiterleitet.
  2. Gib deinen Benutzernamen und dein temporäres Passwort ein, um dich bei OpenSearch-Dashboards anzumelden.
  3. Wenn du dazu aufgefordert wirst, ändere dein Passwort und melde dich erneut an.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten