<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ménahem Houri</title>
    <description>The latest articles on DEV Community by Ménahem Houri (@menahem).</description>
    <link>https://dev.to/menahem</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F601244%2Fc04577bc-49e1-46b5-8ee6-7ead9b65ad99.png</url>
      <title>DEV Community: Ménahem Houri</title>
      <link>https://dev.to/menahem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/menahem"/>
    <language>en</language>
    <item>
      <title>Comment avoir un nom de domaine sur une API GraphQL (AppSync)</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Fri, 27 Feb 2026 11:36:42 +0000</pubDate>
      <link>https://dev.to/menahem/comment-avoir-un-nom-de-domaine-sur-une-api-graphql-appsync-4ofp</link>
      <guid>https://dev.to/menahem/comment-avoir-un-nom-de-domaine-sur-une-api-graphql-appsync-4ofp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Vous souhaitez garder "privé" votre API GraphQL de AppSync pour y accéder uniquement depuis votre VPC tout en ayant un nom de domaine personnalisé la dessus ? Découvrez comment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En principe on aurait pu se dire qu'il était assez simple d'avoir un nom de domaine personnalisé sur AppSync, la réponse est oui pour la partie &lt;a href="https://docs.aws.amazon.com/appsync/latest/eventapi/event-api-welcome.html" rel="noopener noreferrer"&gt;Events&lt;/a&gt;, la partie GraphQL elle est moins évidente.&lt;br&gt;
Pourquoi ?&lt;br&gt;
Pour la simple raison que le service ne supporte pas cette fonctionnalité et qu'il faut s'ajouter une configuration supplémentaire.&lt;br&gt;
Voyons cela plus en détail.&lt;/p&gt;

&lt;p&gt;Pour rendre l'API accessible via un nom de domaine personalisé il faut l'ajouter dans Route53 mais ça sera pas suffisant puisqu'il faut aussi que l'enregistrement pointe sur une ressource AWS.&lt;br&gt;
L'ALB peut faire l'affaire pour garder la redondance et permettre d'atteindre le VPC Endpoint de AppSync créer en amont (nécessaire pour y accéder en privé depuis le VPC) mais il faudra également ajouter un header pour que le service puisse router la requete vers le bon "projet" de AppSync, puisque le service dispose de beaucoup de projets en dehors du notre et doit donc le reconnaitre (header : X-AppSync-Domain)&lt;br&gt;
Si vous avez la possibilité au niveau de votre client de l'ajouter (le header) ça sera le plus simple sinon autrement il faudra ajouter un proxy (par ex. Nginx) qui ajoutera lui le header &lt;/p&gt;

&lt;p&gt;Exemple de configuration au niveau de Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  location /graphql {
    proxy_set_header X-AppSync-Domain ${identifierDeLapi}.appsync-api.eu-west-1.amazonaws.com;
    proxy_pass https://${url};
    proxy_pass_request_headers on;
    proxy_ssl_session_reuse off;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
    ...
  }

  location /graphql/ws {
    proxy_set_header X-AppSync-Domain ${identifierDeLapi}.appsync-realtime-api.eu-west-1.amazonaws.com;
    proxy_pass https://${url};
    proxy_pass_request_headers on;
    proxy_ssl_session_reuse off;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
    ...
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avec un schéma ça donne&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dnyaqzsk8svum94k6zh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dnyaqzsk8svum94k6zh.png" alt=" " width="691" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>appsync</category>
      <category>graphql</category>
      <category>route53</category>
    </item>
    <item>
      <title>How-to deploy GuardDuty from dedicated account on multi-accounts and multi-regions organization</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Thu, 02 Jan 2025 14:32:16 +0000</pubDate>
      <link>https://dev.to/menahem/how-to-deploy-guardduty-from-dedicated-account-on-multi-accounts-and-multi-regions-organization-1mk9</link>
      <guid>https://dev.to/menahem/how-to-deploy-guardduty-from-dedicated-account-on-multi-accounts-and-multi-regions-organization-1mk9</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://aws.amazon.com/guardduty/" rel="noopener noreferrer"&gt;Amazon GuardDuty&lt;/a&gt; is an AWS service of threat detection that continously monitor AWS accounts and workload for malicious activity and anomalous behavior to protect AWS accounts, workloads, and data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In that post we will see how to activate Amazon GuardDuty on multiples account's and multiples regions.&lt;/p&gt;

&lt;p&gt;When you have multiples accounts the first account created on AWS is the "Management account". It utilizes in that account AWS Organisations as a management account (or the payer account to pay bills from different accounts), which gives the account the ability to create and financially manage member accounts.&lt;/p&gt;

&lt;p&gt;We will use GuardDuty with AWS Organizations to "find" all the accounts in the organizations (if there's multiple accounts).&lt;br&gt;
Also as a best practices we will have a dedicated account for the security part.&lt;br&gt;
When initializing GuardDuty we have the option to delegate the administrator of GuardDuty to another account (in our case Security account)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ti7si0beafzfqh5k0fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ti7si0beafzfqh5k0fy.png" alt="GuardDuty - Delegated Administrator" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the delegated account we will have the option to enable GuardDuty on another accounts, and also to auto-enable in another accounts with different options&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2h6hsln5ia1ug0tpx93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2h6hsln5ia1ug0tpx93.png" alt="GuardDuty - Auto enable" width="800" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, voila! GuardDuty is now enabled on different accounts (it can take 24h before all the data appear on the console)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgwuc61ll77vrrtdgy4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgwuc61ll77vrrtdgy4n.png" alt="GuardDuty - Multi Account" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But...wait, it's only activated on one region, how to enable on an another region ?&lt;br&gt;
We will have to come-back on the management account and activate the second region with the same delegated administrator account, after that we can (again) activate GuardDuty on the security account on all the project account of region 2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zkwx0jxn3lh8vow1uhm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zkwx0jxn3lh8vow1uhm.png" alt="GuardDuty - Region 2" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any comments or observations on how to do better, feel free to comment below. &lt;br&gt;
Thanks to Hugo for the idea&lt;/p&gt;

</description>
      <category>aws</category>
      <category>guardduty</category>
      <category>security</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Amazon CodeCatalyst tour d'horizon du service</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Mon, 05 Jun 2023 15:55:32 +0000</pubDate>
      <link>https://dev.to/menahem/amazon-codecatalyst-tour-dhorizon-du-service-2mma</link>
      <guid>https://dev.to/menahem/amazon-codecatalyst-tour-dhorizon-du-service-2mma</guid>
      <description>&lt;p&gt;&lt;strong&gt;CodeCatalyst encore un autre service de code sur AWS qui rejoint la suite CodeCommit, CodeBuild, etc... me diriez-vous ? pas tout à fait !&lt;br&gt;
Tour d'horizon d'un service qui s'annonce comme étant la prochaine génération d'outil pour développeurs par AWS&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Présentation
&lt;/h2&gt;

&lt;p&gt;Amazon CodeCatalyst à été &lt;a href="https://aws.amazon.com/fr/blogs/aws/announcing-amazon-codecatalyst-preview-a-unified-software-development-service/"&gt;annoncé&lt;/a&gt; (en preview) par Werner Vogels le 1er décembre 2022 lors du re:Invent et est disponible en GA (General Availability) &lt;a href="https://aws.amazon.com/fr/blogs/devops/announcing-general-availability-of-amazon-codecatalyst/"&gt;depuis le 20 Avril 2023&lt;/a&gt;.&lt;br&gt;
Ce service se présente comme étant une "place unifié de service pour les développeurs".&lt;br&gt;
Concrètement il permet aussi bien &lt;strong&gt;d'héberger son code (git)&lt;/strong&gt;, d'&lt;strong&gt;interagir et commenter en équipe&lt;/strong&gt; sur le code, de &lt;strong&gt;créer et suivre les tickets&lt;/strong&gt; que de lancer des pipelines de &lt;strong&gt;déploiement automatisés (CI/CD)&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Par ou démarrer ?
&lt;/h2&gt;

&lt;p&gt;L'idée de ce post étant de présenter brièvement le service mais surtout de montrer les particularités d'Amazon CodeCatalyst par rapport à d'autres services sur AWS, une des premières particularités est qu'il à le droit à une plateforme dédiée (hors de la console AWS) avec un modèle d'authentification nouveau et différent de ce qu'on à pu voir avec IAM (qui à été lancé en meme temps que CodeCatalyst)&lt;/p&gt;

&lt;p&gt;Actuellement le service est disponible que sur une seule et unique région&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xNR77H1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/16tioblqjh23iuqphrs6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xNR77H1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/16tioblqjh23iuqphrs6.png" alt="une seule région" width="800" height="130"&gt;&lt;/a&gt;&lt;/p&gt;
 D'autres régions arriveront surement très prochainement, en attendant... 



&lt;p&gt;Le &lt;a href="https://codecatalyst.aws/explore"&gt;site du service&lt;/a&gt; ayant une interface bien à lui le modèle d'authentification également.&lt;br&gt;
En effet, il est basé sur &lt;a href="https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html"&gt;AWS Builder ID&lt;/a&gt; qui est un nouveau service d'authentification dédié spécifiquement aux builders sur AWS, actuellement il fonctionne avec CodeCatalyst mais aussi CodeWhisperer (le service de génération de code via Machine Learning) et ne nécessite pas de carte bleu pour avoir un compte sur ce service (le compte administrateur (billing) de CodeCatalyst lui en aura bien besoin comme on le verra par la suite) et permet donc d'inviter des gens au(x) projet(s) sans nécessairement avoir un compte AWS.&lt;/p&gt;

&lt;p&gt;Il suffit de s'enregistrer avec une adresse mail valide puis de créer son "espace" dans CodeCatalyst et ensuite de joindre son espace avec son compte AWS via un token ID créé au moment de l'initialisation de l'espace dans CodeCatalyst&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/bOgOEo1QfUxiE9Mw0X/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/bOgOEo1QfUxiE9Mw0X/giphy.gif" alt="création de compte" width="480" height="247"&gt;&lt;/a&gt;&lt;/p&gt;
 Création d'un compte sur AWS Builder ID puis sur CodeCatalyst avec l'attachement a la console AWS (via token ID)



&lt;h2&gt;
  
  
  Prise en main
&lt;/h2&gt;

&lt;p&gt;Une des forces de CodeCatalyst se trouve dans les blueprints mis à disposition, les blueprints sont des projets (templates) assez complet qui permettent de découvrir le service mais aussi d'avoir un premier point de démarrage lorsqu'on souhaite explorer des nouveaux patterns / architectures / technos notamment avec du CDK (pas de projet avec du Terraform à ce jour), de &lt;a href="https://docs.aws.amazon.com/codecatalyst/latest/userguide/projects-templates.html"&gt;nombreux services sont présents&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cLUMW-b0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03ky7vmt75lg7lef6yma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cLUMW-b0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03ky7vmt75lg7lef6yma.png" alt="blueprints" width="800" height="1125"&gt;&lt;/a&gt;&lt;/p&gt;
 Liste des blueprints disponible à ce jour 



&lt;p&gt;Au delà des blueprints il est aussi possible de connecter un repo GitHub existant ou démarrer à partir de zéro en créant son repo directement dans CodeCatalyst&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6r8r9gxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c60x0fl0vmkzu47pdu0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6r8r9gxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c60x0fl0vmkzu47pdu0h.png" alt="connecter son github a codecatalyst" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;
 GitHub uniquement à ce jour mais pas surprenant que ça évolue dans le temps 



&lt;p&gt;L'utilisation d'un blueprint pour démarrer est assez rapide, les différents blueprints sont mis à jour et versionné directement par AWS et leur contenu est plutôt bien documenté&lt;br&gt;
&lt;a href="https://i.giphy.com/media/pbOAvjQSbO2n4f8QIl/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/pbOAvjQSbO2n4f8QIl/giphy.gif" alt="utiliser un blueprint" width="480" height="250"&gt;&lt;/a&gt;&lt;/p&gt;
 Utilisation d'un blueprint - idéal pour démarrer rapidement 



&lt;p&gt;Une fois dans le projet on à la possibilité d'ajouter des membres avec de la collaboration &amp;amp; échanges, des issues (également en provenance de &lt;a href="https://docs.aws.amazon.com/codecatalyst/latest/userguide/extensions-jira.html"&gt;Jira&lt;/a&gt;), des secrets et toute la richesse d'un workflow CI/CD&lt;/p&gt;

&lt;p&gt;Les workflows sont éditables de manière graphique (low-code) ou en YAML et la possibilité d'importer en partie des &lt;a href="https://docs.aws.amazon.com/codecatalyst/latest/userguide/integrations-github-actions.html"&gt;GitHub Actions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Du9TIFKa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0mo1ajcxcgr2cldnghu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Du9TIFKa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0mo1ajcxcgr2cldnghu.png" alt="CodeCatalyst Workflow en format graphique " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;
 Exemple de workflow en format graphique 



&lt;p&gt;Le code peut être éditer directement depuis différents environnements de développement (IDE) (avec un plugin CodeCatalyst dédié)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Fi52-R2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u4a2n5e4errt2wxnbzzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Fi52-R2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u4a2n5e4errt2wxnbzzj.png" alt="Code édition" width="504" height="502"&gt;&lt;/a&gt;&lt;/p&gt;
 Il est bien entendu possible aussi de cloner le repo en local mais l'avantage de lier CodeCatalyst avec son IDE est qu'il intègre deja toute la phase de connexion avec le projet



&lt;h2&gt;
  
  
  Tarifs
&lt;/h2&gt;

&lt;p&gt;CodeCatalyst à une offre "&lt;a href="https://codecatalyst.aws/explore/pricing"&gt;Free tier&lt;/a&gt;" pour démarrer et une offre "&lt;a href="https://codecatalyst.aws/explore/pricing"&gt;Standard tier&lt;/a&gt;" pour aller plus loin.&lt;br&gt;
Ce qui est original c'est qu'on choisit l'offre dans laquelle on souhaite démarrer et si on part sur du "Free tier" l'upgrade ne se fait pas toute seule et le service est coupé (alors qu'habituellement AWS n'as pas l'habitude de stopper le service mais de facturer ce qui dépasse du free tier).&lt;br&gt;
La facturation se fait par "espace" (dans un espace on peut mettre plusieurs projets), on peut créer jusqu'a 5 espaces dans CodeCatalyst par région et un seul en Free tier dans la région.&lt;br&gt;
L'interface de billing est assez détaillée et se met à jour assez rapidement pour refléter l'usage au niveau de l'espace &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xH5WgEBu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2z3agk562ij47ak0oeda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xH5WgEBu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2z3agk562ij47ak0oeda.png" alt="codecatalyst billing" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;
 Interface de billing assez détaillée et qui est mise à jour rapidement 



&lt;p&gt;A noter que cela n'inclut pas le cout de création des resources sur le(s) compte(s) AWS (S3, Lambda, ECS, etc...)&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Une des originalités de CodeCatalyst en tant que service AWS est son coté "modulable" et flexible au niveau des accès et du déploiement des ressources sur les comptes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BF4xWxUZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3p147o9azs28mj8shzkq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BF4xWxUZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3p147o9azs28mj8shzkq.png" alt="CodeCatalyst interaction" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comme on peut le voir dans le schéma il est possible de dissocier en plusieurs comptes AWS le déploiement des ressources avec différents projets sur un meme espace.&lt;br&gt;
Il est possible dans un projet de créer plusieurs environnements pour les lier à différents comptes AWS (ex. dev et prod)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;CodeCatalyst s'annonce clairement comme un nouveau service différenciateur et viendra surement en remplacement de la suite CodeCommit, CodeBuild etc... sur le long terme&lt;br&gt;
Une interface et plateforme à part lui permet de partir sur des nouvelles fondations pour itérer plus efficacement, à suivre :-)&lt;/p&gt;

&lt;h3&gt;
  
  
  Pour aller plus loin
&lt;/h3&gt;

&lt;p&gt;si vous souhaitez en savoir plus sur CodeCatalyst différents liens&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/codecatalyst/index.html"&gt;Documentation de CodeCatalyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://catalog.us-east-1.prod.workshops.aws/workshops/23fa5676-2943-415b-98b9-125f5e86912d/en-US"&gt;Workshop pour démarrer avec le service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/mKdGehrUYFI"&gt;Présentation au re:Invent 2022&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;N'hésitez pas à indiquer en commentaire si vous avez des questions &lt;/p&gt;

</description>
      <category>aws</category>
      <category>developer</category>
      <category>codecatalyst</category>
      <category>cloud</category>
    </item>
    <item>
      <title>A la découverte de AWS IQ</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Thu, 02 Mar 2023 15:15:37 +0000</pubDate>
      <link>https://dev.to/menahem/a-la-decouverte-de-aws-iq-4c55</link>
      <guid>https://dev.to/menahem/a-la-decouverte-de-aws-iq-4c55</guid>
      <description>&lt;p&gt;&lt;strong&gt;Depuis Septembre 2021, AWS &lt;a href="https://aws.amazon.com/fr/blogs/aws/aws-iq-expansion-experts-uk-france/"&gt;à rendu accessible&lt;/a&gt; pour la France le service AWS IQ, ayant été un des premiers à pouvoir m'inscrire à ce service je vous propose un tour d'horizon du service que j'ai pu utiliser depuis plus d'un an, let's go !&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Kesako ?
&lt;/h1&gt;

&lt;p&gt;AWS IQ est un service qui permet de mettre en relation des clients AWS avec des experts tiers certifiés AWS pour les aider, accompagner dans leurs demandes (Freelance / ESN).&lt;br&gt;
Il faut être certifié et résider dans un des pays éligibles pour s'inscrire en tant qu'expert, les détails dans &lt;a href="https://docs.aws.amazon.com/aws-iq/latest/experts-user-guide/getting-started-as-an-expert.html"&gt;ce lien&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Concrètement
&lt;/h1&gt;

&lt;p&gt;Une fois la phase d'inscription validée on arrive dans une interface qui présente les différentes demandes des clients &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T6l3Pthn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kaas3fja2g6teqw86bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T6l3Pthn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kaas3fja2g6teqw86bv.png" alt="AWS IQ accueil" width="880" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Et la bienvenue dans le marché !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T1tF7vkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eykvuf7gj63jxyiwqbwc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T1tF7vkx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eykvuf7gj63jxyiwqbwc.png" alt="Market" width="880" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vous allez trouver de tout et à tout les niveaux !&lt;br&gt;
Il faut pour le coup être prêt a trouver toutes sortes de demandes et en conséquence avec le temps savoir gérer celle qui seront pertinentes et pourront aboutir VS celles qui mèneront à rien&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N3fRtf3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q17rngb74phsmwycf9tw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N3fRtf3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q17rngb74phsmwycf9tw.png" alt="exemple" width="880" height="281"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Exemple de demande peu pertinente&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Il faut aussi savoir estimer le temps qu'on mettra dans un projet pour pouvoir faire une proposition correct, la aussi en fonction des clients et des demandes il faut pouvoir analyser le besoin correctement pour que le chiffrage soit juste !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wLnwJH3e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/duz34xhwdlm20ojtixt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wLnwJH3e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/duz34xhwdlm20ojtixt9.png" alt="Exemple - analyse" width="880" height="261"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Exemple de demande ou il faudra creuser&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Le client aura souvent plusieurs propositions de différents experts, à lui de choisir ce qui lui convient le mieux.&lt;/p&gt;

&lt;p&gt;Une fois que le client à validé la proposition qu'on lui soumet, chose pratique sur IQ, on peut directement demander un accès au compte de celui-ci avec les droits qu'on estime nécessaire pour l'intervention et ainsi avoir un accès direct au compte sans avoir à gérer les credentials.&lt;br&gt;
Une fois l'intervention effectuée on passe à la partie paiement.&lt;br&gt;
Il existe 3 formules :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Milestone : Par étape, on facture le client une fois la mission effectuée&lt;/li&gt;
&lt;li&gt;Upfront : Le client est facturé dès le début de l'intervention&lt;/li&gt;
&lt;li&gt;Scheduled : Paiement planifié à une date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le paiement est ensuite géré coté AWS (prélèvement coté client et virement coté Freelance/ESN)&lt;br&gt;
Lors du virement AWS prélève une commission de 2,5% et le paiement à l'origine se fait en Dollar qui sont ensuite converti en Euro &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7hli8AEE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/71n30uudibyhtzfue68v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7hli8AEE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/71n30uudibyhtzfue68v.png" alt="Euro par rapport au Dollar Américain" width="880" height="382"&gt;&lt;/a&gt;&lt;br&gt;
En fonction des périodes la fluctuation peut avoir son avantage comme son désavantage&lt;/p&gt;

&lt;p&gt;Si on devrait résumer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;+ Les avantages&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L'international, avec le choix et la variété des propositions sur différents sujets et la possibilité de rencontrer de nouveaux clients&lt;/li&gt;
&lt;li&gt;Accès managé et simplifié sur le compte AWS du client&lt;/li&gt;
&lt;li&gt;Gestion du paiement par AWS mais pas à 100% puisqu'il suffit que le client bloque le prélèvement et la pas de solution (...)&lt;/li&gt;
&lt;li&gt;Libre de choisir quand on veut travailler sur IQ en fonction de nos disponibilités&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;- Inconvénients&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beaucoup de "bruit" dans les propositions pour trouver des choses pertinentes et intéressantes&lt;/li&gt;
&lt;li&gt;Chiffrage à faire sans que tout ne soit clair/détaillé&lt;/li&gt;
&lt;li&gt;Désaccord avec le client non arbitré par IQ&lt;/li&gt;
&lt;li&gt;Paiement en Dollar en fonction des périodes ou l'Euro est bas&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>freelance</category>
      <category>iq</category>
    </item>
    <item>
      <title>Tip : How to assign users or groups on AWS SSO on all AWS accounts</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Fri, 06 May 2022 10:13:19 +0000</pubDate>
      <link>https://dev.to/menahem/tip-how-to-assign-users-or-groups-on-aws-sso-on-all-aws-accounts-310h</link>
      <guid>https://dev.to/menahem/tip-how-to-assign-users-or-groups-on-aws-sso-on-all-aws-accounts-310h</guid>
      <description>&lt;p&gt;When you have configured AWS SSO and also created all the users and groups needed, you often have groups that you want to assign to all accounts, but when we arrive in the console we must then select the accounts in each OU&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T21Cx54K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9dwq9atqlk5wmx35sbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T21Cx54K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9dwq9atqlk5wmx35sbf.png" alt="Console with all the OU" width="880" height="489"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;all the OU of the Organization listed&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5YLSvGDR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rdpkqdnkeccw1dz9mz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5YLSvGDR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rdpkqdnkeccw1dz9mz3.png" alt="Select account by account" width="880" height="489"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;select each account one by one&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  From Hierarchy to List
&lt;/h3&gt;

&lt;p&gt;So how to select all the accounts without scrolling each OU?&lt;/p&gt;

&lt;p&gt;Simple and efficient we have to switch to "List" view and load all the accounts inside the Organization and check the first box at the top&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4oZQ-B80--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0abdv713l55ljtv3xysb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4oZQ-B80--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0abdv713l55ljtv3xysb.png" alt="You can now select all the accounts" width="880" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You now have the possibility to select all the accounts!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>sso</category>
      <category>tip</category>
    </item>
    <item>
      <title>EC2 Spot instances : Comment simuler une fin d'instance et lancer une commande avant la terminaison</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Tue, 04 Jan 2022 10:41:19 +0000</pubDate>
      <link>https://dev.to/menahem/ec2-spot-instances-comment-simuler-une-fin-dinstance-et-lancer-une-commande-avant-la-terminaison-4lf6</link>
      <guid>https://dev.to/menahem/ec2-spot-instances-comment-simuler-une-fin-dinstance-et-lancer-une-commande-avant-la-terminaison-4lf6</guid>
      <description>&lt;p&gt;AWS EC2 Spot instances permet de réduire jusqu'a 90% le cout des EC2, le concept de Spot instances se base sur des instances a durée limitée et qu'AWS met à disposition par rapport au surplus de capacité présente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kouVeJGS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26spy23ax0l7r5ew911e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kouVeJGS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26spy23ax0l7r5ew911e.png" alt="EC2 Spot instances" width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Interruption d'instance
&lt;/h2&gt;

&lt;p&gt;Avant qu'une instance se termine de manière inattendue un signal est envoyé à celle-ci 2mn avant, l'idée de ce post est de voir comment simuler un signal de terminaison et lancer une commande avant pour par exemple faire une sauvegarde des travaux effectués.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lv8XF_qT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b57esybhp0zsjde2a5ek.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lv8XF_qT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b57esybhp0zsjde2a5ek.png" alt="Architecture" width="571" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Détails
&lt;/h2&gt;

&lt;p&gt;L'architecture est composé des éléments suivants :&lt;br&gt;
1/&lt;strong&gt;AWS Fault Injection Simulator (FIS)&lt;/strong&gt; qui va permettre de simuler une "terminaison" d'instance Spot&lt;/p&gt;

&lt;p&gt;2/&lt;strong&gt;AWS EventBridge&lt;/strong&gt; pour prendre en charge l'événement de terminaison et pouvoir lancer la commande via le service Run Command (3)&lt;/p&gt;

&lt;p&gt;3/&lt;strong&gt;AWS Systems Manager Run Command&lt;/strong&gt; va pouvoir lancer sur l'EC2 la commande qu'on lui aura spécifié (L'agent SSM doit être présent sur l'instance avec les bons droits IAM)&lt;/p&gt;
&lt;h2&gt;
  
  
  FIS - Configuration
&lt;/h2&gt;

&lt;p&gt;Commençons par configurer le service FIS, en se rendant sur &lt;a href="https://console.aws.amazon.com/fis/home"&gt;l'interface&lt;/a&gt; on sélectionne "Create Experiment Template" &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T5eprzVs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/esnfonq3tw8iumod5v6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T5eprzVs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/esnfonq3tw8iumod5v6d.png" alt="FIS Home" width="880" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puis on complète la description, éventuellement on peut lui donner un nom, si un role IAM n'est pas déjà présent il faut en créer un spécifique a FIS &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xk45N6Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ckcc49nrj3pwpa285pt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xk45N6Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ckcc49nrj3pwpa285pt.png" alt="FIS - Description" width="880" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A noter que dans IAM ne figure pas le service FIS par défaut &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GppCkPi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2mt3au0zvv4dhnaagb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GppCkPi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2mt3au0zvv4dhnaagb3.png" alt="FIS - Role" width="880" height="678"&gt;&lt;/a&gt;&lt;br&gt;
On choisit donc un service temporaire dans la liste (EC2 par exemple) et puis une fois la policy créé avec les droits uniquement pour envoyer une interruptions aux instances Spot&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowFISExperimentRoleSpotInstanceActions",
            "Effect": "Allow",
            "Action": [
                "ec2:SendSpotInstanceInterruptions"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On édite le "Trust relationships" pour indiquer le service fis.amazonaws.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---WKgUwVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u3mlk3houf6y5hdujtwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---WKgUwVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u3mlk3houf6y5hdujtwx.png" alt="FIS - TR" width="880" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On revient ensuite sur l'interface de configuration de FIS et on crée une nouvelle action (action type : aws:ec2:send-spot-instance-interruptions), en précisant qu'on souhaite laisser 2mn avant que l'instance soit terminée dans le champ "durationBeforeInterruption" et on lui précise la Target (celle-ci est automatiquement créée il suffit juste de la sélectionner)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mVgvhJgg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6n71isata4m6ppwpclp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mVgvhJgg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6n71isata4m6ppwpclp1.png" alt="FIS - Actions" width="880" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Une fois enregistré on édite la target en lui précisant la/les resource(s) qu'on souhaite simuler&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JJ-4euNL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/adhs1cufvz9ykgwgxg8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JJ-4euNL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/adhs1cufvz9ykgwgxg8v.png" alt="FIS - Targets" width="880" height="845"&gt;&lt;/a&gt;&lt;br&gt;
Ici dans ce cas on a sélectionné toutes les instances ayant le tag Name avec la valeur "Test-Spot"&lt;/p&gt;

&lt;p&gt;On peut ensuite créer le template d'experimentation, un message va s'afficher comme quoi on a pas d'action de stop du template, dans ce cas c'est pas grave puisqu'il s'agit juste de lui envoyer un signal d'arrêt le stop se fera de lui meme :)&lt;/p&gt;

&lt;p&gt;Par la suite on pourra le lancer via le menu déroulant des actions en sélectionnant "Start", mais pas pour l'instant car il faut auparavant configurer EventBridge&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS EventBridge - Configuration
&lt;/h2&gt;

&lt;p&gt;Pour la partie EventBridge on va lui indiquer comme pattern le service EC2 et l'événement d'interruption d'une spot instance&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zBxl8DE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/70b3bkf7899ohq87spi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zBxl8DE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/70b3bkf7899ohq87spi7.png" alt="EB - Conf" width="880" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puis laisser tel quel la partie "event bus" et en "target" sélectionner ces paramètres&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JzqLf4L9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ala6j896akjgg5xapksv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JzqLf4L9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ala6j896akjgg5xapksv.png" alt="Image description" width="880" height="856"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En &lt;strong&gt;Target&lt;/strong&gt; : Systems Manager Run Command&lt;br&gt;
&lt;strong&gt;Document&lt;/strong&gt; : AWS-RunShellScript&lt;br&gt;
&lt;strong&gt;Target key&lt;/strong&gt; : le tag que l'instance a, qui permet de "viser" celle-ci, précédé par tag, ex. tag:Name&lt;br&gt;
&lt;strong&gt;Target Value(s)&lt;/strong&gt; : Valeur du tag, ex. Spot-Instance&lt;br&gt;
Puis sélectionner "&lt;strong&gt;constant&lt;/strong&gt;" dans les paramètres à choisir.&lt;br&gt;
Indiquer la commande puis "&lt;strong&gt;Add&lt;/strong&gt;" et au final "&lt;strong&gt;Create&lt;/strong&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Une fois que les différents elements sont mis en place, on peut maintenant tester le mécanisme en lançant dans FIS l'expérimentation qui va par la suite déclencher la commande qu'on souhaite envoyer à l'instance via EventBridge, 2mn avant que celle-ci soit terminée&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x0Bhqdfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnscwfltwu2o798a5smp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x0Bhqdfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnscwfltwu2o798a5smp.png" alt="FIS Start" width="284" height="324"&gt;&lt;/a&gt; &lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>spot</category>
      <category>ssm</category>
    </item>
    <item>
      <title>SSM-Bastion ou comment se connecter a une instance/bdd privée sur AWS</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Thu, 15 Apr 2021 19:09:52 +0000</pubDate>
      <link>https://dev.to/menahem/ssm-bastion-ou-comment-se-connecter-a-une-instance-bdd-privee-sur-aws-41f4</link>
      <guid>https://dev.to/menahem/ssm-bastion-ou-comment-se-connecter-a-une-instance-bdd-privee-sur-aws-41f4</guid>
      <description>&lt;p&gt;Un des challenges les plus fréquents d'un projet sur AWS en ce qui concerne la sécurité et l'accessibilité d'une EC2 ou d'une base de donnée privée tourne autour du Bastion.&lt;/p&gt;

&lt;p&gt;Le Bastion est le point central pour accéder depuis l'extérieur à des resources privées. (hors DirectConnect)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OzMl2JNw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sp1bg2dclfwj11y38cbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OzMl2JNw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sp1bg2dclfwj11y38cbj.png" alt="SSH Bastion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Architecture classique d'un bastion via un tunnel SSH&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Qu'en est-il de la &lt;strong&gt;resilience&lt;/strong&gt; ?&lt;br&gt;
&lt;strong&gt;Filtrer&lt;/strong&gt; les IP's entrantes via un Security Group ?&lt;br&gt;
La &lt;strong&gt;rotation&lt;/strong&gt; des clés SSH&lt;/p&gt;

&lt;p&gt;ça sera pas mal de travail au quotidien...&lt;/p&gt;

&lt;p&gt;Alors comment accéder a son instance privée de manière sécurisée ?&lt;/p&gt;

&lt;p&gt;Avec le navigateur, directement, vous pouvez utiliser &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html"&gt;AWS Systems Manager Session Manager&lt;/a&gt; ou meme dans certains cas &lt;a href="https://aws.amazon.com/fr/blogs/aws/troubleshoot-boot-and-networking-issues-with-new-ec2-serial-console/"&gt;EC2 Serial Console&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sinon concrètement ? comment accéder à une base de donnée sur AWS (Redshift, Aurora, DocumentDB, RDS,...) ou se connecter en SSH sans utiliser sur l'EC2 de destination Session Manager ?&lt;/p&gt;

&lt;h3&gt;
  
  
  SSM-Bastion
&lt;/h3&gt;

&lt;p&gt;Je suis très heureux de partager avec vous SSM-Bastion, comment cela fonctionne-t-il ?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vCu7o7u6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ulu5mr5cibjmqe5nhht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vCu7o7u6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ulu5mr5cibjmqe5nhht.png" alt="SSM-Bastion"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Architecture de SSM-Bastion&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Voyons ça de plus prés, premièrement l'instance &lt;strong&gt;n'as pas besoin d'être exposée publiquement (via un subnet public)&lt;/strong&gt;&lt;br&gt;
Résilience et réduction de cout avec une &lt;strong&gt;Spot instance&lt;/strong&gt; dans un &lt;strong&gt;Auto Scaling group&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;1/ Via un &lt;a href="https://github.com/Menahem1/SSM-Bastion/tree/main/script"&gt;script&lt;/a&gt;, l'utilisateur qui souhaite se connecter lance une commande de port forwarding, authentifié par son AWS Access Key et Secret Key.&lt;br&gt;
L'instance EC2 qui est déployée en tant que SSM-Bastion doit communiquer avec des points de terminaison AWS, lorsque vous vous trouver dans un &lt;strong&gt;VPC sans NAT Gateway&lt;/strong&gt; vous allez avoir besoin des endpoints suivants : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NaYMbc_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wocrbjc8ppodzoxlgm3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NaYMbc_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wocrbjc8ppodzoxlgm3l.png" alt="SSM-Bastion Endpoints"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note : Pour KMS vous allez avoir besoin de l'activer à travers la &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-enable-encryption.html"&gt;console&lt;/a&gt; ou par &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html"&gt;cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2/ Après que l'utilisateur ait lancé le port forwarding command (via Run Command) l'EC2 SSM-Bastion crée le tunnel vers la destination&lt;/p&gt;

&lt;p&gt;3/ Une fois le tunnel créé (via socket), la session est ouverte sur le poste local, permettant de s'y connecter a partir du localhost&lt;/p&gt;

&lt;h3&gt;
  
  
  Lancement d'une connexion - exemple
&lt;/h3&gt;

&lt;p&gt;Pour lancer une session avec le script il existe 2 possibilités&lt;/p&gt;

&lt;p&gt;1/ Session interactive (sans paramètre dans la commande)&lt;br&gt;
&lt;code&gt;./ssm-bastion-port-forwarding.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E1kuUbLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs1q5lqdfliogwj6jt4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E1kuUbLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs1q5lqdfliogwj6jt4l.png" alt="Session interactive"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Une connexion vers une EC2 privée avec l'IP 10.0.0.1 écoutant sur le port 3006, le port ouvert sur la machine sera 9090&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2/ Avec arguments dans la ligne de commande &lt;br&gt;
Vous pouvez lancer directement une session avec les arguments dans la ligne de commande, ci-dessous les paramètres nécessaires&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./ssm-bastion-port-forwarding.sh ip_ou_dns_destination port_destination port_source&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XoZcAVwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbel1jgr9knnmesftqsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XoZcAVwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbel1jgr9knnmesftqsp.png" alt="avec-arguments"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Example d'une connexion avec une destination secrete le port de destination est le 4567, le port ouvert sur la machine locale est 8768&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Après ça vous pouvez utiliser votre connexion sur &lt;em&gt;localhost:port_ouvert&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vous pouvez retrouver le code Terraform ainsi que lscript Bash sur &lt;a href="https://github.com/Menahem1/SSM-Bastion"&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>securite</category>
      <category>bastion</category>
      <category>architecture</category>
    </item>
    <item>
      <title>SSM-Bastion : How to connect on AWS Private instance's from Internet</title>
      <dc:creator>Ménahem Houri</dc:creator>
      <pubDate>Thu, 08 Apr 2021 15:17:30 +0000</pubDate>
      <link>https://dev.to/menahem/ssm-bastion-how-to-connect-on-aws-private-instance-s-from-internet-2hmf</link>
      <guid>https://dev.to/menahem/ssm-bastion-how-to-connect-on-aws-private-instance-s-from-internet-2hmf</guid>
      <description>&lt;p&gt;One of the classical challenge in Security and Accessibility of a project in AWS when you want to access on EC2 or private Databases is with Bastion.&lt;/p&gt;

&lt;p&gt;Bastion is the central point to access its private instances.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OzMl2JNw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sp1bg2dclfwj11y38cbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OzMl2JNw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sp1bg2dclfwj11y38cbj.png" alt="SSH Bastion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Classical architecture of a bastion via SSH Tunnel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What about &lt;strong&gt;resilience&lt;/strong&gt; ? &lt;br&gt;
&lt;strong&gt;filter&lt;/strong&gt; inbound ip's via Security Group ? &lt;br&gt;
SSH key &lt;strong&gt;rotation&lt;/strong&gt; ?&lt;/p&gt;

&lt;p&gt;it will be a lot of extra work...&lt;/p&gt;

&lt;p&gt;So how to access to your private instance securely ?&lt;/p&gt;

&lt;p&gt;With browser, directly, you can use &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html"&gt;AWS Systems Manager Session Manager&lt;/a&gt; or also in some cases with &lt;a href="https://aws.amazon.com/fr/blogs/aws/troubleshoot-boot-and-networking-issues-with-new-ec2-serial-console/"&gt;EC2 Serial Console&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, but how to access a database (Redshift, Aurora, DocumentDB, RDS,...) ? or still connect in SSH without using session manager directly in the EC2 of destination ?&lt;/p&gt;

&lt;h3&gt;
  
  
  SSM-Bastion
&lt;/h3&gt;

&lt;p&gt;I am very happy to share with you SSM-Bastion, how it works ?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vCu7o7u6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ulu5mr5cibjmqe5nhht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vCu7o7u6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ulu5mr5cibjmqe5nhht.png" alt="SSM-Bastion"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Architecture of SSM-Bastion&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let's see it more closely, first the instance will &lt;strong&gt;not need to be exposed in public subnet&lt;/strong&gt;.&lt;br&gt;
Resilience and cost savings with &lt;strong&gt;Spot instances&lt;/strong&gt; in an &lt;strong&gt;Auto Scaling Group&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;1/ Via a &lt;a href="https://github.com/Menahem1/SSM-Bastion/tree/main/script"&gt;script&lt;/a&gt; the user launch a port forwarding command, authenticated by its AWS Access Key and Secret Key.&lt;br&gt;
EC2 instance need to communicate with some AWS endpoint's, so if you're in an &lt;strong&gt;isolated VPC without NAT Gateway&lt;/strong&gt; you will need the following endpoints :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NaYMbc_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wocrbjc8ppodzoxlgm3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NaYMbc_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wocrbjc8ppodzoxlgm3l.png" alt="SSM-Bastion Endpoints"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note for KMS you will need to activate it via the &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-enable-encryption.html"&gt;console&lt;/a&gt; or &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html"&gt;cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2/ After the user launch a port forwarding command (via Run Command) the EC2 SSM-Bastion creates a tunnel to the destination&lt;/p&gt;

&lt;p&gt;3/ After the tunnel (via socket) is created, a session is opened on the local laptop to be able to connect to it from localhost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Launch a connection - Example
&lt;/h3&gt;

&lt;p&gt;For launching a port forwarding session with the script you have 2 alternatives.&lt;/p&gt;

&lt;p&gt;1/ Interactive session &lt;br&gt;
&lt;code&gt;./ssm-bastion-port-forwarding.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E1kuUbLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs1q5lqdfliogwj6jt4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E1kuUbLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs1q5lqdfliogwj6jt4l.png" alt="Interactive session"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A connection in a private EC2 with IP 10.0.0.1 and listening port 3006, the port open in the laptop will be 9090&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2/ Line arguments&lt;br&gt;
You can launch directly the session in line arguments, with the following parameters&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./ssm-bastion-port-forwarding.sh hostname_destination port_destination port_source&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XoZcAVwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbel1jgr9knnmesftqsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XoZcAVwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbel1jgr9knnmesftqsp.png" alt="Line arguments"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Example of a connection with a mysterious endpoint and port of destination 4567, port open in the laptop 8768&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After that you can use your connection on &lt;em&gt;localhost:port_open&lt;/em&gt; and... enjoy 🙂&lt;/p&gt;

&lt;p&gt;You can find the Terraform and Bash script in &lt;a href="https://github.com/Menahem1/SSM-Bastion"&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>bastion</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
