Comment puis-je accéder à un cluster Amazon Redshift privé à partir de ma machine locale ?

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

Je souhaite utiliser mon ordinateur local pour accéder à un cluster Amazon Redshift qui se trouve dans un sous-réseau privé d'un Amazon Virtual Private Cloud (VPC). Comment faire ?

Brève description

Utilisez une instance Amazon Elastic Compute Cloud (Amazon EC2) et SQL Workbench/J pour créer un tunnel SSH. Le tunnel achemine alors tout le trafic entrant depuis l'ordinateur local vers le cluster Amazon Redshift privé.

Résolution

Créer le VPC, l'instance EC2 et le cluster Amazon Redshift

1.    Créer un VPC avec des sous-réseaux publics et privés.

2.    Lancez une instance EC2 à partir d'une Amazon Machine Image (AMI) Amazon Linux 2 dans le sous-réseau public du VPC que vous avez créé à l'étape 1. Choisissez les options suivantes lors de la création de l'instance :
À l'étape 3, pour Attribuer automatiquement une adresse IP publique, sélectionnez Activer. Vous pouvez également attribuer une adresse IP Elastic à l'instance.
À l'étape 6, créez un groupe de sécurité avec une règle SSH. Pour source, choisissez Custom (Personnalisé), puis saisissez votre bloc d'adresse IP CIDR ou choisissez My IP (Mon IP).

3.    Sur la console Amazon Redshift, créez un groupe de sous-réseaux de cluster.
Pour « VPC ID » (ID de VPC), choisissez l'ID de VPC que vous avez créé à l'étape 1.
Pour « Subnet ID »(ID de sous-réseau), choisissez l'ID de sous-réseau privé.

4.    Créez un nouveau groupe de sécurité.

5.    Ajoutez une règle au groupe de sécurité nouvellement créé pour autoriser le trafic entrant à partir du groupe de sécurité de l'instance :
Pour Type, choisissez « Custom TCP » (TCP personnalisé).
Pour « Port Range » (Plage de ports), saisissez 5439 (qui est le port par défaut pour Amazon Redshift).
Pour Source, choisissez Custom (Personnalisé), puis saisissez le nom du groupe de sécurité que vous avez créé à l'étape 2.

6.    Lancez un nouveau cluster Amazon Redshift ou restaurez un cluster à partir d'un instantané. Sur la page « Additional Configuration »(Configuration supplémentaire), choisissez les options suivantes :
Pour « Choose a VPC » (Choisir un VPC), choisissez le VPC que vous avez créé à l'étape 1.
Pour « Cluster subnet group » (Groupe de sous-réseaux du cluster), choisissez le groupe que vous avez créé à l'étape 3.
Pour Accessible publiquement (Accessible publiquement), choisissez No (Non).
Pour « VPC security groups » (Groupes de sécurité du VPC), choisissez le groupe de sécurité que vous avez créé à l'étape 4.

Attendez que le cluster atteigne l'état « available » (disponible) avant de continuer.

7.    Exécutez la commande suivante pour vous connecter à l'instance EC2 à partir de votre ordinateur local. Remplacez your_key.pem et your_EC2_endpoint par vos valeurs. Pour plus d'informations, rendez-vous sur la page Connexion à votre instance Linux à l'aide de SSH.

ssh -i "your_key.pem" ec2-user@your_EC2_endpoint

8.   Exécutez la commande suivante pour installer telnet :

sudo yum install telnet

9.    Utilisez telnet pour tester la connexion à votre cluster Amazon Redshift. Dans la commande suivante, remplacez cluster-endpoint et cluster-port par vos valeurs.

telnet cluster-endpoint cluster-port

Vous pouvez également utiliser « dig » pour confirmer que votre ordinateur local peut atteindre l'adresse IP privée du cluster Amazon Redshift. Dans la commande suivante, remplacez cluster-endpoint par votre point de terminaison de cluster.

dig cluster-endpoint

Créer le tunnel

1.    Installez SQL Workbench/J sur votre machine locale.

2.    Téléchargez le dernier pilote JDBC pour Amazon Redshift.

3.    Dans SQL Workbench/J, créez un profil de connexion à l'aide du pilote JDBC que vous avez téléchargé à l'étape 2.

4.    Pour configurer la connexion SSH dans SQL Workbench/J, choisissez SSH, puis saisissez ce qui suit :
« SSH hostname » (Nom de l'hôte SSH) : l'adresse IP publique le DNS de l'instance EC2
«SSH Port » (Port SSH) : 22
«Username » (Nom d'utilisateur) : ec2-user
« Private key file » (Fichier de clé privée) : le fichier .pem que vous avez téléchargé lors de la création de l'instance EC2
« Password » (Mot de passe) : gardez ce champ vide
« Local port » (Port local) : n'importe quel port local gratuit (votre cluster Amazon Redshift utilise le port 5439 par défaut)
« DB hostname » (Nom d'hôte de la base de données) : point de terminaison du cluster (ne doit pas inclure le numéro de port ni le nom de la base de données)
« DB port » (Port de base de données) : 5439
« Rewrite JDBC URL » (Réécrire l'URL JDBC) : sélectionnez cette option

5.    Choisissez « OK » pour enregistrer les paramètres SSH.

6.    Assurez-vous que l'URL JDBC, le nom du super-utilisateur et le mot de passe sont correctement saisis.

7.    Choisissez Test pour vérifier que la connexion fonctionne. Pour plus d'informations, consultez Connexion via un tunnel SSH dans la documentation SQL Workbench/J.

(Facultatif) Modifiez la connexion d'un utilisateur AWS Identity and Access Management (IAM)

Pour vous connecter au cluster Amazon Redshift en tant qu'utilisateur IAM, modifiez le profil de connexion que vous avez créé à l'étape précédente :

1.    Vérifiez que l'utilisateur IAM dispose d'une stratégie qui autorise les actions GetClusterCredentials, JoinGroup et CreateClusterUser Amazon Redshift pour les ressources dbgroup, dbuser et dbname. Remplacez ces valeurs dans l'exemple suivant :
us-west-2 : la région dans laquelle se trouve votre cluster
012345678912 : l'ID de votre compte AWS
clustername : le nom de votre cluster
group_name : le nom du groupe de base de données
user_name : le nom de l'utilisateur Amazon Redshift (vous pouvez utiliser « * » si vous ne souhaitez pas spécifier un utilisateur spécifique)
database_name : le nom de la base de données

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials",
                "redshift:CreateClusterUser",
                "redshift:JoinGroup"
            ],
            "Resource": [
                "arn:aws:redshift:eu-west-2:012345678912:dbgroup:clustername/group_name",
                "arn:aws:redshift:eu-west-2:012345678912:dbuser:clustername/user_name or * ",
                "arn:aws:redshift:eu-west-2:012345678912:dbname:clustername/database_name"
            ]
        }
    ]
}

2.    Dans SQL Workbench/J, remplacez la première partie de l'URL JDBC du profil de connexion par jdbc:redshift:iam (par exemple, jdbc:redshift:iam://127.0.0.1:5439/example).

3.    Choisissez Extended Properties (Propriétés étendues), puis créez les propriétés suivantes :
AccessKeyID
 : ID de clé d'accès de l'utilisateur IAM
SecretAccessKey: la clé d'accès secrète de l'utilisateur IAM
DbGroups : facultatif – force l'utilisateur IAM à rejoindre un groupe existant
DbUser : le nom de l'utilisateur IAM
AutoCreate : défini sur « true »
ClusterID
 : le nom du cluster Amazon Redshift (pas le nom de la base de données)
Région
 : région AWS dans laquelle se trouve le cluster, telle que us-east-1

4.    Sur la page de profil de connexion du cluster, choisissez Test.


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


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