Proxy Amazon RDS

Proxy Amazon RDS
Amazon RDS Proxy est un service de proxy de base de données pour AWS RDS pour améliorer l'évolutivité, la disponibilité, la sécurité et la résilience des applications. Il s'agit d'un excellent avantage pour les applications ayant de nombreuses connexions ouvertes à la base de données et une ouverture et une fermeture fréquentes de ces connexions. Avec AWS RDS proxy, nous devons maintenir moins de connexions avec la base de données.

Une grande caractéristique du proxy RDS est qu'il est entièrement géré. Contrairement aux serveurs proxy traditionnels, vous n'avez pas besoin de garder les maux de tête de déploiement, de gestion et de correction avec les nouvelles mises à jour. Il s'agit d'une application sans serveur et échelle automatiquement pour s'adapter à vos besoins.

Le proxy Amazon RDS peut être utilisé pour les applications basées sur l'architecture sans serveur et celles qui s'exécutent dans des conteneurs sur ECS ou EC2.

Comment fonctionne le proxy RDS?

Avec cette fonctionnalité, les applications peuvent mettre en commun et partager leurs connexions de base de données. Au lieu de connecter votre application directement à la base de données RDS, nous la connectons au proxy RDS. Le proxy Amazon RDS agit comme un médiateur de connexion entre votre code d'application et l'instance RDS DB. Il se réserve un pool de connexions établies à la base de données, qui peut être réutilisée et partagée avec d'autres clients. De cette façon, seules quelques connexions sont établies dans la base de données, réduisant ainsi la nouvelle charge de connexion dans la base de données.

En cas de basculement de la base de données, le proxy RDS recoute les demandes directement à la nouvelle instance de base de données. Un autre avantage majeur est que nous pouvons configurer l'authentification IAM pour la sécurité de la base de données sans avoir besoin de mettre les informations d'identification de la base de données directement dans le code de l'application. Il a également la disposition d'utiliser AWS Secrets Manager pour gérer centralement la gestion des informations d'identification de la base de données.

Montage expérimental

Pour démontrer comment fonctionne le proxy AWS RDS, nous installerons un environnement de travail avec les ressources de réseautage suivantes:

  1. Un VPC AWS contient une instance RDS et une instance EC2. (Nous utilisons le VPC par défaut fourni par AWS).
  2. Minimum deux sous-réseaux et une passerelle Internet
  3. Au moins deux sous-réseaux dans différentes zones de disponibilité.

Pour rendre ce guide compact, nous ne décrire pas comment configurer une instance EC2 et RDS car ils sont relativement simples. Nous avons également mis en place un utilisateur IAM avec la politique AdministratorAccess. Les étapes importantes de ce guide sont décrites ici:

  1. Créer des groupes de sécurité et vérifier la connectivité de la base de données.
  2. Utilisation d'AWS Secret Manager pour gérer les informations d'identification de la base de données.
  3. Créer un rôle IAM et définir une politique pour permettre au proxy RDS d'accéder aux secrets créés avec AWS Secret Manager.
  4. Création et configuration du proxy RDS.
  5. Connexion à l'instance RDS DB via le proxy RDS.

Début avec RDS Proxy

Je pense que le scénario général devrait maintenant être effacé au lecteur. L'image ci-dessous montre l'aperçu de ce guide:

Créer des groupes de sécurité et vérifier la connectivité de la base de données.

Étape 1. Accédez à la section AWS VPC et dans la colonne «Sécurité», sélectionnez les groupes de sécurité dans le volet de navigation sur le côté gauche:

Étape 2. Cliquez maintenant sur le bouton «Créer un groupe de sécurité» et ajoutez un groupe de sécurité (ici «EC2_Secgrp») pour l'instance EC2. Entrez les détails de base selon votre choix:

Ajoutez une règle entrante pour permettre une connexion SSH entrant (entrant) à EC2. Ajoutez une règle sortante pour permettre à tout trafic sortant (sortant) de l'instance EC2.

Ajoutez un autre groupe de sécurité (ici 'rds_secgrp') pour l'instance RDS et entrez les détails de base:

Ajoutez une règle entrante pour autoriser uniquement la connexion TCP sur l'instance RDS DB (sur le port 3306) à partir de l'instance EC2 (spécifiez EC2_SecGrp dans la source). Ajoutez une autre règle entrante pour autoriser uniquement la connexion TCP sur l'instance RDS DB (sur le port 3306) à partir du proxy (spécifiez proxy_secgrp dans la source). Ajouter la règle sortante pour permettre à tout trafic sortant (sortant) de l'instance RDS.

De même, ajoutez un groupe de sécurité supplémentaire pour proxy (proxy_secgrp) et entrez les détails de base:

Les trois groupes de sécurité que nous avons créés sont maintenant disponibles:

En sélectionnant n'importe quel groupe de sécurité, vous pouvez voir ses détails:

1) EC2_SECGRP: Jué avec l'instance EC2.

2) RDS_SECGRP: JOINT avec l'instance RDS.

3) proxy_secgrp: attaché avec le proxy.

Étape 3. Maintenant, dirigez-vous vers le tableau de bord RDS et sélectionnez votre instance RDS Target (ici 'DB-linuxhint')). Sous l'onglet 'Connectivité et sécurité', trouvez le point de terminaison de l'instance DB et copiez-le quelque part car nous l'utiliserons en se connectant à partir de l'instance EC2 dans les étapes à venir.

Étape 4. Accédez au tableau de bord EC2 et sélectionnez l'instance EC2 à partir de laquelle vous souhaitez vous connecter à l'instance RDS DB. Sélectionnez l'option «Connexion»:

Étape 5. Sur l'assistant `` Connecter à l'instance '', choisissez l'option «EC2 Instance Connect», qui est une connexion SSH basée sur un navigateur:

Une nouvelle fenêtre de navigateur s'ouvrira lorsque vous sélectionnez le bouton «Connexion», comme indiqué ici:

Étape 6. À partir de cette fenêtre CLI, utilisez le format de commande ci-dessous pour tester la connectivité EC2 avec l'instance RDS DB:

$ mysql -h -P 3306 -U -p

Utilisez votre point de terminaison d'instance RDS DB à la place du «point de terminaison RDS DB» et le nom de l'utilisateur DB à la place de «Nom d'utilisateur» («admin» dans notre cas). Entrez le mot de passe DB à la demande. Lorsque l'authentification réussit, vous verrez l'invite MySQL sur la CLI:

Utilisation d'AWS Secret Manager pour gérer les informations d'identification de la base de données.

Pour que le proxy RDS puisse se connecter à l'utilisateur DB, l'utilisateur DB a besoin d'un secret dans AWS Secrets Manager. Ces secrets sont utilisés par le proxy RDS pour gérer un pool de connexions de base de données.

Étape 1. Dirigez-vous vers la section «Secrets Manager» de la console AWS et sélectionnez «Stockez un nouveau secret»:

Étape 2. Dans la fenêtre «Choisissez Secret Type», sélectionnez l'option.'Dans la sous-section ci-dessous, entrez le nom d'utilisateur et le mot de passe pour votre utilisateur de base de données:

Étape 3. Ensuite, sous le menu déroulant 'Sélectionnez la clé de chiffrement'. Cliquez sur Suivant.

Étape 4. Maintenant, donnez un nom approprié à votre secret et une brève description (facultative).

Étape 5. Nous sautons les étiquettes et les options de rotation secrète automatique; Pour l'instant, cliquez sur Suivant:

Étape 6. Vous pouvez voir certains paramètres de configuration liés au secret et à un exemple de code. Il suffit de les sauter et de continuer à sauver votre secret en appuyant sur le bouton «Store»:

Lorsque les étapes ci-dessus sont effectuées, votre nom secret apparaîtra sur la page Secrets Manager. À partir des détails secrets, copiez l'ARN de votre secret, dont nous aurons besoin plus tard.

Créer un rôle IAM et définir une politique pour permettre au proxy RDS d'accéder aux secrets créés avec AWS Secret Manager.

Étape 1. Dirigez-vous vers le tableau de bord IAM et à partir du panneau de gauche, choisissez «Rôles», puis sélectionnez «Créer un rôle»:

Étape 3. À partir des multiples options sous le En-tête «RDS», sélectionnez «RDS - Ajoutez un rôle à la base de données»:

Étape 4. Maintenant, choisissez «Next» et entrez le bouton «Créer la stratégie». Un nouveau navigateur s'ouvrira ici; Sélectionnez l'onglet JSON et remplacez les instructions de stratégie déjà par la suivante:


"Version": "2012-10-17",
"Déclaration": [

"Sid": "VisualEditor0",
"Effet": "Autoriser",
"Action": [
"SecretsManager: getrandompassword",
"SecretsManager: CreateSecret",
"SecretsManager: ListSecrets"
]],
"Ressource": "*"
,

"Sid": "VisualEditor1",
"Effet": "Autoriser",
"Action": "SecretsManager: *",
"Ressource": [
"Put_our_secret_arn_here"
]]

]]

Remplacez simplement l'étiquette 'put_your_secret_arn_here' par la valeur ARN secrète dans votre cas. Ajoutez des balises (facultative) et continuez en sélectionnant la «politique d'examen» et donnez un nom («RDS-Proxy-Policy» dans notre cas) à votre politique et appuyez sur le bouton «Créer la stratégie».

Étape 5. Après avoir configuré votre stratégie, revenez à la fenêtre «Rôles» du navigateur et choisissez le bouton «Rafraîchissez» et recherchez et sélectionnez la stratégie que vous venez de créer:

Étape 6. Maintenant, donnez un nom à votre rôle et une brève description, et éventuellement vous pouvez ajouter les balises ici. Continuez en sélectionnant «Next: Review» et enfin sélectionnez «Créer un rôle.'Votre rôle est maintenant créé:

Création et configuration du proxy RDS.

Il est maintenant temps de créer et de configurer le proxy RDS, qui utilisera finalement notre groupe de sécurité RDS_SECGRP, le secret et le rôle que nous avons créé ci-dessus.

Étape 1. Accédez au tableau de bord RDS et sélectionnez «Proxies», puis sélectionnez «Créer un proxy»:

Étape 2. À l'intérieur de l'assistant `` Créer un proxy '', nous devons d'abord donner un nom ou un identifiant au proxy, qui est «Proxy-LH» dans notre cas.

Étape 3. Décochez la case correspondant à `` Besoin de la sécurité de la couche de transport.'

Étape 4. Gardez la valeur de délai d'expiration de la connexion du client inactif à la valeur par défaut de 30 minutes.

Étape 5. Sous «Configuration du groupe cible», sélectionnez votre instance RDS Target dans le menu déroulant de la base de données.

Étape 6. Gardez la valeur des connexions maximales du pool de connexions à la valeur par défaut de «100»:

Étape 7. Dans la section de connectivité, il existe plusieurs champs:

  1. Secrets Manager Secret: Ici, sélectionnez le secret que nous avons créé plus tôt dans ce guide (en-tête 1).
  2. IAM Rôle: Choisissez le rôle que nous avons créé plus tôt (Heading 2).
  3. IAM Authentification: Handicap pour l'instant.
  4. Sous-réseaux: sélectionnez au moins deux sous-réseaux dans différentes zones de disponibilité.
  5. Configuration de connectivité supplémentaire (groupe de sécurité VPC): Ici, utilisez le groupe de sécurité 'proxy_secgrp'.

Étape 8. Sous la «configuration avancée», vérifiez le «Activer la journalisation améliorée» et enfin sélectionnez «Créer un proxy.'

Maintenant, attendez que le proxy soit disponible et, lors de sa fin, copiez le point de terminaison du proxy pour tester la connectivité à partir de EC2.

Connexion à l'instance RDS DB via le proxy RDS.

Nous allons maintenant vérifier la connectivité de notre instance RDS DB de l'EC2.

Étape 1. Accédez au tableau de bord de gestion EC2, sélectionnez Instances et sélectionnez votre instance Cible EC2 à partir de l'endroit où nous nous connecterons à l'instance RDS DB. Choisissez 'Connectez-vous.'

Étape 2. Sur l'assistant `` Connecter à l'instance '', choisissez l'option «EC2 Instance Connect», qui est une connexion SSH basée sur un navigateur:

Une nouvelle fenêtre de navigateur s'ouvrira lorsque vous sélectionnez le bouton «Connexion» comme plus tôt dans ce tutoriel.

Étape 3. À partir de cette fenêtre CLI, utilisez le format de commande ci-dessous pour tester la connectivité EC2 avec l'instance RDS DB via le point de terminaison proxy RDS:

$ mysql -h -P 3306 -U -p

Utilisez votre point de terminaison proxy RDS à la place du «point de terminaison proxy» et le nom de l'utilisateur DB à la place de «Nom d'utilisateur.'Entrez le mot de passe DB lorsqu'on lui demande. Lorsque l'authentification réussit, vous verrez l'invite MySQL sur la CLI:

Conclusion

Dans ce guide, nous avons appris la mise en place d'un proxy RDS sur AWS. Il est très bénéfique pour les grandes applications, y compris le serveur sans serveur, qui ont de nombreuses connexions ouvertes. Il réduit considérablement le temps de basculement des bases de données Aurora et RDS. Il peut être facilement utilisé pour de nombreuses applications sans avoir besoin de modifier le code.