Comment puis-je utiliser un tunnel SSH pour accéder à OpenSearch Dashboards depuis l'extérieur d'un VPC qui emploie l'authentification Amazon Cognito ?

Dernière mise à jour : 14/12/2022

Mon cluster Amazon OpenSearch Service se trouve dans un cloud privé virtuel (VPC). Je souhaite utiliser un tunnel SSH pour accéder à OpenSearch Dashboards depuis l'extérieur du VPC qui utilise l'authentification Amazon Cognito.

Brève description

Par défaut, Amazon Cognito limite l'accès à OpenSearch Dashboards aux utilisateurs d'AWS Identity and Access Management (IAM) dans le VPC. Vous accédez à un domaine Amazon OpenSearch Service depuis un autre VPC en configurant point de terminaison d’un VPC géré par OpenSearch Service (alimenté par AWS PrivateLink). Vous pouvez accéder à OpenSearch Dashboards depuis l'extérieur du VPC à l'aide d'un tunnel SSH.

Important : vérifiez que l'accès à OpenSearch Dashboards depuis l'extérieur du VPC est conforme aux exigences de sécurité de votre organisation.

Pour accéder à Dashboards depuis l'extérieur du VPC à l'aide d'un tunnel SSH :

1.    Créez un groupe d'utilisateurs Amazon Cognito et un groupe d'identités.

2.    Créez une instance Amazon Elastic Compute Cloud (Amazon EC2) dans un sous-réseau public. Ce sous-réseau doit se trouver dans le même VPC que votre domaine OpenSearch Service.

3.    Utilisez un module de navigateur, tel que FoxyProxy, pour configurer un proxy SOCKS.

4.    Créez un tunnel SSH depuis votre ordinateur local jusqu'à l'instance EC2.

Remarque : vous pouvez également utiliser un proxy NGINX ou un VPN client pour accéder à Dashboards depuis l'extérieur d'un VPC avec l'authentification Amazon Cognito. Pour plus d'informations, consultez Comment puis-je accéder à OpenSearch Dashboards depuis l'extérieur d'un VPC à l'aide de l'authentification Amazon Cognito ?

5.    (Facultatif) Si le contrôle d'accès sélectif (FGAC) est activé, ajoutez un rôle authentifié Amazon Cognito.

Solution

Créez un groupe d'utilisateurs Amazon Cognito et un groupe d'identités

1.    Créez un groupe d'utilisateurs Amazon Cognito.

2.    Configurez un domaine de groupe d'utilisateurs hébergé.

3.    Dans le volet de navigation de la console Amazon Cognito, sélectionnez Utilisateurs et groupes.

4.    Sélectionnez Créer un utilisateur, puis complétez les champs. Assurez-vous de saisir une adresse e-mail. Ensuite, cochez la case Marquer l'adresse e-mail comme vérifiée.

5.    Sélectionnez l'onglet Groupes, puis Créer un groupe. Pour Priorité, saisissez 0. Pour plus d'informations, consultez la section Création d'un nouveau groupe dans l'AWS Management Console.

6.    Ouvrez à nouveau la console Amazon Cognito.

7.    Sélectionnez Manage Identity Pools (Gérer des groupes d'identités), puis Créer un groupe d'identités.

8.    Saisissez un nom pour votre groupe d'identités, cochez la case Activer l'accès aux identités non authentifiées. Ensuite, choisissez Créer un groupe.

9.    Lorsque vous êtes invité à accéder à vos ressources AWS, choisissez Autoriser. Cela crée les deux rôles par défaut associés à votre pool d'identité - un pour les utilisateurs non authentifiés et un pour les utilisateurs authentifiés.

10.    Configurez votre domaine OpenSearch Service pour qu'il utilise l'authentification Amazon Cognito pour OpenSearch Dashboards :
Pour Groupe d'utilisateurs Cognito, choisissez le groupe d'utilisateurs que vous avez créé à l'étape 1.
Pour Groupe d'identités Cognito, sélectionnez le groupe d'identités que vous avez créé à l'étape 8.

11.    Configurez votre domaine OpenSearch Service pour qu'il utilise une stratégie d'accès similaire à la suivante. Remplacez les valeurs suivantes :
account-id par votre ID de compte AWS
nom-d'identité par le nom de votre groupe d'identités Amazon Cognito
nom-de-domaine avec le nom de votre domaine
Région avec la région de résidence de votre domaine, telle que 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/*"
    }
  ]
}

Par exemple, la stratégie d'accès suivante utilise les valeurs ci-dessous :

ID de compte AWS : 111122223333
Nom du groupe d'identités Amazon Cognito : MyIdentityPool
nom de domaine : MyDomain
Région : 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/*"
    }
  ]
}

Créer une instance EC2 et configurer des règles de groupe de sécurité

1.    Lancez une instance EC2 dans un sous-réseau public du VPC dans lequel se trouve votre domaine OpenSearch Service. Sur la page Configure Instance Details (Configurer les détails de l'instance), assurez-vous que la fonction Auto-assign Public IP (Attribuer automatiquement l'adresse IP publique) est définie sur Enable (Activer).
Remarque : dans les étapes suivantes, l'instance EC2 est appelée tunnel_ec2.

2.    Ajoutez des règles entrantes au groupe de sécurité associé à l'instance tunnel_ec2. Ces règles doivent autoriser le trafic vers les ports 8157 et 22 à partir de l'adresse IP de la machine locale à partir duquel vous accédez au tableau de bord OpenSearch Service.

3.    Ajoutez une règle entrante au groupe de sécurité associé au domaine OpenSearch Service. Cette règle doit autoriser le trafic à partir de l'adresse IP privée de l'instance tunnel_ec2.

Configurer le proxy SOCKS

1.    Ajoutez la norme FoxyProxy à Google Chrome.

2.    Ouvrez FoxyProxy, puis sélectionnez Options.

3.    Dans la liste déroulante Proxy mode (Mode de proxy), sélectionnez Use proxies based on their pre-defined patterns and priorities (Utiliser des proxys en fonction de leurs modèles prédéfinis et de leurs priorités).

4.    Sélectionnez Add New Proxy (Ajouter un nouveau proxy).

5.    Sélectionnez l'onglet Général et saisissez un nom de proxy, tel que « Dashboards Proxy ».

6.    Dans l'onglet Proxy Details (Détails du proxy), sélectionnez Manual Proxy Configuration (Configuration manuelle de proxy), puis complétez les champs suivants :
       Pour Host or IP Address (Hôte ou adresse IP), saisissez localhost.
       Pour Port, saisissez 8157.
       Sélectionnez SOCKS proxy (Proxy SOCKS).
       Sélectionnez SOCKS v5.

7.    Sélectionnez l'onglet URL Patterns (Modèles d'URL).

8.    Sélectionnez Add new pattern (Ajouter un nouveau modèle), puis remplissez les champs suivants :
       Dans Pattern Name, entrez un nom tel que « VPC Endpoint ». «
       Pour URL pattern (Modèle d'URL), saisissez le point de terminaison d'un VPC pour Dashboards. Assurez-vous que l'accès à l'URL est autorisé. Assurez-vous que Wildcards (Caractères génériques) est sélectionné.

9.     Choisissez Save (Enregistrer).

Créer le tunnel SSH

1.    Exécutez la commande à partir de la machine locale que vous allez utiliser pour accéder au tableau de bord Dashboards. Remplacez les éléments suivants :
       mykeypair.pem : le nom du fichier .pem correspondant à la paire de clés que vous avez spécifiée lorsque vous avez lancé l'instance EC2 tunnel_ec2.
       public_dns_name : le DNS public de votre instance EC2 tunnel_ec2. Pour en savoir plus, consultez Afficher les noms d'hôtes DNS pour votre instance EC2.

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

2.    Saisissez le point de terminaison de Dashboards dans votre navigateur. La page de connexion à Amazon Cognito pour Dashboards s'affiche.

(Facultatif) Si la fonction FGAC est active, ajoutez un rôle authentifié Amazon Cognito

Si le contrôle d'accès précis (FGAC) est activé sur votre cluster OpenSearch Service, vous risquez de rencontrer une « erreur de rôle manquant ». Pour résoudre l'erreur « rôle manquant », suivez les étapes suivantes :

1.    Ouvrez la console OpenSearch Service.

2.    Dans le volet de navigation, sous Clusters gérés, choisissezDomaines.

3.    Sélectionnez Actions.

4.    Choisissez Modify master user (Modifier l'utilisateur maître).

5.    Choisissez Set IAM ARN as your master user (Définir l'ARN IAM comme utilisateur maître).

6.    Dans le champ IAM ARN, ajoutez le rôle ARN authentifié Amazon Cognito.

7.    Sélectionnez Envoyer.

Pour plus d'informations sur le contrôle précis des accès, consultez Didacticiel : Utilisateur maître IAM et Amazon Cognito.