Blog

Konforme Infrastruktur mit Infrastruktur als Code

Joris Conijn

Joris Conijn

Aktualisiert Oktober 15, 2025
6 Minuten

Bei der Nutzung von Rechenleistung haben Sie eine Menge Optionen. Eine dieser Optionen ist Amazon EC2. In einer Welt, in der mehr und mehr Arbeitslasten serverlos werden. Vielleicht haben Sie immer noch einen Anwendungsfall, der bei EC2 besser aufgehoben ist. Aber wie können Sie EC2 mit Compliance und Sicherheit kombinieren? In diesem Blogbeitrag werden wir untersuchen, wie wir einen konformen und sicheren EC2-Stack aufbauen können.

Einhaltung der Vorschriften in AWS

Wenn wir von Compliance sprechen, meinen wir eigentlich AWS Config. AWS Config ist der Service, mit dem Sie überprüfen können, ob die Infrastruktur konform ist. Ich habe in der Vergangenheit einen Blog darüber geschrieben, wie Sie Ihre eigenen Regeln schreiben können. AWS bietet jedoch von Haus aus die AWS Foundational Security Best Practices v1.0.0. Dieser Standard enthält einige Konfigurationsregeln für EC2:

  • ec2-instance-multiple-eni-check, diese Kontrolle prüft, ob die Amazon EC2-Instanz mehrere ENI/EFA verwendet. Diese Kontrolle ist erfolgreich, wenn ein einzelner Netzwerkadapter verwendet wird.
  • ec2-paravirtual-instance-check, diese Kontrolle prüft, ob der EC2-Virtualisierungstyp paravirtuell ist. Die Kontrolle schlägt für eine EC2-Instanz fehl, wenn virtualizationType auf paravirtual gesetzt ist.
  • ec2-instance-no-public-ip prüft diese Kontrolle, ob EC2-Instanzen eine öffentliche IP-Adresse haben. Die Kontrolle schlägt fehl, wenn das Feld publicIp in der Instanzkonfiguration vorhanden ist. Diese Kontrolle gilt nur für IPv4-Adressen.
  • ec2-imdsv2-check, dieses Steuerelement überprüft, ob Ihre EC2-Instanzen IMDSv2 konfiguriert haben. Das Steuerelement funktioniert, wenn HttpTokens für IMDSv2 auf erforderlich gesetzt ist. Das Steuerelement schlägt fehl, wenn HttpTokens auf optional eingestellt ist.
  • ec2-instance-managed-by-ssm, diese Kontrolle überprüft, ob die EC2-Instanzen von SSM verwaltet werden

Die ersten 3 sind einfach, mit einem ordentlichen VPC-Design und der Verwendung vernünftiger Standardeinstellungen werden Sie die Anforderungen erfüllen. Aber für die letzten 2 müssen Sie einige zusätzliche Maßnahmen ergreifen.

Beispiel für AWS-Konfigurationsregeln

Sicherheit in AWS

Sicherheit ist ein breites Thema und kann viele verschiedene Dinge umfassen. In diesem Blog werde ich mich nur auf die EC2-Instanz selbst konzentrieren. Das bedeutet, dass auch die Patch-Verwaltung und die Härtung zum Thema gehören. Der Service, den AWS hierfür anbietet, heißt AWS Inspector. Dieses Tool scannt die EC2-Instanz auf bekannte Schwachstellen. Inspector meldet die Ergebnisse über die AWS-Konsole. Es ist auch mit Security Hub integriert. Hier können Sie alle Ihre sicherheitsrelevanten Erkenntnisse von einem einzigen Ort aus verwalten.

Beispiel für die Ergebnisse des AWS-Inspektors

Inspector kann Ihre Instanz auch anhand der CIS-Härtungs-Baseline überprüfen.

Beispiel für einen CIS-Scan

Warum sollte ich Infrastruktur als Code verwenden?

Wenn Sie IaC (Infrastruktur als Code) verwenden, schaffen Sie eine wiederholbare und vorhersehbare Infrastruktur. Warum ist das so wichtig? Nehmen wir an, Sie erstellen eine EC2-Instanz und verwenden die Konsole, um sie zu starten. Nun meldet AWS Config, dass IMDSv2 nicht erzwungen wird. Und dass die Instanz nicht von SSM (AWS Systems Manager) verwaltet wird. Das liegt daran, dass Sie all diese zusätzlichen Schritte vergessen haben. Der Mensch ist nicht dafür geschaffen, an alle Optionen zu denken, die wir berücksichtigen müssen. IaC ist so konzipiert, dass es dies für Sie erledigt: Sie definieren eine Vorlage. Sie stellen die Vorlage bereit und das Endergebnis ist das, was in der Vorlage definiert ist.

Wenn Sie Ihre Vorlagen so gestalten, dass sie konform und sicher sind. Die Infrastruktur, die Sie einsetzen, wird konform und sicher sein.

Lassen Sie uns eine konforme und sichere Vorlage erstellen!

Meine IaC-Technologie der Wahl ist AWS CloudFormation. Die Beispiele, die ich vorstellen werde, sind also in CloudFormation erstellt. Aber dies kann auch mit jeder anderen IaC-Technologie erreicht werden, die Sie verwenden möchten.

Einrichten eines Instanzprofils

Wir möchten, dass die EC2-Instanz von SSM verwaltet wird. Dazu müssen wir eine IAM-Rolle und ein Instanzprofil erstellen. Wir werden 2 verwaltete Richtlinien anhängen:

  • AmazonSSMManagedInstanceCore, ermöglicht die Verwaltung der Instanz durch SSM.
  • AmazonInspector2ManagedCispolicy, ermöglicht die Durchführung des CIS-Basisscans.
 Role:
   Type: AWS::IAM::Role
   Properties:
     AssumeRolePolicyDocument:
       Version: 2012-10-17
       Statement:
         - Effect: Allow
           Action: sts:AssumeRole
           Principal:
             Service: ec2.amazonaws.com
     ManagedPolicyArns:
       - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
       - arn:aws:iam::aws:policy/AmazonInspector2ManagedCispolicy

 InstanceProfile:
   Type: AWS::IAM::InstanceProfile
   Properties:
     Roles:
       - !Ref Role

Einrichten der EC2-Instanz

Wenn Sie eine EC2-Instanz starten, benötigen wir eine Sicherheitsgruppe. Wir möchten außerdem, dass unsere EC2-Instanz von SSM verwaltet wird. Der SSM Agent ist in Amazon Linux 2 vorinstalliert. Er muss in der Lage sein, ausgehende Verbindungen über HTTPS herzustellen. Aus diesem Grund fügen wir 0.0.0.0/0 auf Port 443 für den ausgehenden Datenverkehr hinzu.

Außerdem möchten wir, dass IMDSv2 erforderlich ist. Wir können dies in der Startvorlage MetadataOptions konfigurieren. Um sicherzustellen, dass alle Sicherheitsupdates während des ersten Starts installiert werden. Wir nehmen die Option yum update -y --security in die Benutzerdaten auf.

Sie können nun die Startvorlage verwenden, um eine EC2-Instanz zu erstellen. Oder Sie verwenden eine Auto-Scaling-Gruppe, um eine oder mehrere EC2-Instanzen zu starten.

 InstanceSecurityGroup:
   Type: AWS::EC2::SecurityGroup
   Properties:
     GroupDescription: Security group for the test instance
     VpcId: "{{resolve:ssm:/landingzone/vpc/vpc-id}}"
     SecurityGroupEgress:
       - Description: Allow outbound connectivity to port 443.
         IpProtocol: tcp
         FromPort: 443
         ToPort: 443
         CidrIp: 0.0.0.0/0

 LaunchTemplate:
   Type: AWS::EC2::LaunchTemplate
   Properties:
     LaunchTemplateData:
       IamInstanceProfile:
         Arn: !GetAtt InstanceProfile.Arn
       ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
       InstanceType: t3.micro
       SecurityGroupIds:
         - !Ref InstanceSecurityGroup
       MetadataOptions:
         HttpTokens: required
       UserData:
         Fn::Base64: !Sub |-
           #!/bin/bash -x
           yum update -y --security

 Instance:
   Type: AWS::EC2::Instance
   Properties:
     LaunchTemplate:
       LaunchTemplateId: !GetAtt LaunchTemplate.LaunchTemplateId
       Version: !GetAtt LaunchTemplate.LatestVersionNumber
     SubnetId: "{{resolve:ssm:/landingzone/vpc/private-subnet-1-id}}"

Die Instanz aufdrehen

Wenn Sie die beiden Schnipsel kombinieren, können Sie eine konforme EC2-Instanz aufsetzen. Diese Instanz hat alle aktuellen Sicherheitspatches installiert. Wenn Sie jedoch einen Blick in Inspector werfen, werden Sie feststellen, dass immer noch einige Beanstandungen gemeldet werden.

Die Feststellungen, die zum Zeitpunkt des Schreibens auftauchten, waren kernelbezogen. Um dieses Problem zu beheben, muss ich also den Kernel aktualisieren. Wenn Sie Ihre EC2-Instanz in der Konsole aufrufen, werden Sie die Schaltfläche Verbinden sehen. Damit wird eine Shell-Sitzung zu Ihrer Instanz erstellt:

Beispiel für die Verbindung mit einer EC2-Instanz

Aktualisieren des Kernels

Schauen wir uns zunächst an, welchen Kernel wir laufen haben:

s​​h-4.2$ uname -r
4.14.336-253.554.amzn2.x86_64
sh-4.2$

Schauen wir uns nun an, welche Kernel verfügbar sind:

sh-4.2$ amazon-linux-extras | grep kernel
49  kernel-5.4               available    [ =stable ]
55  kernel-5.10              available    [ =stable ]
62  kernel-5.15              available    [ =stable ]
sh-4.2$

Wir installieren die neueste Version des Kernels 5.15 mit dem folgenden Befehl:

sh-4.2$ sudo amazon-linux-extras install kernel-5.15

Da ein Kernel-Update einen Neustart erfordert, müssen wir die Instanz neu starten:

sudo reboot

Alles erledigt!

Vermeidung des Kernel-Updates

Das Problem mit dem Kernel-Update ist der erforderliche Neustart. Sie haben nur zwei Möglichkeiten, diesen Schritt zu vermeiden:

  1. Erstellen Sie Ihr eigenes, aktuelles Basis-AMI.
  2. Verwenden Sie das Amazon Linux 2023 AMI mit einer neueren Kernel-Version.

Die Pflege eines Basis-AMI ist mit viel zusätzlichem Overhead verbunden. Ich empfehle daher, immer die neuere Version zu verwenden, die die neueren Kernel-Versionen nutzt.

Aber wenn Sie Ihre Images mit Hilfe der CIS-Benchmarks härten müssen. Möglicherweise müssen Sie ohnehin anfangen, Ihre eigenen Images zu pflegen. Es gibt CIS-gehärtete Images, die über den Marktplatz gegen Aufpreis erhältlich sind.

Fazit

IaC (Infrastructure as Code) kann Ihnen helfen, eine konforme und sichere Infrastruktur aufzubauen. Es beseitigt den menschlichen Aspekt, dass Sie vergessen, bestimmte Optionen zu konfigurieren. Mit IaC haben Sie jedes Mal, wenn Sie dieselbe Vorlage aufsetzen, ein vorhersehbares Ergebnis. Das macht es zuverlässig und ist weniger zeitaufwändig. Ein weiterer Vorteil ist, dass Sie keine Konfigurationsregeln auslösen, die als nicht regelkonform eingestuft werden.

Foto von Hitesh Choudhary

Verfasst von

Joris Conijn

Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.

Contact

Let’s discuss how we can support your journey.