Ungetesteter Code ist ein no-go, das ist inzwischen jedem Entwickler klar! Dennoch akzeptieren es viele Projekte ihren Infrastruktur-Code, der Server provisioniert oder Docker Container erzeugt, nur oberflächlich zu testen. In der Session wird eine Lösung vorgestellt, mit der Tests für Infrastrukturen erstellt werden können. Solche Tests können auch für kontinuierliche Nachweise von Konfigurationen genutzt werden, z.B. bei Security Audits oder um Infrastructure-Drift zu erkennen. Auf ein getestetes und frustfreies Deployment!
2. Es war einmal ein kleiner Server …
2
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
3. Cattle, pet and many, many more …
Mir fallen da
ganz viele Tolle
Namen ein …
… F‘thagn
https://commons.wikimedia.org/wiki/File:Spawn_of_the_Stars_by_Sofyan_Syarief.jpg
4. 4
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Container retten uns!
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
5. 5
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Container retten uns?
FROM docker.io/bitnami/minideb:bullseye
COPY prebuildfs /
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN install_packages acl ca-certificates curl less libaudit1 libbrotli1 libbsd0 libbz2-1.0 libcap-ng0 libcom-err2 libcrypt1
libcurl4 libexpat1 libffi7 libfftw3-double3 libfontconfig1 libfreetype6 libgcc-s1 libgcrypt20 libgeoip1 libglib2.0-0 libgmp10
libgnutls30 libgomp1 libgpg-error0 libgssapi-krb5-2 libhogweed6 libicu67 libidn2-0 libjpeg62-turbo libk5crypto3 libkeyutils1
libkrb5-3 libkrb5support0 liblcms2-2 libldap-2.4-2 liblqr-1-0 libltdl7 liblzma5 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libmd0
libmemcached11 libncurses6 libnettle8 libnghttp2-14 libonig5 libp11-kit0 libpam0g libpcre3 libpng16-16 libpq5 libpsl5 libreadline8
librtmp1 libsasl2-2 libsodium23 libsqlite3-0 libssh2-1 libssl1.1 libstdc++6 libsybdb5 libtasn1-6 libtidy5deb1 libtinfo6
libunistring2 libuuid1 libwebp6 libx11-6 libxau6 libxcb1 libxdmcp6 libxext6 libxml2 libxslt1.1 libzip4 procps zlib1g
RUN mkdir -p /tmp/bitnami/pkg/cache/ && cd /tmp/bitnami/pkg/cache/ &&
COMPONENTS=(
"php-8.1.18-1-linux-${OS_ARCH}-debian-11"
"nginx-1.23.4-3-linux-${OS_ARCH}-debian-11"
"mysql-client-10.11.2-5-linux-${OS_ARCH}-debian-11"
"wordpress-6.2.0-8-linux-${OS_ARCH}-debian-11"
"render-template-1.0.5-5-linux-${OS_ARCH}-debian-11"
) &&
for COMPONENT in "${COMPONENTS[@]}"; do
if [ ! -f "${COMPONENT}.tar.gz" ]; then
curl -SsLf "https://downloads.bitnami.com/files/stacksmith/${COMPONENT}.tar.gz" -O ;
curl -SsLf "https://downloads.bitnami.com/files/stacksmith/${COMPONENT}.tar.gz.sha256" -O ;
fi &&
sha256sum -c "${COMPONENT}.tar.gz.sha256" &&
tar -zxf "${COMPONENT}.tar.gz" -C /opt/bitnami --strip-components=2 --no-same-owner --wildcards '*/files' &&
rm -rf "${COMPONENT}".tar.gz{,.sha256} ;
done
RUN apt-get autoremove --purge -y curl &&
apt-get update && apt-get upgrade -y &&
apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt/archives
RUN chmod g+rwX /opt/bitnami
COPY rootfs /
RUN /opt/bitnami/scripts/mysql-client/postunpack.sh
RUN /opt/bitnami/scripts/nginx/postunpack.sh
RUN /opt/bitnami/scripts/php/postunpack.sh
RUN /opt/bitnami/scripts/nginx-php-fpm/postunpack.sh
RUN /opt/bitnami/scripts/wordpress/postunpack.sh
ENV APP_VERSION="6.2.0"
BITNAMI_APP_NAME="wordpress-nginx"
NGINX_HTTPS_PORT_NUMBER=""
NGINX_HTTP_PORT_NUMBER=""
PATH="/opt/bitnami/php/bin:/opt/bitnami/php/sbin:/opt/bitnami/nginx/sbin:/opt/bitnami/mysql/bin:/opt/bitna
mi/common/bin:/opt/bitnami/wp-cli/bin:$PATH"
EXPOSE 8080 8443
USER 1001
ENTRYPOINT [ "/opt/bitnami/scripts/wordpress/entrypoint.sh" ]
CMD [ "/opt/bitnami/scripts/nginx-php-fpm/run.sh" ]
6. 6
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Oder die Cloud?
7. 7
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Wo anders ist es auch nicht „Grüner“ …
▪ externe Komponenten überall
▪ Integration manuell oder API
▪ „Infrastructure is forever“
8. It's not what
you don't know
that kills you,
it's what you
know for sure
that ain't true.
https://commons.wikimedia.org/wiki/File:Mark_Twain_seated_c1900s.jpeg
9. 10
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Meine Erfahrungen mit Chef InSpec / Cinc Auditor
▪ Erwartungen prüfen!
▪ Viele unterstützte Funktionen
▪ Viele Ausführungsumgebungen
▪ Lokal
▪ SSH
▪ Docker
▪ API
▪ Fokus auf Compliance und Security
11. 12
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
InSpec Features
▪ Tests im RSpec Format,
mit allen zugehörigen Integrationen
▪ Systemressourcen, wie Files, Ordner, Prozesse, …
▪ Cloud Services in GCP, AWS und Azure
▪ Auch Docker, Kubernetes!
▪ Auch Applikation!
▪ Auch Windows!
▪ Auch APIs!
▪ Und vor allem:
Einfach nutzbar!
12. Die meisten „Oopsies“ passieren nicht, weil zu
wenig geht, sondern weil zu viel Funktioniert!
Prüft besonders was nicht funktionieren soll!
https://commons.wikimedia.org/wiki/File:Hacker-3342696_1920-1024x788.jpg
14. 15
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
>>> Werbeblock <<<
>>> https://dev-sec.io/ <<<
▪ Vorgefertigte, gehärtete Konfigurationen für Infrastruktur
▪ Prüfung aller Implementierungen mit eigenen Baselines
▪ Gut zum „spicken“, da die Profile recht umfangreich sind
15. 16
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
Für alle, die es grafisch mögen
Heimdall auf Github, oder direkt zum Online testen https://heimdall-lite.mitre.org/
• Webtool
• Überblick und Filter
• Vorher-nachher Vergleiche
16. Fazit
Sinnvolles Tool,
das direkt in
Monitoring, CI oder
Audits genutzt
werden kann
https://commons.wikimedia.org/wiki/File:Delta_Liftoff.jpg
18. Hands on &
Fragen
19
Offen | Testing: nicht nur etwas für Anwendungssoftware | 25.04.2023
https://commons.wikimedia.org/wiki/File:20191207-FS-ANF-010.jpg