Auftrag ergänzt
84
KN03/KN03.md
@ -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
@ -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
@ -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
@ -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
@ -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
|
BIN
KN03/x_res/04_public-key_800.png
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
KN03/x_res/05_cloud-init_600.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
KN03/x_res/06_cloud-init_600.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
KN03/x_res/07_telnet_1200.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
KN03/x_res/08_Zugriff_1200.png
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
KN03/x_res/09_Front-back_1200.png
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
KN03/x_res/10_Topologie_1200.png
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
KN03/x_res/11_cloud-init-db_600.png
Normal file
After Width: | Height: | Size: 162 KiB |
BIN
KN03/x_res/12_cloud-init-web1_600.png
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
KN03/x_res/12_cloud-init-web2_600.png
Normal file
After Width: | Height: | Size: 143 KiB |
1
KN03/x_res/Schema.drawio
Normal 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
After Width: | Height: | Size: 17 KiB |
23
KN03/x_res/cloud-init-db_VORLAGE.yaml
Normal 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>
|
||||
|
||||
|
||||
|
47
KN03/x_res/cloud-init-web_VORLAGE.yaml
Normal 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
After Width: | Height: | Size: 127 KiB |