11# This Dockerfile was generated from templates/Dockerfile.erb
2- <%# image_flavor 'full', oss', 'wolfi' -%>
2+ <%# image_flavor 'full', oss', 'wolfi', 'observability-sre' -%>
33<% if local_artifacts == 'false' -%>
44 <% url_root = 'https://artifacts.elastic.co/downloads/logstash' -%>
55<% else -%>
1111<% elsif image_flavor == 'full' %>
1212 <% tarball = "logstash-#{elastic_version}-linux-${arch}.tar.gz" -%>
1313 <% license = 'Elastic License' -%>
14+ <% elsif image_flavor == 'observability-sre' -%> <%# 'observability-sre' needs arch to be injected from the outside -%>
15+ <% tarball = "logstash-observability-sre-#{elastic_version}-linux-#{arch}.tar.gz" -%>
16+ <% license = 'Elastic License' -%>
1417<% else -%> <%# 'wolfi' needs arch to be injected from the outside -%>
1518 <% tarball = "logstash-#{elastic_version}-linux-#{arch}.tar.gz" -%>
1619 <% license = 'Elastic License' -%>
1922 <% base_image = 'redhat/ubi9-minimal:latest' -%>
2023 <% go_image = 'golang:1.23' -%>
2124 <% package_manager = 'microdnf' -%>
25+ <% elsif image_flavor == 'observability-sre' -%>
26+ <% base_image = 'docker.elastic.co/wolfi/chainguard-base-fips' -%>
27+ <% go_image = 'docker.elastic.co/wolfi/go:1.23' -%>
28+ <% package_manager = 'apk' -%>
2229<% else -%>
2330 <% base_image = 'docker.elastic.co/wolfi/chainguard-base' -%>
2431 <% go_image = 'docker.elastic.co/wolfi/go:1.23' -%>
5259 <%= package_manager %> install -y openssl && \
5360 <%= package_manager %> install -y which shadow-utils && \
5461 <%= package_manager %> clean all
55- <% else -%> <%# 'wolfi' -%>
62+ <% else -%> <%# 'wolfi', 'observability-sre' -%>
5663 <%= package_manager %> add --no-cache curl bash openssl
5764<% end -%>
5865
@@ -64,7 +71,7 @@ RUN groupadd --gid 1000 logstash && \
6471 --home "/usr/share/logstash" \
6572 --no-create-home \
6673 logstash && \
67- <% else -%> <%# 'wolfi' -%>
74+ <% else -%> <%# 'wolfi', 'observability-sre' -%>
6875RUN addgroup -g 1000 logstash && \
6976 adduser -u 1000 -G logstash \
7077 --disabled-password \
@@ -77,7 +84,7 @@ RUN addgroup -g 1000 logstash && \
7784<% if image_flavor == 'full' || image_flavor == 'oss' -%>
7885 arch="$(rpm --query --queryformat='%{ARCH}' rpm)" && \
7986<% end -%>
80- curl -f -Lo logstash.tar.gz <%= url_root %> /<%= tarball %> && \
87+ curl --fail --location --output logstash.tar.gz <%= url_root %> /<%= tarball %> && \
8188 tar -zxf logstash.tar.gz -C /usr/share && \
8289 rm logstash.tar.gz && \
8390 mv /usr/share/logstash-<%= elastic_version %> /usr/share/logstash && \
@@ -93,12 +100,64 @@ COPY --from=builder-env2yaml /tmp/go/src/env2yaml/env2yaml /usr/local/bin/env2ya
93100COPY --chown=logstash:root config/pipelines.yml config/log4j2.properties config/log4j2.file.properties /usr/share/logstash/config/
94101<% if image_flavor == 'oss' -%>
95102COPY --chown=logstash:root config/logstash-oss.yml /usr/share/logstash/config/logstash.yml
96- <% else -%> <%# 'full', 'wolfi' -%>
103+ <% else -%> <%# 'full', 'wolfi', 'observability-sre' -%>
97104COPY --chown=logstash:root config/logstash-full.yml /usr/share/logstash/config/logstash.yml
98105<% end -%>
99106COPY --chown=logstash:root pipeline/default.conf /usr/share/logstash/pipeline/logstash.conf
100107COPY --chmod=0755 bin/docker-entrypoint /usr/local/bin/
101108
109+ <% if image_flavor == 'observability-sre' -%>
110+ # Add FIPS configuration for observability-sre image flavor
111+ RUN mkdir -p /usr/share/logstash/config/security
112+
113+ # Copy JVM security configuration files from the unpacked tarball
114+ RUN cp /usr/share/logstash/x-pack/distributions/internal/observabilitySRE/config/security/java.security /usr/share/logstash/config/security/ && \
115+ cp /usr/share/logstash/x-pack/distributions/internal/observabilitySRE/config/security/java.policy /usr/share/logstash/config/security/ && \
116+ chown --recursive logstash:root /usr/share/logstash/config/security/
117+
118+ # list the classes provided by the fips BC
119+ RUN find /usr/share/logstash -name *.jar | grep lib
120+
121+ # Convert JKS to BCFKS for truststore and keystore
122+ RUN /usr/share/logstash/jdk/bin/keytool -importkeystore \
123+ -srckeystore /usr/share/logstash/jdk/lib/security/cacerts \
124+ -destkeystore /usr/share/logstash/config/security/cacerts.bcfks \
125+ -srcstoretype jks \
126+ -deststoretype bcfks \
127+ -providerpath /usr/share/logstash/logstash-core/lib/jars/bc-fips-2.0.0.jar \
128+ -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
129+ -deststorepass changeit \
130+ -srcstorepass changeit \
131+ -noprompt
132+
133+ RUN /usr/share/logstash/jdk/bin/keytool -importkeystore \
134+ -srckeystore /usr/share/logstash/jdk/lib/security/cacerts \
135+ -destkeystore /usr/share/logstash/config/security/keystore.bcfks \
136+ -srcstoretype jks \
137+ -deststoretype bcfks \
138+ -providerpath /usr/share/logstash/logstash-core/lib/jars/bc-fips-2.0.0.jar \
139+ -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
140+ -deststorepass changeit \
141+ -srcstorepass changeit \
142+ -noprompt
143+
144+ # Set Java security properties through LS_JAVA_OPTS
145+ ENV LS_JAVA_OPTS="\
146+ -Djava.security.properties=/usr/share/logstash/config/security/java.security \
147+ -Djava.security.policy=/usr/share/logstash/config/security/java.policy \
148+ -Djavax.net.ssl.keyStore=/usr/share/logstash/config/security/keystore.bcfks \
149+ -Djavax.net.ssl.keyStoreType=BCFKS \
150+ -Djavax.net.ssl.keyStoreProvider=BCFIPS \
151+ -Djavax.net.ssl.keyStorePassword=changeit \
152+ -Djavax.net.ssl.trustStore=/usr/share/logstash/config/security/cacerts.bcfks \
153+ -Djavax.net.ssl.trustStoreType=BCFKS \
154+ -Djavax.net.ssl.trustStoreProvider=BCFIPS \
155+ -Djavax.net.ssl.trustStorePassword=changeit \
156+ -Dssl.KeyManagerFactory.algorithm=PKIX \
157+ -Dssl.TrustManagerFactory.algorithm=PKIX \
158+ -Dorg.bouncycastle.fips.approved_only=true"
159+ <% end -%>
160+
102161WORKDIR /usr/share/logstash
103162
104163USER 1000
0 commit comments