Blog
Konforme Infrastruktur mit Infrastruktur als Code

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
virtualizationTypeaufparavirtualgesetzt 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.
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.
Inspector kann Ihre Instanz auch anhand der CIS-Härtungs-Baseline überprüfen.
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
Aktualisieren des Kernels
Schauen wir uns zunächst an, welchen Kernel wir laufen haben:
sh-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:
- Erstellen Sie Ihr eigenes, aktuelles Basis-AMI.
- 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.
Unsere Ideen
Weitere Blogs
Contact



