Skip to content

Commit 8cc5c9f

Browse files
committed
CI: Add sbom generation to trivy image scans
1 parent e3f50f4 commit 8cc5c9f

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

tools/scan-images.sh

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ fi
1717
# Clear any previous outputs
1818
rm -rf image-scan-output
1919

20-
# Make a fresh output directory
21-
mkdir -p image-scan-output
20+
# Make fresh output directories
21+
mkdir -p image-scan-output image-sboms
2222

2323
# Get built container images
2424
docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$2" > $1-scanned-container-images.txt
@@ -40,6 +40,7 @@ for image in $images; do
4040
global_vulnerabilities=$(yq .global_allowed_vulnerabilities[] src/kayobe-config/etc/kayobe/trivy/allowed-vulnerabilities.yml)
4141
image_vulnerabilities=$(yq .$imagename'_allowed_vulnerabilities[]' src/kayobe-config/etc/kayobe/trivy/allowed-vulnerabilities.yml)
4242
touch .trivyignore
43+
mkdir -p image-scan-output/$filename
4344
for vulnerability in $global_vulnerabilities; do
4445
echo $vulnerability >> .trivyignore
4546
done
@@ -52,22 +53,22 @@ for image in $images; do
5253
--scanners vuln \
5354
--format json \
5455
--severity HIGH,CRITICAL \
55-
--output image-scan-output/${filename}.json \
56+
--output image-scan-output/${filename}/${filename}.json \
5657
--ignore-unfixed \
5758
--db-repository ghcr.io/aquasecurity/trivy-db:2 \
5859
--db-repository public.ecr.aws/aquasecurity/trivy-db \
5960
--java-db-repository ghcr.io/aquasecurity/trivy-java-db:1 \
6061
--java-db-repository public.ecr.aws/aquasecurity/trivy-java-db \
6162
$image); then
6263
# Clean up the output file for any images with no vulnerabilities
63-
rm -f image-scan-output/${filename}.json
64+
rm -f image-scan-output/${filename}/${filename}.json
6465

6566
# Add the image to the clean list
6667
echo "${image}" >> image-scan-output/clean-images.txt
6768
else
6869

6970
# Write a header for the summary CSV
70-
echo '"PkgName","PkgPath","PkgID","VulnerabilityID","FixedVersion","PrimaryURL","Severity"' > image-scan-output/${filename}.summary.csv
71+
echo '"PkgName","PkgPath","PkgID","VulnerabilityID","FixedVersion","PrimaryURL","Severity"' > image-scan-output/${filename}/${filename}.summary.csv
7172

7273
# Write the summary CSV data
7374
jq -r '.Results[]
@@ -88,15 +89,23 @@ for image in $images; do
8889
]
8990
)
9091
| .[]
91-
| @csv' image-scan-output/${filename}.json >> image-scan-output/${filename}.summary.csv
92+
| @csv' image-scan-output/${filename}/${filename}.json >> image-scan-output/${filename}/${filename}.summary.csv
9293

93-
if [ $(grep "CRITICAL" image-scan-output/${filename}.summary.csv -c) -gt 0 ]; then
94+
if [ $(grep "CRITICAL" image-scan-output/${filename}/${filename}.summary.csv -c) -gt 0 ]; then
9495
# If the image contains critical vulnerabilities, add the image to critical list
9596
echo "${image}" >> image-scan-output/critical-images.txt
9697
else
9798
# Otherwise, add the image to the dirty list
9899
echo "${image}" >> image-scan-output/dirty-images.txt
99100
fi
100101
fi
101-
rm .trivyignore
102+
trivy image \
103+
--quiet \
104+
--format spdx \
105+
--output image-scan-output/${filename}/${filename}-sbom.spdx \
106+
--db-repository ghcr.io/aquasecurity/trivy-db:2 \
107+
--db-repository public.ecr.aws/aquasecurity/trivy-db \
108+
--java-db-repository ghcr.io/aquasecurity/trivy-java-db:1 \
109+
--java-db-repository public.ecr.aws/aquasecurity/trivy-java-db \
110+
$image
102111
done

0 commit comments

Comments
 (0)