Skip to content

Como faço para usar um proxy NGINX para acessar os painéis do OpenSearch com a autenticação do Amazon Cognito de fora de uma VPC?

7 minuto de leitura
0

Meu domínio do Amazon OpenSearch Service está em uma nuvem privada virtual (VPC). Quero usar um proxy NGINX para acessar os painéis do OpenSearch com a autenticação do Amazon Cognito de fora da VPC.

Breve descrição

Use o NGINX para configurar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) como um servidor de proxy. Em seguida, o servidor de proxy encaminha as solicitações do navegador para o Amazon Cognito e o OpenSearch Dashboards.

Observação: a resolução a seguir funciona somente para usuários nativos do Amazon Cognito.

Também é possível usar um túnel SSH ou uma VPN cliente para acessar os painéis do OpenSearch de fora de uma VPC com a autenticação do Amazon Cognito. Para obter mais informações, consulte Como posso usar a autenticação do Amazon Cognito para acessar painéis do OpenSearch de fora de uma VPC?

Resolução

Importante: quando você restringe o acesso aos usuários em sua VPC, seu domínio do OpenSearch Service fica mais seguro. Antes de continuar, certifique-se de que essa resolução esteja alinhada aos requisitos de segurança da sua organização.

Crie um grupo de usuários e um banco de identidades do Amazon Cognito

Conclua as etapas a seguir:

  1. Crie um grupo de usuários do Amazon Cognito. Defina as seguintes configurações:
    Em Tipo de aplicação, escolha Aplicativo web tradicional.
    Em Nomear sua aplicação, insira um nome de aplicação personalizado ou mantenha o nome padrão.
    Em Opções para identificadores de login, escolha Nome de usuário.
    Em Atributos obrigatórios para inscrição, escolha E-mail.

  2. Abra o console do Amazon Cognito.

  3. No painel de navegação, escolha Grupos de usuários.

  4. Selecione seu Grupo de usuários e, em seguida, defina as seguintes configurações: 
    No painel de navegação, em Branding, escolha Login gerenciado.
    Para Domínios com identidade visual de login gerenciada, escolha Atualizar versão.
    Para a versão Branding, escolha Hosted UI (clássica).

  5. Configure seus usuários e grupos.

  6. Crie um banco de identidades do Amazon Cognito. Defina as seguintes configurações:
    Para Acesso do usuário, escolha Acesso autenticado.
    Para Fontes de identidade autenticadas, insira o grupo de usuários do Amazon Cognito.
    Para o perfil do IAM, escolha Criar um novo perfil do IAM e, em seguida, insira um nome de função.
    Para detalhes do grupo de usuários, selecione o ID do grupo de usuários e escolha ID do cliente da aplicação.
    Para configurações de função, escolha Usar perfil autenticado padrão.
    Para Mapeamento de reivindicações, escolha Inativo.

  7. Configure seu domínio do OpenSearch Service para usar a autenticação do Amazon Cognito. Defina as seguintes configurações:
    Em Grupo de usuários do Cognito, selecione seu grupo de usuários.
    Em Banco de identidades do Cognito, selecione seu banco de identidades.

  8. Para política de acesso ao Domínio, insira a seguinte política de acesso:

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

    Observação: substitua account-id pelo ID da sua conta da AWS e identitypool-role pelo nome do seu perfil do banco de identidades. Substitua domain-name pelo domínio do OpenSearch Service e a região pela região da AWS do seu domínio.

Configure o proxy NGINX

Observação: as configurações a seguir se aplicam a uma imagem de máquina da Amazon (AMI) no Amazon Linux 2023. Se você usa uma AMI diferente, talvez seja necessário ajustar as configurações.

Conclua as etapas a seguir:

  1. Execute uma instância do Amazon EC2 na sub-rede pública da VPC em que seu domínio do OpenSearch Service está. A instância deve usar o mesmo grupo de segurança do seu domínio.

  2. (Opcional) Se você não usa um ambiente de teste, aloque um endereço IP elástico para associar à sua instância do EC2.

  3. (Opcional) Se você não usa um ambiente de teste, configure seu DNS para resolver solicitações para o endereço IP elástico. Para obter mais informações sobre como resolver solicitações com o Amazon Route 53, consulte Configuração do Amazon Route 53 para rotear tráfego para uma instância do Amazon EC2.

  4. Para se conectar à sua instância e instalar o NGINX, execute o seguinte comando:

    sudo yum update
    sudo yum install nginx -y
  5. Para configurar o SSL para o NGINX, obtenha um certificado SSL de uma autoridade de certificação (CA).
    Observação: se você usa um ambiente de teste, gere um certificado autoassinado. É uma prática recomendada usar certificados SSL assinados por uma autoridade de certificação terceirizada somente em seu ambiente de produção.

  6. (Opcional) Se você usa um ambiente de teste com um certificado autoassinado, execute o comando OpenSSL x509 para gerar uma chave privada:

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

    Para obter mais informações, consulte x509 no site do OpenSSL.
    O comando anterior gera cert.key, que é uma chave privada para o certificado SSL autoassinado.

  7. Navegue até o diretório /etc/nginx/conf.d e, em seguida, crie um arquivo chamado default.conf.

  8. Modifique o arquivo default.conf com os seguintes valores:
    Para /etc/nginx/cert.crt, insira o caminho para seu certificado SSL.
    Para /etc/nginx/cert.key, insira o caminho para a chave privada que você gerou para o certificado SSL.
    Para my_domain_host, insira seu endpoint do OpenSearch Service.
    Para my_cognito_host, insira seu domínio do grupo de usuários do Amazon Cognito.
    Importante: Você deve usar HTTPS.
    Se o seu domínio do Amazon OpenSearch Service executa o OpenSearch Service versão 1.0 ou posterior, use o endpoint _dashboards.
    Se o seu domínio do Amazon OpenSearch Service executa as versões 5.x-7.x do Elasticsearch, use o endpoint _plugin/kibana.

    Observação: o valor do resolvedor muda com base nas suas configurações de VPC. Use o resolvedor de DNS no endereço IP base do seu bloco CIDR primário mais dois. Por exemplo, se você criar uma VPC com o bloco CIDR 10.0.0.0/24, seu resolvedor de DNS estará localizado em 10.0.0.2.

    Exemplo de arquivo 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. (Opcional) Para atribuir my_domain_host e my_cognito_host como variáveis, execute o comando sed:

    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

    Observação: se você executar o comando anterior, não precisará substituir my_domain_host e my_cognito_host no arquivo /etc/nginx/conf.d/default.conf.

  10. Para ativar e iniciar o NGINX, execute o seguinte comando:

sudo systemctl enable nginx && sudo systemctl start nginx

Abra os OpenSearch Dashboards

Conclua as etapas a seguir:

  1. Use seu navegador para abrir o endereço IP do NGINX ou o nome DNS que redireciona você para a página de login do Amazon Cognito.
  2. Digite seu nome de usuário e senha temporária para fazer login no OpenSearch Dashboards.
  3. Quando solicitado, altere sua senha e faça login novamente.
AWS OFICIALAtualizada há 4 meses