Comment puis-je utiliser un tunnel SSH pour accéder à Kibana depuis l'extérieur d'un VPC à l'aide de l'authentification Amazon Cognito ?

Date de la dernière mise à jour : 27/08/2020

Mon cluster Amazon Elasticsearch Service se trouve dans un Virtual Private Cloud (VPC). Je souhaite utiliser un tunnel SSH pour accéder à Kibana depuis l'extérieur d'un VPC à l'aide de l'authentification Amazon Cognito.

Brève description

Par défaut, Amazon Cognito limite l'accès à Kibana aux utilisateurs d'AWS Identity and Access Management (IAM) dans le VPC. Cependant, vous pouvez accéder à Kibana depuis l'extérieur du VPC à l'aide d'un tunnel SSH.

Important : Assurez-vous que lorsque vous accédez à Kibana (un outil tiers) depuis l'extérieur du VPC, celui-ci est conforme aux exigences de sécurité de votre organisation.

Pour accéder à Kibana depuis l'extérieur du VPC à l'aide d'un tunnel SSH, effectuez les opérations suivantes :

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 dans le même VPC que celui dans lequel se trouvent les domaines Elasticsearch.

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 VPN Client pour accéder à Kibana depuis l'extérieur d'un VPC à l'aide de l'authentification Amazon Cognito. Pour plus d'informations, consultez la section Comment accéder à Kibana depuis l'extérieur d'un VPC à l'aide de l'authentification Amazon Cognito ?

5.    (Facultatif) Si le contrôle d'accès précis (FGAC, « fine-grained access control ») est activé, ajoutez un rôle authentifié Amazon Cognito.

Ré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, puis sélectionnez Créer un groupe.

9.    Lorsque vous êtes invité à accéder à vos ressources AWS, sélectionnez Autoriser pour créer les deux rôles par défaut associés à votre groupe d'identités : l'un pour les utilisateurs non authentifiés et l'autre pour les utilisateurs authentifiés.

10.    Configurez votre domaine Amazon ES de manière à utiliser l'authentification Amazon Cognito pour Kibana.
Pour Groupe d'utilisateurs Cognito, sélectionnez 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 Amazon ES de manière à utiliser une stratégie d'accès similaire à ce qui suit. Remplacez les valeurs suivantes :
account-id par votre ID de compte AWS
identity-name par le nom de votre groupe d'identités Amazon Cognito
ES-name par le nom de votre domaine Amazon ES
region par la région dans laquelle se trouve votre domaine Amazon ES, par exemple 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/ES-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 Amazon ES : MyES
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/MyES/*"
    }
  ]
}

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 Elasticsearch. Sur la page Configurer les détails de l'instance, assurez-vous que la fonction Auto-assign Public IP (Attribuer automatiquement des adresses IP publiques) est définie sur 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 l'ordinateur local que vous utilisez pour accéder au tableau de bord Kibana.

3.    Ajoutez une règle entrante au groupe de sécurité associé au domaine Elasticsearch. 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, puis saisissez un nom de proxy, tel que « Proxy Kibana ».

6.    Dans l'onglet Proxy Details (Détails du proxy), veillez à sélectionner 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 :
Pour Pattern Name (Nom du modèle), saisissez un nom qui vous semble judicieux, tel que « Point de terminaison VPC ».
Pour URL Pattern (Modèle d'URL)., saisissez le point de terminaison VPC pour Kibana. Assurez-vous que Whitelist URLs (URL de liste blanche) est sélectionné. Assurez-vous que Caractères génériques est sélectionné.

9.     Sélectionnez Enregistrer.

Créer le tunnel SSH

1.    Exécutez la commande suivante à partir de l'ordinateur local que vous utilisez pour accéder au tableau de bord Kibana. Remplacez les valeurs suivantes :
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 plus d'informations, consultez la section Affichage des noms d'hôte DNS pour votre instance EC2.

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

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

(Facultatif) Si le contrôle d'accès précis (FGAC, « fine-grained access control ») est activé, ajoutez un rôle authentifié Amazon Cognito

Si le contrôle d'accès précis (FGAC) est activé sur votre cluster Elasticsearch, vous pouvez rencontrer une erreur « missing role » (« rôle manquant »). Pour résoudre l'erreur « missing role » (« rôle manquant »), effectuez les opérations suivantes :

1.    Connectez-vous à votre AWS Management Console.

2.    Sous Analytics, choisissez Elasticsearch Service.

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 d'accès précis, consultez Didacticiel: utilisateur maître IAM et Amazon Cognito.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?