Como posso usar um túnel SSH para acessar o OpenSearch Dashboards fora de uma VPC com autenticação do Amazon Cognito?

Última atualização: 05-08-2021

Meu cluster do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service) está em uma nuvem privada virtual (VPC). Quero usar um túnel SSH para acessar o OpenSearch Dashboards fora de uma VPC com autenticação do Amazon Cognito.

Breve descrição

Por padrão, o Amazon Cognito restringe o acesso do OpenSearch Dashboards aos usuários do AWS Identity and Access Management (IAM) na VPC. No entanto, você pode acessar o OpenSearch Dashboards fora da VPC usando um túnel SSH.

Importante: certifique-se de que acessar o OpenSearch Dashboards (sucessor do Kibana, uma ferramenta de terceiros) fora da VPC esteja em conformidade com os requisitos de segurança da sua organização.

Para acessar o Dashboards fora da VPC usando um túnel SSH, execute as etapas a seguir:

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

2.    Crie uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em uma sub-rede pública na mesma VPC em que o seu domínio do OpenSearch Service está.

3.    Use um complemento do navegador, como o FoxyProxy, para configurar um proxy SOCKS.

4.    Crie um túnel SSH de sua máquina local para a instância do EC2.

Observação: você também pode usar um proxy NGINX ou cliente VPN para acessar o Dashboards fora de uma VPC com autenticação do Amazon Cognito. Para obter mais informações, consulte Como posso acessar o OpenSearch Dashboards fora de uma VPC usando a autenticação do Amazon Cognito?

5.    (Opcional) Se o controle de acesso refinado (FGAC) estiver habilitado, adicione uma função autenticada do Amazon Cognito.

Resolução

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

1.    Crie um grupo de usuários do Amazon Cognito.

2.    Configure um domínio de grupo de usuários hospedado.

3.    No painel de navegação do console do Amazon Cognito, escolha Users and groups (Usuários e grupos).

4.    Escolha Create user (Criar usuário) e, em seguida, preencha os campos. Certifique-se de inserir um endereço de e-mail. Em seguida, selecione a caixa de seleção Mark email as verified (Marcar e-mail como verificado).

5.    Escolha a guia Groups (Grupos) e, em seguida, Create group (Criar grupo). Em Precedence (Precedência), insira 0. Para obter mais informações, consulte Creating a new group in the AWS Management Console.

6.    Abra o console do Amazon Cognito novamente.

7.    Escolha Manage Identity Pools (Gerenciar grupos de identidades) e, em seguida, Create new identity pool (Criar novo grupo de identidades).

8.    Insira um nome para o seu grupo de identidades, marque a caixa de seleção para Enable access to unauthenticated identities (Habilitar acesso a identidades não autenticadas) e, em seguida, escolha Create Pool (Criar grupo).

9.    Ao receber a solicitação para acessar seus recursos da AWS, escolha Allow (Permitir) para criar as duas funções padrão associadas ao seu grupo de identidades: uma para usuários não autenticados e outra para usuários autenticados.

10.    Configure o seu domínio do OpenSearch Service para usar a autenticação do Amazon Cognito para o OpenSearch Dashboards.
Em Cognito User Pool (Grupo de usuários do Cognito), escolha o grupo de usuários que você criou na etapa 1.
Em Cognito Identity Pool (Grupo de identidades do Cognito), escolha o grupo de identidades que você criou na etapa 8.

11.    Configure o seu domínio do OpenSearch Service para usar uma política de acesso semelhante à seguinte. Substitua os valores a seguir:
account-id pelo seu ID da conta da AWS
identity-name pelo nome do seu grupo de identidades do Amazon Cognito
domain-name pelo nome do seu domínio
Region pela região em que o seu domínio está, como us-east-1

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::account-id:assumed-role/Cognito_identity-nameAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:Region:account-id:domain/domain-name/*"
    }
  ]
}

Por exemplo, a política de acesso a seguir usa estes valores:

ID da conta da AWS: 111122223333
Nome do grupo de identidades do Amazon Cognito: MyIdentityPool
nome de domínio: MyDomain
Região: us-east-1

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::111122223333:assumed-role/Cognito_MyIdentityPoolAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/MyDomain/*"
    }
  ]
}

Crie uma instância do EC2 e configure regras de grupo de segurança

1.    Inicie uma instância do EC2 em uma sub-rede pública da VPC em que o seu domínio do OpenSearch Service se localiza. Na página Configure Instance Details (Configurar detalhes de instâncias), verifique se a Auto-assign Public IP (Atribuição automática de IP público) está definida para Enable (Habilitar).
Observação: nas etapas a seguir, a instância do EC2 é chamada de tunnel_ec2.

2.    Adicione regras de entrada ao grupo de segurança associado à instância tunnel_ec2. Tais regras devem permitir o tráfego para as portas 8157 e 22 pelo endereço IP da máquina local que você usará para acessar o painel do OpenSearch Service.

3.    Adicione uma regra de entrada ao grupo de segurança associado ao domínio do OpenSearch Service. Essa regra deve permitir o tráfego do endereço IP privado da instância tunnel_ec2.

Configure o proxy SOCKS

1.     Adicione a FoxyProxy Standard ao Google Chrome.

2.    Abra a FoxyProxy e escolha Options (Opções).

3.    Na lista suspensa Proxy mode (Modo de proxy), escolha Use proxies based on their pre-defined patterns and priorities (Usar proxies com base em seus padrões e prioridades predefinidos).

4.    Escolha Add New Proxy (Adicionar novo proxy).

5.    Selecione a guia General (Geral) e insira um Proxy Name (Nome de proxy), como “Proxy de painéis”.

6.    Na guia Proxy Details (Detalhes de proxy), verifique se Manual Proxy Configuration (Configuração manual de proxy) está selecionado e, em seguida, preencha os seguintes campos:
Em Host or IP Address (Host ou endereço IP), insira localhost.
Em Port (Porta), insira 8157.
Selecione SOCKS proxy (Proxy SOCKS)
Selecione SOCKS v5 (v5 SOCKS).

7.    Escolha a guia URL Patterns (Padrões de URL).

8.    Escolha Add new pattern (Adicionar novo padrão) e, em seguida, preencha os seguintes campos:
Em Pattern Name (Nome do padrão), insira um nome que faça sentido para você, como “endpoint da VPC”.
Em URL pattern (Padrão de URL), insira o endpoint da VPC para o Dashboards. Certifique-se de que a opção Whitelist URLs (URLs da lista branca) esteja selecionada. Certifique-se de que a opção Wildcards (Curingas) esteja selecionada.

9.     Escolha Save (Salvar).

Crie o túnel SSH

1.    Execute o seguinte comando na máquina local que você usará para acessar o painel do Dashboards. Substitua o seguinte:
mykeypair.pem: o nome do arquivo .pem para o par de chaves que você especificou ao iniciar a instância tunnel_ec2 do EC2.
public_dns_name: o DNS público da sua instância tunnel_ec2 do EC2. Para obter mais informações, consulte Como visualizar nomes de host do DNS para a sua instância do EC2.

ssh -i "mykeypair.pem"  ec2-user@public_dns_name -ND 8157

2.    Insira o endpoint do Dashboards em seu navegador. A página de login do Amazon Cognito para o Dashboards é exibida.

(Opcional) se o controle de acesso refinado (FGAC) estiver habilitado, adicione uma função autenticada do Amazon Cognito

Se o controle de acesso refinado (FGAC) estiver habilitado no seu cluster do OpenSearch Service, você poderá receber um erro de “função ausente”. Para solucionar o erro de “função ausente”, execute as seguintes etapas:

1.    Acesse a sua conta no Console de Gerenciamento da AWS.

2.    Em Analytics (Análise), escolha Amazon OpenSearch Service.

3.    Escolha Actions (Ações).

4.    Escolha Modify master user (Modificar o usuário primário).

5.    Escolha Set IAM ARN (Definir ARN do IAM) como o seu usuário primário.

6.    No campo IAM ARN (ARN do IAM), adicione a função do ARN autenticado do Amazon Cognito.

7.    Escolha Send (Enviar).

Para obter mais informações sobre o controle de acesso refinado, consulte Tutorial: IAM master user and Amazon Cognito.