2026-03-24 16:43:08 -07:00
|
|
|
# Prowler CIS scanner — slim build for Kubernetes, image, and IaC providers
|
|
|
|
|
# Strips PowerShell (M365) and dashboard dependencies from upstream
|
|
|
|
|
# Includes Trivy for image vulnerability and IaC scanning
|
2026-04-14 13:45:28 -07:00
|
|
|
ARG CONTAINER_APP_VERSION=5.23.0
|
2026-03-24 16:08:09 -07:00
|
|
|
|
|
|
|
|
FROM python:3.12-slim-bookworm AS build
|
|
|
|
|
|
|
|
|
|
ARG CONTAINER_APP_VERSION
|
|
|
|
|
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
|
git ca-certificates \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
WORKDIR /build
|
|
|
|
|
|
|
|
|
|
RUN git clone --depth 1 --branch ${CONTAINER_APP_VERSION} \
|
|
|
|
|
https://forge.ops.eblu.me/mirrors/prowler.git .
|
|
|
|
|
|
|
|
|
|
# Install prowler into a virtualenv so we can copy it cleanly
|
|
|
|
|
RUN python -m venv /opt/prowler \
|
|
|
|
|
&& /opt/prowler/bin/pip install --no-cache-dir --upgrade pip \
|
|
|
|
|
&& /opt/prowler/bin/pip install --no-cache-dir .
|
|
|
|
|
|
|
|
|
|
# ---
|
|
|
|
|
|
|
|
|
|
FROM python:3.12-slim-bookworm
|
|
|
|
|
|
|
|
|
|
ARG CONTAINER_APP_VERSION
|
|
|
|
|
|
|
|
|
|
LABEL org.opencontainers.image.title="prowler"
|
|
|
|
|
LABEL org.opencontainers.image.version="${CONTAINER_APP_VERSION}"
|
|
|
|
|
LABEL org.opencontainers.image.source="https://forge.eblu.me/eblume/blumeops"
|
|
|
|
|
LABEL org.opencontainers.image.vendor="blumeops"
|
2026-03-24 16:43:08 -07:00
|
|
|
LABEL org.opencontainers.image.description="Prowler scanner (Kubernetes, image, IaC providers)"
|
|
|
|
|
|
|
|
|
|
ARG TRIVY_VERSION=0.69.2
|
|
|
|
|
|
|
|
|
|
RUN ARCH=$(dpkg --print-architecture) \
|
|
|
|
|
&& case "$ARCH" in \
|
|
|
|
|
amd64) TRIVY_ARCH="Linux-64bit" ;; \
|
|
|
|
|
arm64) TRIVY_ARCH="Linux-ARM64" ;; \
|
|
|
|
|
*) echo "Unsupported architecture: $ARCH" && exit 1 ;; \
|
|
|
|
|
esac \
|
|
|
|
|
&& apt-get update && apt-get install -y --no-install-recommends wget ca-certificates \
|
|
|
|
|
&& wget -q "https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_${TRIVY_ARCH}.tar.gz" -O /tmp/trivy.tar.gz \
|
|
|
|
|
&& tar xzf /tmp/trivy.tar.gz -C /usr/local/bin trivy \
|
2026-04-28 09:50:31 -07:00
|
|
|
&& mv /usr/local/bin/trivy /usr/local/bin/trivy.real \
|
|
|
|
|
&& chmod +x /usr/local/bin/trivy.real \
|
2026-03-24 16:43:08 -07:00
|
|
|
&& rm /tmp/trivy.tar.gz \
|
|
|
|
|
&& apt-get purge -y wget && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*
|
2026-03-24 16:08:09 -07:00
|
|
|
|
2026-04-28 09:50:31 -07:00
|
|
|
# Shim: Prowler's IaC provider invokes `trivy fs` directly with no
|
|
|
|
|
# --ignorefile flag, so any TRIVY_IGNOREFILE the user sets is ignored.
|
|
|
|
|
# This wrapper injects --ignorefile when the env var points at a real
|
|
|
|
|
# file and the invocation is `trivy fs ...`. Other subcommands and
|
|
|
|
|
# global-only invocations (--version, --help) pass through unchanged.
|
|
|
|
|
# TODO(upstream): contribute --ignorefile plumbing to prowler-cloud/prowler
|
|
|
|
|
# iac_provider.py so this shim isn't necessary.
|
|
|
|
|
RUN printf '%s\n' \
|
|
|
|
|
'#!/bin/sh' \
|
|
|
|
|
'if [ "${1:-}" = "fs" ] && [ -n "${TRIVY_IGNOREFILE:-}" ] && [ -f "${TRIVY_IGNOREFILE}" ]; then' \
|
|
|
|
|
' shift' \
|
|
|
|
|
' exec /usr/local/bin/trivy.real fs --ignorefile "${TRIVY_IGNOREFILE}" "$@"' \
|
|
|
|
|
'fi' \
|
|
|
|
|
'exec /usr/local/bin/trivy.real "$@"' \
|
|
|
|
|
> /usr/local/bin/trivy \
|
|
|
|
|
&& chmod +x /usr/local/bin/trivy
|
|
|
|
|
|
2026-03-24 16:08:09 -07:00
|
|
|
RUN addgroup --gid 1000 prowler \
|
2026-03-24 16:43:08 -07:00
|
|
|
&& adduser --uid 1000 --gid 1000 --disabled-password --gecos "" prowler \
|
|
|
|
|
&& mkdir -p /tmp/.cache/trivy && chown prowler:prowler /tmp/.cache/trivy
|
2026-03-24 16:08:09 -07:00
|
|
|
|
|
|
|
|
COPY --from=build /opt/prowler /opt/prowler
|
|
|
|
|
|
|
|
|
|
ENV PATH="/opt/prowler/bin:${PATH}"
|
2026-03-24 16:43:08 -07:00
|
|
|
ENV TRIVY_CACHE_DIR="/tmp/.cache/trivy"
|
2026-03-24 16:08:09 -07:00
|
|
|
|
|
|
|
|
USER prowler
|
|
|
|
|
WORKDIR /home/prowler
|
|
|
|
|
|
|
|
|
|
ENTRYPOINT ["prowler"]
|