In Air gapped environment, Harbor Trivy DB and Trivy Java DB needs to be downloaded from internet and copied to the harbor pod manually.
This KB applies to Harbor Supervisor Service versions prior to v2.14.2 verion. Starting from Harbor Supervisor Service 2.14.2, support for configuring a self-hosted repository has been introduced, which significantly reduces the below changes.
Steps to update "Skip TrivyDB" (trivy.db) configuration in Air gapped environment:
skipUpdate=true and offlineScan=true for the trivy configuration.## edit your harbor-data-values file with below values
trivy:
enabled: true
skipUpdate: true
offlineScan: true
## Then update your package
## For Harbor supervisor service, from the VC UI go to WorkPlane Management> Supervisor> Service > Configure > Supervisor Service Overview > Select Kubernetes Service > Manage Service, you should directly update the above harbor-data-values yaml config, package should be updated wait for "Reconcile Succeeded"
Download the vulnerability database using Trivy client
# install trivy binary first
# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.58.0
TRIVY_TEMP_DIR=$(mktemp -d)
trivy --cache-dir $TRIVY_TEMP_DIR image --download-db-only
chmod o+r $TRIVY_TEMP_DIR/db/metadata.json
chmod o+r $TRIVY_TEMP_DIR/db/trivy.db
POD=$(kubectl -n <SVC-HARBOR-PKGI-NAMESPACE> get pod -l component=trivy -o jsonpath="{.items[0].metadata.name}")
kubectl -n <SVC-HARBOR-PKGI-NAMESPACE> exec ${POD} -- mkdir -p /home/scanner/.cache/trivy/db
cat $TRIVY_TEMP_DIR/db/metadata.json | kubectl -n <SVC-HARBOR-PKGI-NAMESPACE> exec ${POD} -i -- tee /home/scanner/.cache/trivy/db/metadata.json 1>/dev/null
cat $TRIVY_TEMP_DIR/db/trivy.db | kubectl -n <SVC-HARBOR-PKGI-NAMESPACE> exec ${POD} -i -- tee /home/scanner/.cache/trivy/db/trivy.db 1>/dev/null
Steps to update "Skip TrivyJavaDB" (trivy-java.db) configuration in Air gapped environment:
trivy-skipjavadb-overlay.yaml
vi trivy-skipjavadb-overlay.yamlkubectl get pkgi -A | grep harborkubectl -n <SVC-HARBOR-PKGI-NAMESPACE> create secret generic trivy-skipjavadb-overlay -o yaml --dry-run=client --from-file=trivy-skipjavadb-overlay.yaml | kubectl apply -f -kubectl -n <SVC-HARBOR-PKGI-NAMESPACE> annotate packageinstalls harbor ext.packaging.carvel.dev/ytt-paths-from-secret-name.0=trivy-skipjavadb-overlay kubectl get pkgi -A | grep harbor kubectl exec -it harbor-trivy-0 -n <SVC-HARBOR-PKGI-NAMESPACE> -- env | grep SCANNER_TRIVY_SKIP_JAVA_DB_UPDATE## edit your harbor-data-values file with below valuestrivy: enabled: true skipUpdate: true skipJavaDBUpdate: true offlineScan: trueNote: Trivy version >= v0.23.0