Blog

Club Cloud Geschichten #3

Jacco Kulman

Aktualisiert Oktober 17, 2025
2 Minuten

Demo-Zeit

Dieses Mal wird Jacco in Club Cloud Stories einige interessante AWS-Funktionen anhand der AWS-Konsole vorführen. Wir hoffen, dass Sie die Schritte nachvollziehen können und dabei etwas Neues lernen! Die Demo zeigt, wie Sie eine EC2-Instanz in einem vollständig privaten Netzwerk betreiben (keine Internetverbindung nach innen oder außen) und sich dennoch über den AWS Session Manager anmelden können. Anschließend werden wir ein Bash-Skript verwenden, um einen MySQL-Tunnel zur Aurora Serverless-Datenbank zu erstellen. Magie. Sie müssen ein paar Hürden überwinden, damit es funktioniert! Viel Spaß beim Anschauen!

Video

Liste der Inhaltsstoffe

  • 1 VPC (kein NATS oder IGW, mit 2 privaten Subnetzen)
  • 1 EC2-Instanz (t3.micro, Amazon Linux 2, optimiert)
  • 1 IAM-Rolle / Instanzprofil
  • 3 VPC-Endpunkte (ssm, ec2messages, ssmmessages)
  • 1 RDS mit Aurora Serverless
  • 2 Sicherheitsgruppen (selbst referenzierend)
  • 1 Bash-Skript (vorgekocht) ...und hier ist das endgültige Skript, mit dem der Tunnel zur Datenbank erstellt wurde! Bei den aufgeführten Befehlen wird davon ausgegangen, dass Sie die Dinge unter eu-central-1 eingerichtet haben, dass die EC2 den Namen bastio trägt und dass das verwendete Linux-Image ein ec2-user Login hat.
INSTANCE=$(aws ec2 describe-instances --region eu-central-1 --query "Reservations[*].Instances[*].{Instance:InstanceId}" --filter Name=tag:Name,Values=bastion --output text)
ENDPOINT=$(aws rds describe-db-cluster-endpoints --region eu-central-1 --query "DBClusterEndpoints[*].Endpoint" --output text)

echo $INSTANCE

ssh-keygen -N '' -f /tmp/temp <<< y

aws ec2-instance-connect send-ssh-public-key 
  --instance-id $INSTANCE 
  --availability-zone eu-central-1a 
  --instance-os-user ec2-user 
  --ssh-public-key file:///tmp/temp.pub --region eu-central-1

PROCESS=$(lsof -t -i :5432)

if [ ! -z "$PROCESS" ]
then
    kill $PROCESS
fi

ssh -i /tmp/temp 
  -Nf -M 
  -L 5432:$ENDPOINT:3306 
  -o "UserKnownHostsFile=/dev/null" 
  -o "StrictHostKeyChecking=no" 
  -o ProxyCommand="aws ssm start-session --target %h --document AWS-StartSSHSession --parameters portNumber=%p --region=eu-central-1" 
  ec2-user@$INSTANCE

Und die Benutzerdaten, die für das Booten von EC2 verwendet werden:

#!/usr/bin/env bash
exec > >(tee /var/log/user-data.log | logger -t user-data -s 2>/dev/console) 2>&1

##
## Setup SSH Config
##
cat <<"__EOF__" > /home/${ssh_user}/.ssh/config
Host *
    StrictHostKeyChecking no
__EOF__
chmod 600 /home/${ssh_user}/.ssh/config
chown ${ssh_user}:${ssh_user} /home/${ssh_user}/.ssh/config

##
## Attention!! We are allowing portforwarding
##
sed -i -e '/^#AllowTcpForwarding/s/^.*$/AllowTcpForwarding yes/' /etc/ssh/sshd_config

##
## Enable SSM
##
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
systemctl status amazon-ssm-agent

Frühere Episoden

Cloud Club Geschichten #2 Cloud Club Geschichten #1 Juli 2021 Mai 2021 April 2021

Verfasst von

Jacco Kulman

Jacco is a Cloud Consultant at Binx.io. As an experienced development team lead he coded for the banking- and hospitality- and media-industries. He is a big fan of serverless architectures. In his free time he reads science fiction, contributes to open source projects and enjoys being a life-long-learner.

Contact

Let’s discuss how we can support your journey.