m346/KN02/challenge_a/KN02a.md
2024-10-15 12:24:42 +02:00

21 KiB

TBZ Banner

Inhaltsverzeichnis KN02 Challenge A)

[TOC]


Intro

Beachten Sie die allgemeinen Informationen zu den Abgaben.

Ausgangslage:

verwenden Sie FÜR den folgenden Challenge (bestehend aus zwei Labs) das AWS Academy "Learner Lab". Ab jetzt arbeiten Sie immer im Learner Lab - Ausser explizit anders angegeben.

  • Der erste Teil-Challenge heisst EC2 Einstieg. Dieses Lab ist der erste Kompetenznachweis dieses Challenges (Details unten)
  • Das zweite Teil-Challenge heisst S3 Einstieg. Dieses Lab ist der zweite Kompetenznachweis dieses Challenges (Details unten).
  • Führen Sie beide Labs durch und achten Sie auf die jeweiligen Punkte unter Leistungsnachweis

Challenges

1. Teil-Challenge: EC2 Einstieg

Führen Sie alle Tasks durch. Sie erstellen die Screenshots der verschiedenen Bereiche für Ihre Abgabe nachdem Sie alle Schritte des Challenges durchgeführt haben.

1. Task: Erstellen und Benennen einer EC2-Instanz

🔘 Schritt 1: Navigieren Sie zum EC2-Service

  • Gehen Sie zur AWS Management Console.
  • Wählen Sie im Services-Menü den Bereich Compute und dann EC2.

🔘 Schritt 2: Instanz starten

  • Klicken Sie auf die Schaltfläche Launch instance in der Mitte der Seite.
  • Wählen Sie Launch instance aus dem Dropdown-Menü.

🔘 Schritt 3: Instanz benennen

  • Geben Sie im Feld unter Name and tags den Namen Web Server 1 ein.
  • Dieser Name wird als ein Tag gespeichert, bei dem der "Key" Name und der "Value Web Server 1 ist.

📌 Hinweis zu Tags:

  • Tags helfen Ihnen, Ihre AWS-Ressourcen auf verschiedene Weise zu kategorisieren, z. B. nach Zweck, Eigentümer oder Umgebung.
  • Dies ist besonders nützlich, wenn Sie viele Ressourcen desselben Typs haben, da Sie eine bestimmte Ressource schnell anhand der vergebenen Tags identifizieren können.
  • Jeder Tag besteht aus einem Key und einem Value, die Sie selbst definieren.
  • Der Name ist einfach ein weiteres Tag. Der Schlüssel für dieses Tag ist Name, und der Wert lautet Web Server 1.

2. Task: Anwendungs- und Betriebssystem-Images

🔘 Schritt 4: Wählen Sie eine AMI aus, um die Instanz zu erstellen

  • In der Liste der verfügbaren Quick Start AMIs bleibt die standardmäßig ausgewählte Amazon Linux AMI ausgewählt.
  • Behalten Sie ebenfalls das standardmäßig ausgewählte Amazon Linux 2023 AMI x86_64 (HVM) bei.
  • Der Typ des ausgewählten Amazon Machine Image (AMI) bestimmt das Betriebssystem (OS), das auf der gestarteten EC2-Instanz läuft. In diesem Fall haben Sie Amazon Linux 2023 als Gastbetriebssystem ausgewählt.

3. Task: Instanztyp wählen

🔘 Schritt 5: Geben Sie einen Instanztyp an

  • Im Instance type-Panel bleibt die standardmäßig ausgewählte t2.micro-Instanz ausgewählt.
  • Der Instance Type definiert die Hardware-Ressourcen, die der Instanz zugewiesen werden. Dieser Instanztyp verfügt über 1 virtuelle CPU (vCPU) und 1 GiB Speicher.

4. Task: Wählen Sie ein Schlüsselpaar (Key pair)

🔘 Schritt 6: Wählen Sie das Schlüsselpaar (Key pair), das der Instanz zugeordnet wird:

  • Wählen Sie im Menü Key pair name das Schlüsselpaar vockey aus.
  • Das ausgewählte Schlüsselpaar vockey ermöglicht es Ihnen, nach dem Start der Instanz über SSH eine Verbindung herzustellen. Obwohl Sie dies in diesem Lab nicht tun müssen, ist es erforderlich, ein vorhandenes Schlüsselpaar zu identifizieren oder ein neues zu erstellen, wenn Sie eine Instanz starten.

5. Task: Netzwerkeinstellungen

🔘 Schritt 7: Bearbeiten der Netzwerkeinstellungen:

  • Wählen Sie neben Network settings die Option Edit.

🔘 Schritt 8: Standardeinstellungen beibehalten:

  • Behalten Sie die Standard-VPC- und Subnetz-Einstellungen bei. Lassen Sie die Einstellung Auto-assign public IP auf Enable.
  • Das Netzwerk gibt die Virtual Private Cloud (VPC) an, in die Sie die Instanz starten möchten. Sie können mehrere Netzwerke haben, z. B. eines für die Entwicklung, ein zweites für das Testen und ein drittes für die Produktion.

🔘 Schritt 9: Firewall (Security Group) konfigurieren:

  • Lassen Sie die Standardauswahl Create security group aktiviert.

🔘 Schritt 10: Konfigurieren einer neuen Security Group:

  • Lassen Sie die Standardeinstellung Create a new security group ausgewählt.
  • Security group name: Löschen Sie den Text und geben Sie Web Server ein.
  • Description: Löschen Sie den Text und geben Sie Security group for my web server ein.
  • Wählen Sie Remove, um die Standardregel für eingehenden SSH-Verkehr zu entfernen.

📌 Hinweis:

  • Sie werden später in diesem Lab eine andere Regel für eingehenden Verkehr - eine sogenannte Inbound rule - konfigurieren.
  • Eine Security Group fungiert als virtuelle Firewall, die den Datenverkehr für eine oder mehrere Instanzen steuert. Beim Start einer Instanz können Sie eine oder mehrere Security Groups mit der Instanz verknüpfen. Sie fügen jeder Security Group Regeln hinzu, die den Datenverkehr zu oder von den zugehörigen Instanzen zulassen. Sie können die Regeln einer Security Group jederzeit ändern. Neue Regeln werden automatisch auf alle mit der Security Group verknüpften Instanzen angewendet.

6. Task: Speicher konfigurieren

🔘 Schritt 11: Im Abschnitt "Configure storage":

  • Behalten Sie die Standardeinstellungen bei.

📌 Hinweis:

  • Sie werden die Amazon EC2-Instanz mit einem standardmäßigen Elastic Block Store (EBS)-Datenträger starten. Dieser wird Ihr Root-Volume (auch als Boot-Volume bekannt) sein, auf dem das zuvor angegebene Amazon Linux 2023-Gastbetriebssystem gehostet wird.
  • Es wird auf einer General Purpose SSD (gp2)-Festplatte mit einer Größe von 8 GiB laufen.
  • Sie könnten zusätzliche Speicher-Volumes hinzufügen, aber das ist in diesem Lab nicht erforderlich (kommt in einem späteren Challenge).

7. Task: Erweiterte Details

🔘 Schritt 12: Konfigurieren Sie ein Skript, das beim Start der Instanz ausgeführt wird:

  • Erweitern Sie das Panel Advanced details.
  • Scrollen Sie zum Ende der Seite und kopieren Sie den unten stehenden Code in das Feld User data.
  • Achtung: Ersetzen Sie den Kürzel CAL mit den ersten drei Buchstaben ihres Nachnamens.
    #!/bin/bash
    yum update -y
    yum -y install httpd
    systemctl enable httpd
    systemctl start httpd
    echo '<html><h1>Modul 346 Challenge KN02a: CAL</h1></html>' > /var/www/html/index.html
    

📌 Details zum Skript:

  • Dieses Bash-Skript wird mit Root-Benutzerrechten auf dem Gastbetriebssystem der Instanz ausgeführt.
  • Es wird automatisch ausgeführt, wenn die Instanz zum ersten Mal startet.
  • Das Skript führt folgende Aktionen aus:
    • Aktualisiert den Server
    • Installiert einen Apache Webserver (httpd)
    • Konfiguriert den Webserver so, dass er automatisch beim Booten startet
    • Startet den Webserver
    • Erstellt eine einfache Webseite

8. Task: Überprüfen Sie die Instanz und starten Sie diese

🔘 Schritt 13: Instanz starten

  • Wählen Sie am Ende des Summary-Panels auf der rechten Seite des Bildschirms das orange Feld Launch instance.
  • Sie werden eine Success message (Erfolgsnachricht) sehen.

🔘 Schritt 14: Alle Instanzen anzeigen

  • Wählen Sie das orange Feld View all instances.
  • Die Instanz wird zunächst im Pending-Zustand angezeigt, was bedeutet, dass sie gestartet wird. Der Zustand ändert sich dann auf Running, was anzeigt, dass die Instanz mit dem Booten begonnen hat. Es kann einige Minuten dauern, bis die Instanz hochgefahren ist.

🔘 Schritt 15: Details zur Instanz überprüfen

  • Wählen Sie die Instanz Web Server 1 aus und überprüfen Sie die Informationen im Tab Details, der im unteren Bereich angezeigt wird.
  • Beachten Sie, dass die Instanz eine öffentliche IPv4-Adresse hat. Sie können diese IP-Adresse verwenden, um von außerhalb mit der Instanz zu kommunizieren.

🔘 Schritt 16: Warten auf den vollständigen Start

  • Bevor Sie fortfahren, warten Sie, bis Ihre Instanz Folgendes anzeigt:
    • Instance state: Running
    • Status check: 2/2 checks passed

📌 Hinweis: Dies kann einige Minuten in Anspruch nehmen. Wählen Sie das Aktualisieren-Symbol oben auf der Seite alle 30 Sekunden oder so, um schneller über den neuesten Status der Instanz informiert zu werden.

9. Task: Greifen Sie auf Ihre EC2-Instanz zu

Als Sie Ihre EC2-Instanz gestartet haben, haben Sie ein Skript bereitgestellt, das einen Webserver installiert und eine einfache Webseite erstellt hat. In dieser Aufgabe werden Sie versuchen, auf den Inhalt des Webservers zuzugreifen.

🔘 Schritt 17: Öffentliche IPv4-Adresse kopieren

  • Kopieren Sie den Wert der Public IPv4 address Ihrer Instanz aus dem Tab Details in Ihre Zwischenablage.

📌 Hinweis: Eine öffentliche Adresse bedeutet, dass die Instanz von Internet aus erreichbar ist. Jede Instanz, die eine öffentliche IP-Adresse erhält, erhält auch einen externen DNS-Hostnamen, zum Beispiel: ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com. AWS löst einen externen DNS-Hostnamen in die öffentliche IP-Adresse der Instanz auf, wenn die Kommunikation von außerhalb ihrer VPC kommt. Wenn die Kommunikation von innerhalb der VPC erfolgt, wird der DNS-Hostnamen in die private IPv4-Adresse aufgelöst.

🔘 Schritt 18: Im Webbrowser zugreifen

  • Öffnen Sie einen neuen Tab in Ihrem Webbrowser, fügen Sie die öffentliche IP-Adresse, die Sie gerade kopiert haben, ein und drücken Sie die Eingabetaste.

📌 Hinweis: Die Webseite wird nicht geladen. Sie müssen die Security Group (Sicherheitsgruppe) noch mit einer Inbound rule ergänzen, um auf die Seite zugreifen zu können.

🔘 Schritt 19: Aktualisieren Sie die Security Group Sie können nicht auf Ihren Webserver zugreifen, da die Sicherheitsgruppe den eingehenden Datenverkehr über Port 80, der für HTTP-Webanfragen verwendet wird, nicht zulässt. In dieser Aufgabe aktualisieren Sie die Sicherheitsgruppe.

🔘 Schritt 20: Zur EC2-Management-Konsole zurückkehren

  • Kehren Sie zum Browser-Tab der EC2-Management-Konsole zurück.

🔘 Schritt 21: Sicherheitsgruppen auswählen

  • Wählen Sie im linken Navigationsbereich unter Network & Security die Option Security Groups.

🔘 Schritt 22: Webserver-Sicherheitsgruppe auswählen

  • Wählen Sie die Sicherheitsgruppe Web Server aus, die Sie beim Start Ihrer EC2-Instanz erstellt haben.

🔘 Schritt 23: Eingehende Regeln anzeigen

  • Wählen Sie im unteren Bereich den Tab Inbound rules.

Aufgabe 11: Erstellen Sie eine eingehende Regel

🔘 Schritt 24: Eingehende Regeln bearbeiten

  • Wählen Sie Edit inbound rules und dann Add rule.

🔘 Schritt 25: Konfigurieren Sie die Regel

  • Konfigurieren Sie Folgendes:
    • Type: HTTP
    • Source: Anywhere-IPv4
  • Wählen Sie Save rules.

📌 Hinweis: Die neue eingehende HTTP-Regel erstellt einen Eintrag für IPv4-IP (0.0.0.0/0) und IPv6-IP-Adressen (::/0).

FOLGENDES ÜBERARBEITEN

BIS HIER

Ziel der Übung

🔔 Erste Hands-on Erfahrung mit dem AWS Service EC2 (Elastic Compute Cloud)

Leistungsnachweis
  • HTML-Seite, inkl. URL
  • Liste der EC2-Instanzen
  • Details der Web Server-Instanz (öffentliche IP sichtbar)
  • Security-Group: Liste der Inbound-Regeln.

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.

b) 2. Lab - S3 Einstieg

Führen Sie alle Schritte durch. Sie erstellen die Screenshots der verschiedenen Bereiche für Ihre Abgabe nachdem Sie alle Schritte des Challenges durchgeführt haben.

Ziel der Übung

🔔 Erste Hands-on Erfahrung mit dem AWS Service S3 (Object Storage)

Leistungsnachweis
  • Liste der Buckets.
  • HTML-Seite, inkl. URL.
  • Liste der Dateien im Bucket.
  • Eigenschaften von "Static website hosting".

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.





ALLES WAS HIER KOMMT, AM ENDE LÖSCHEN

B) Zugriff mit SSH-Key

Ausgangslage:

Wechseln Sie nun den Kurs und verwenden Sie "Learner Lab". Ab jetzt arbeiten Sie immer im Learner Lab - Ausser explizit anders angegeben.

Unter Quellen finden Sie ein Dokument, welches die Unterschiede zwischen Passwort und SSH-Key beschreibt. Lesen Sie sich kurz ein, wenn Sie möchten. Wir werden grundsätzlich kein Passwort verwenden, sondern immer SSH Keys.

Sie werden nun gemäss der folgenden Anleitung eine EC2-Instanz und zwei Keypairs erstellen. Danach weisen Sie dieser EC2-Instanz einen der beiden Key pair Namen zu. Sobald die Instanz verfügbar ist, überprüfen Sie, ob Sie sich mit beiden Keys darauf einloggen können.

Anleitung:

Erstellen Sie nun eine neue Ubuntu-Instanz in AWS mit den Standard-Einstellungen und erstellen Sie dann zwei Key pairs wie folgt:

  • Ubuntu Server 22.04 AMI (Amazon Machine Image) auswählen.

  • Achten auf Free tier eligible.

    Auswahl AMI (Amazon Machine Image), Free tier eligible
    keypair1
  • Bei "Key pair" erstellen Sie zwei Key-Value Pairs! Geben Sie Namen wie <Ihr-Name>-1 und & <Ihr-Name>-2.

    Create new Key pair Felder ausfüllen / anwählen
    keypair1 keypair2
  • Stellen Sie sicher, dass Sie beide Schlüssel herunterladen.

  • Nachdem beide Keys erstellt wurden, wählen Sie bei "Key pair" dann den ersten Key aus. Belassen sie die restlichen Parameter so wie sie bereits eingestellt sind. Scrollen Sie bis ganz nach unten und klicken Sie auf Launch instance.

Speicherort der privaten (und öffentlichen) Schlüssel muss ein Pfad sein, der eingeschränkte Rechte hat (nur Ihr persönlicher Account). Normalerweise wird der Pfad C:\Users\<ihrBenutzer>\.ssh verwendet.

Der Befehl für den Zugriff sieht nun folgendermassen aus. Der Parameter -o verhindert, dass Sie ein Timeout kriegen.


ssh <user>@<server> -i <path-to-privatekey>\<private-key-file>.pem -o ServerAliveInterval=30
# Standard-Benutzername ist ubuntu!
# Beispiel: ssh ubuntu@121.12.3.1 -i c:\Users\calisto\.ssh\Calisto-1.pem -o ServerAliveInterval=30

Zeigen Sie, dass sie sich nur mit dem ausgewählten Schlüssel einloggen können.

Hinweis: AWS speichert ihren privaten Schlüssel nicht. Sie können den nicht wiederherstellen. Auf dem Ubuntu-Server liegt immer nur der öffentliche Schlüssel. Seien Sie also vorsichtig und verlieren Sie den Schlüssel nicht.

Ziel der Übung

🔔 Sie verstehen, wie Key pairs erstellt und angewendet werden. Einer wird nicht funktionieren. Überlegen Sie sich, weshalb das so ist und wie die Authentifizierung durchgeführt wird. Wo werden die Keys (Private / Public) abgelegt?

Leistungsnachweis
  • Screenshot mit dem ssh-Befehl und des Resultats unter Verwendung des ersten Schlüssels.
  • Screenshot mit dem ssh-Befehl und des Resultats unter Verwendung des zweiten Schlüssels.
  • Screenshot der Instanz-Detail (oder Liste), so dass der verwendete Schlüssel sichtbar ist.
  • Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
  • Fachgespräch mit Coach.

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.



C) Installation von Web- und Datenbankserver

Ausgangslage:

Via SSH auf EC2-Instanz zugreifen und sämtliche Kommandos für das Setup des Webservers mit DB-Zugriff manuell (imperativ) der Reihe nach ausführen. Verwenden Sie die Instanz aus Aufgabe B) und gehen Sie wie folgt vor:

Ports checken, Rule ergänzen (Security Group)

  • Stellen Sie sicher, dass die dazu notwendigen Ports in der ausgewählten Security-Group offen sind:
    • 22 für SSH Zugriff (sollte bereits vorhanden sein)
    • 80 für HTTP Zugriff (dazu müssen sie in der ausgewählten Security Group noch eine Inbound rule erstellen - gleich wie beim ersten Lab, siehe Bild unten)
    Inbound rule für HTTP hinzufügen
    keypair1

SSH-Verbindung aufbauen

  • Bauen Sie von Ihrem Laptop aus eine SSH-Verbindung auf Ihre EC2-Instanz auf (via Terminalfenster auf ihrem Laptop mit SSH auf die EC2-Instanz zugreifen). Kommandos auf Ihrer EC2-Instanz der letzten Übung auszuführen:

    1. Connect to instance 2. SSH Client auswählen
    connect1 connect2
  • Führen Sie wie folgt sämtliche Kommandos für das Setup des Webservers mit DB-Zugriff manuell (imperativ) der Reihe nach aus.

    • sudo apt update auf. Dieser Befehl aktualisiert die Pakete/Software.
    • sudo apt install apache2. Dieser Befehl installiert den Apache Webserver.
    • sudo apt install php. Dieser Befehl installiert den PHP Applikationsserver.
    • sudo apt install libapache2-mod-php. Dieser Befehl installiert die PHP-Erweiterung für Apache.
    • sudo apt install php-mysqli. Dieser Befehlt installiert das PHP-Modul, um Datenbank-Abfragen zu erstellen.
    • sudo apt install mariadb-server. Dieser Befehl installiert den Datenbankserver.
    • sudo mysql -sfu root -e "GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;".
    • sudo systemctl restart mariadb.service. Dieser Befehl startet den DB Server neu.
      • sudo systemctl status mariadb.service. Dieser Befehl checkt, ob der DB Server läuft. Falls Anzeige grün active (running), dann ok.
    • sudo systemctl restart apache2. Dieser Befehl startet den Webserver neu.
      • sudo systemctl status apache2. Dieser Befehl checkt, ob der Webserver läuft. Falls Anzeige grün active (running), dann ok.
  • cd ~. Dieser Befehl stellt sicher, dass Sie sich in ihrem Home-Verzeichnis befinden

  • git clone https://gitlab.com/ser-cal/m346-scripts.git. Diesen Befehl sollten Sie bereits beherrschen.

  • sudo cp ./m346-scripts/KN01/*.php /var/www/html/. Dieser Befehl kopiert die beiden PHP-Dateien in das Verzeichnis des Webservers.

  • Rufen Sie von ihrem Rechner nun die folgenden Seiten auf:

    • http://[Ihre-IP]/index.html. Diese URL zeigt ihnen die Informationen von Apache an. Wenn die Seite funktioniert, zeigt dies, dass Apache installiert wurde und funktioniert.

    • http://[Ihre-IP]/info.php. Diese URL zeigt ihnen die Informationen von PHP an. Wenn diese Seite funktioniert, zeigt dies, dass das PHP-Modul funktioniert und Sie nun dynamische Seiten hosten können.

    • http://[Ihre-IP]/db.php. Diese URL zeigt ihnen die Datenbank-Benutzer. Wenn diese Seite funktioniert, zeigt es Ihnen, dass die Datenbank-Verbindung funktioniert.

Ziel der Übung

🔔 Verständnisaufbau für den Unterschied zwischen imperativer und deklarativer Plattformentwicklung. Bei dieser Übung setzen Sie auf einer bestehenden EC2-Instanz einen Webserver mit Datenbankanbindug auf. Sie installieren dazu imperativ (Eingabe einzelner Kommandos per Tastatur) folgende Software:

  • Apache Webserver
  • PHP und PHP-Erweiterung für Apache
  • PHP-Modul für Datenbankabfragen
  • Datenbankserver (MariaDB)
    ...des weiteren:
  • erstellen Sie einen DB-Benutzer (inkl. Passwort)
  • restarten anschliessend den DB-Server
  • ...und den den Webserver

Alle Commands schön der Reihe nach, sonst gibt es Probleme. Falls Sie 100 weitere Instanzen so aufsetzen müssten, würden Sie sämtliche Schritte 100x wiederholen 😬. Gut also, dass das imperative Vorgehen vom deklarativen Vorgehen - auch IaC (Infrastructure as Code) genannt - abgelöst wird. Wie das geht, erfahren Sie schon bald 😃.

Leistungsnachweis
  • Erstellen Sie Screenshots der drei Webseiten (mit sichtbaren URLs).
  • Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
  • Fachgespräch mit Coach.

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.

Beispiel-Abgabe:
  • Screenshots der drei URLs:
    Apache PHP DB-User
    Apache PHP User


Quellen

Thorntech: Passwords vs. SSH keys - what's better for authentication?



Zurück zu KN02


Zurück zur Hauptseite