Auftrag ergänzt

This commit is contained in:
Marcello Calisto 2023-09-02 15:23:30 +02:00
parent c9b7f0fb60
commit 78d78e7459
20 changed files with 239 additions and 12 deletions

View File

@ -22,19 +22,30 @@ Wir nutzen **Amazon Web Services** oder abgekürt **AWS**. Alles was wir hier um
### A) Cloud-init Datei verstehen
#### Ausgangslage:
xxx
In den vorangegangenen Challenges haben sie vorwiegend mit der imperativen Methode gearbeitet. Jetzt beginnen Sie, sich mit der deklarativen Methode auseinanderzusetzen. Der erste Challenge ist relativ einfach. Sie analysieren ein bereits vorhandenes .yaml-File und setzen sich mit den einzelnen Zeilen/Kommandos auseinander.
#### Anleitung:
xxx
Die wichtigsten Informationen zu Cloud-init und YAML [finden Sie in der Theorie](../InfrastructureAsCode.md).
Laden Sie diese [cloud-init Datei](./cloud-init.yaml) herunter. Erklären Sie **alle** Zeilen der Cloud-init Datei in folgendem Schema. **Achtung**: Viele Werte sind nicht definiert von cloud-init, sondern von Linux/Ubuntu. z.B. *sudo: <sudo-Regeln>*. Die Sudo-Regeln sind definiert in Linux (sudoers-file).
```yaml
#cloud-config
users: # ....
- name: ubuntu # Benutzername
sudo: ALL=(ALL) NOPASSWD:ALL # sudo-Regeln für diesen Benutzer
#...
#...
```
#### Ziel der Übung
:bell: xx
:bell: Sie verstehen die Befehlsstruktur von **Cloud-init**-files und können diese interpretieren und dokumentieren.
##### Leistungsnachweis
- [ ] xx
- [ ] xx
- [ ] Im Cloud-init Script sind sämtliche Zeilen dokumentiert.
- [ ] Sie verstehen die Befehle im Cloud-init Script.
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
@ -45,11 +56,46 @@ Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben
### B) SSH-Key und Cloud-init (Beginner)
#### 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:
Sie wissen bereits, wie man auf AWS ein SSH Keypair erstellt und können sich mit diesem Key per SSH mit einer Instanz in der Cloud verbindet. Dieser Challenge geht nun etwas tiefer. Weil das Keypair von AWS und nicht von Ihnen erzeugt wurde, fehlt ihnen noch der Public-Key zu Ihrem bereits bei sich abgelegten Private Key (file.pem). Mit puttygen können Sie jederzeit den zugehörigen Public Key erzeugen. Diesen können Sie dann auf jeder beliebigen Instanz in der Cloud ablegen, um schnell darauf zuzugreifen.
#### Anleitung
Anstatt, dass Sie den SSH-Key im GUI auswählen, können Sie ihn auch im Cloud-Init mitgeben. Dies werden wir folgend tun. Installieren Sie **puttygen**, falls Sie es noch nicht haben (unter Quellen finden Sie den Link). Extrahieren Sie den öffentlichen Schlüssel (für beide Keys) wie folgt.
![puttykeygen](./x_res/puttykeygen.png)
Erstellen Sie eine neue Instanz in AWS mit den folgenden Einstellungen:
- Ubuntu 22.04
- Bei "Key pair" verwenden Sie ihren **zweiten** Schlüssel.
- Keine Änderungen bei den restlichen Einstellungen.
- aber: verwenden Sie die [cloud-init Datei](cloud-init.yaml) und ersetzen Sie den Schlüssel mit ihrem **ersten** öffentlich Schlüssel. Beachten Sie das Format `ssh-rsa <ihr-Schlüssel-ohne-zeilenumbrüche> aws-key`
![Schema](./x_res/04_public-key_800.png)
- Sie können ihre Cloud-init Konfiguration einfach in dem Feld "*user data*" in der Sektion "*Advanced details*" reinkopieren.
**Hinweis**: In KN02 haben Sie sich per SSH mit der laufenden EC2-Instanz verbunden und dann sämtliche Installationsschritte per Hand (imperativ) ausgeführt. Wenn Sie nun aber ihre YAML-Datei in das Feld kopieren, wird AWS sämtliche Schritte automatisch durchführen und alles ohne Handeingabe installieren.
**Hinweis**: Stellen Sie sicher, dass die Zeile `#cloud-config` auch tatsächlich in der YAML-Datei steht, sonst wird der Inhalt nicht korrekt ausgeführt.
Sie haben nun aber ihren Public-Key zwei mal verwendet (einmal beim Feld "Key Pair" in der Management Console und einmal im Cloud-init Script).
Ein Schlüssel wird demzufolge vom anderen Schlüssel überschrieben. Welcher von welchem?
Die beiden unten Bilder verdeutlichen nochmals, dass der Public-Key aus dem Cloud-init Script übernommen wurde (links das Cloud-init Script und rechts das authorized_keys File von der EC2-Instanz).
Denken Sie nochmals an den Ablauf beim Erstellen der EC2-Instanz. Was wurde **wann** eingetragen? **Was ist genau passiert?**
Cloud-init Script | Eintrag in AWS EC2-Instanz (authorized_keys)
:-------------------------:|:-------------------------:
![keypair1](./x_res/05_cloud-init_600.png) | ![keypair2](./x_res/06_cloud-init_600.png)
Zeigen Sie nun, dass Sie **nur mit dem Key aus der Cloud-Init Datei** einloggen können.
Rufen Sie nun das cloud-init-log (`/var/log/cloud-init-output.log`) auf und merken Sie sich den Pfad **/var/log/** für zukünftige Aufträge für die Fehlerfindung.
#### xxxx
blabla
#### Ziel der Übung
:bell: **Verständnisaufbau** für xxx
@ -60,12 +106,26 @@ blabla
##### Leistungsnachweis
- [ ] xx
- [ ] xx
- [ ] Ihre angepasste Cloud-init Konfiguration als **Datei** im Git-Repository.
- [ ] Ein Screenshot der Details oder Liste der Instanz, welcher den **verwendeten** Key zeigt.
- [ ] 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 mit dem Auszug aus dem Cloud-Init-Log.
- [ ] Technisch nachvollziehbare Erklärung, weshalb nur einer der beiden Keys funktioniert.
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
##### Beispiel-Abgabe:
xxx
<br>
----
### C) Template (Beginner)
#### Ausgangslage:
Sie wissen bere
<br>

18
KN03/cloud-init-db.yaml Normal file
View File

@ -0,0 +1,18 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- mariadb-server
runcmd:
- sudo mysql -sfu root -e "GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;"
- sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf
- sudo systemctl restart mariadb.service

16
KN03/cloud-init-ssh.yaml Normal file
View File

@ -0,0 +1,16 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
- ssh-rsa zweiterkeynMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- curl
- wget

47
KN03/cloud-init-web.yaml Normal file
View File

@ -0,0 +1,47 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- apache2
- curl
- wget
- php
- libapache2-mod-php
- php-mysqli
- adminer
write_files:
- content: |
<?php phpinfo(); ?>
path: /var/www/html/info.php
permissions: '0644'
- content: |
<?php
$servername = "172.31.63.80";
$username = "admin";
$password = "password";
$dbname = "mysql";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select Host, User from mysql.user;";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()){
echo($row["Host"] . " / " . $row["User"] . "<br />");
}
?>
path: /var/www/html/db.php
permissions: '0644'
runcmd:
- sudo a2enconf adminer
- sudo systemctl restart apache2

15
KN03/cloud-init.yaml Normal file
View File

@ -0,0 +1,15 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- curl
- wget

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

1
KN03/x_res/Schema.drawio Normal file
View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2023-03-07T08:41:54.085Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/15.1.3 Chrome/89.0.4389.128 Electron/12.1.0 Safari/537.36" etag="6lmHc6gmOvO6evH34G66" version="15.1.3" type="device"><diagram id="JFSrcvL8NifPUZGCTWn_" name="Page-1">1VbBjpswEP2aHBMBBsIe25BspWqlbSN121PkwASsGoyME0i+vmYZQoBkk63aVD0k8jyPx/ab9yxGZJaUj5Jm8ZMIgY8sIyxHxB9ZlmcS/V8B+xqwHxCIJAtryGyBJTsAggaiWxZC3klUQnDFsi4YiDSFQHUwKqUoumkbwbu7ZjSCAbAMKB+iLyxUMaKm+9BOfAIWxbi1Z03riYQ2yXiTPKahKE4gMh+RmRRC1aOknAGvuGt4qdctLsweDyYhVbcsOHwuIv/JP8Txo/Nl9W1ejNfTMVbZUb7FC7/AWgNLkDuQeHC1b9hgyStdH2OVcI2YeoiQz5JI782ZXr0IOMtWVKpqKJJsq0DmelwXXX2lwc+VaXml/k2yNMIjgFRQXrybeWRMKw1EAkrudQousAmSjCqzDIyLtmceQvFptxCjqJLoWLklUg+Qy3fwag149amia5rDZXK1QLJqGOrMXAlZEV3ETMEyo0E1UWiHdcn/A9S5do86c0ide4Y6929RRwbUPYtKSgYhhjsgDdLwQ2VzHQWc5jkLugxpFuT+uw6MJvhRBROnCf3ydNLfY1RvBOHgdejxqg8jtjKA6x5TVEagrmnmYp+MiTFtHh1s1fhMq5wzrWowCZwqtuve6Fz/8BDPgqWqPYFndpViGz0J1EzgqtOXqF/I7RYiTq9QTdUbhZpEsdnk0Ml5ldyRvd9XoT1Q4VB6XD9zeeXSxrkBF9vwLq41vesPnmnd88VzLtm22nFh2+R/tK59o3Xfbta/t65j9BzXl8Gt1nWcXiFyT+vqsP1eqtPbj04y/wU=</diagram></mxfile>

BIN
KN03/x_res/Schema.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,23 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa <Public-Key> <Random_Benutzername>
ssh_pwauth: <Wert_eingeben>
disable_root: <Wert_eingeben>
package_update: <Wert_eingeben>
package_upgrade: <Wert_eingeben>
package_reboot_if_required: <Wert_eingeben>
packages:
- <ergaenzen>
runcmd:
- sudo mysql <ergaenzen>
- sudo sed <ergaenzen>
- sudo systemctl <ergaenzen>

View File

@ -0,0 +1,47 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7uUevS7iVPRPFAmdCAIAk7xg7szJUBhmRhLlNgGg3hQb8Zify0Mvm28yO/BW9XUdgW85pmcmbpyP7Y+pDkWHEFbWBjFdTgmYyoszn08fIsApcVJkauqDLmaz9Fd+FtyZGFJapdgR34nLiT1meklO8/Z/mynSYFuzAWClmRiyZXPok2qQJM/xqZRCudatskYJFobiS/+9pSvohIMT/WLhaBsJStctK1QWWQTuPsfO/6QKFkM378qUeJ74lGBfd7cU0Z3i0B3t9r/bhVu0vsyfQdbiWqL3Bhzl2n/KHaDi2t4mcJwEVIDyzr+6vkSLdu3X09vCcsJPGnLirTHVUGo07 cal-1
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- apache2
- curl
- wget
- php
- libapache2-mod-php
- php-mysqli
- adminer
write_files:
- content: |
<?php phpinfo(); ?>
path: /var/www/html/info.php
permissions: '0644'
- content: |
<?php
$servername = "172.31.28.189";
$username = "admin";
$password = "password";
$dbname = "mysql";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select Host, User from mysql.user;";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()){
echo($row["Host"] . " / " . $row["User"] . "<br />");
}
?>
path: /var/www/html/db.php
permissions: '0644'
runcmd:
- sudo a2enconf adminer
- sudo systemctl restart apache2

BIN
KN03/x_res/puttykeygen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB