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

Data da última atualização: 14/12/2022

Meu cluster do Amazon OpenSearch Service está em uma nuvem privada virtual (VPC). Quero usar um túnel SSH para acessar o OpenSearch Dashboards de 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. Você acessa um domínio do Amazon OpenSearch Service de outra VPC configurando um endpoint de VPC gerenciado pelo OpenSearch Service (com a tecnologia do AWS PrivateLink). Você também pode acessar o OpenSearch Dashboards externamente à VPC usando um túnel SSH.

Importante: certifique-se de que o acesso ao OpenSearch Dashboards externamente à VPC esteja em conformidade com os requisitos de segurança da sua organização.

Acessar painéis de fora da VPC usando um túnel SSH:

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. Essa sub-rede deve estar na mesma VPC do seu domínio do OpenSearch Service.

3.    Use um complemento de 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 detalhado (FGAC) estiver ativado, 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 Criação de um novo grupo no Console de Gerenciamento da AWS.

6.    Abra o console do Amazon Cognito novamente.

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

8.    Insira um nome para o grupo de identidades e marque a caixa de seleção para habilitar o acesso a identidades não autenticadas. Em seguida, escolha Create Pool (Criar grupo).

9.    Quando for solicitado a acessar seus recursos da AWS, escolha Allow (Permitir). Isso cria 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 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 (Região) pela região onde reside o seu domínio, 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. Essas regras devem permitir o tráfego para as portas 8157 e 22 a partir do endereço IP da máquina a partir da qual você acessa 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 “Dashboards Proxy”.

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 como “Endpoint de VPC”.
       Em URL pattern (Padrão de URL), insira o endpoint da VPC para o Dashboards. Certifique-se de que o acesso ao URL seja permitido. Certifique-se de que a opção Wildcards (Curingas) esteja selecionada.

9.     Escolha Save (Salvar).

Crie o túnel SSH

1.    Execute esse comando na máquina local que você usa para acessar o painel Dashboards. Substitua esses itens:
       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 do EC2 tunnel_ec2. Para obter mais informações, consulte 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 FGAC estiver ativado, adicione uma função autenticada do Amazon Cognito

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

1.    Faça login no console do OpenSearch Service.

2.    No painel de navegação, em Managed clusters (Clusters gerenciados), escolha Domains (Domínios).

3.    Selecione Actions (Ações).

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

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

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

7.    Escolha Submit (Enviar).

Para obter mais informações sobre controle de acesso refinado, consulte Tutorial: usuário primário do IAM e do Amazon Cognito.