Skip to content
53 changes: 53 additions & 0 deletions .github/workflows/generate-augmented-sbom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Augment SBOM

on:
workflow_dispatch:
inputs:
release_version:
description: "Release version (e.g. 3.12.1)"
required: true
type: string
resource:
description: "Resource name (e.g. organization, project, etc.)"
required: true
type: string

permissions:
id-token: write
contents: read

jobs:
augment-sbom:
runs-on: ubuntu-latest
env:
KONDUKTO_TOKEN: ${{ secrets.KONDUKTO_TOKEN }}
KONDUKTO_REPO: ${{ vars.KONDUKTO_REPO }}
KONDUKTO_BRANCH_PREFIX: ${{ vars.KONDUKTO_BRANCH_PREFIX }}
SILKBOMB_IMG: ${{ vars.SILKBOMB_IMG }}
steps:
- uses: actions/checkout@v4

- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"

- name: Augment SBOM with Kondukto
env:
RELEASE_VERSION: ${{ inputs.release_version }}
run: ./scripts/compliance/augment-sbom.sh

- name: Generate SSDLC report
env:
AUTHOR: ${{ github.actor }}
VERSION: ${{ inputs.release_version }}
AUGMENTED_REPORT: "true"
run: ./scripts/compliance/gen-ssdlc-report.sh

- name: Upload augmented SBOM as artifact
uses: actions/upload-artifact@v4
with:
name: augmented_sbom_and_ssdlc_report
path: |
cfn-resources/${{ inputs.resource }}/compliance/augmented-sbom-v${{ inputs.release_version }}-${{ steps.date.outputs.date }}.json
cfn-resources/${{ inputs.resource }}/compliance/ssdlc-compliance-${{ inputs.release_version }}-${{ steps.date.outputs.date }}.md
if-no-files-found: error
43 changes: 43 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -314,3 +314,46 @@ jobs:
labels: failed-release
title: Publishing v${{ steps.extract-version.outputs.VERSION }} to GitHub Releases failed
body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Generate SBOM
run: |
./scripts/compliance/gen-purls.sh
./scripts/compliance/gen-sbom.sh
- name: Upload SBOM to Kondukto
run: ./scripts/compliance/upload-sbom.sh
env:
KONDUKTO_TOKEN: ${{ secrets.KONDUKTO_TOKEN }}
KONDUKTO_REPO: ${{ vars.KONDUKTO_REPO }}
KONDUKTO_BRANCH_PREFIX: ${{ vars.KONDUKTO_BRANCH_PREFIX }}
- name: terraform-provider-mongodbatlas-checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
repository: mongodb/terraform-provider-mongodbatlas
ref: master
- name: Generate SSDLC report
uses: mongodb/terraform-provider-mongodbatlas/.github/templates/run-script-and-commit@master
with:
script_call: |
AUTHOR="${{ github.actor }}"
export AUTHOR
export VERSION=${{ steps.extract-version.outputs.VERSION }}
./scripts/compliance/gen-ssdlc-report.sh
apix_bot_pat: ${{ secrets.APIX_BOT_PAT }}
remote: https://svc-apix-bot:${{ secrets.APIX_BOT_PAT }}@github.com/${{ github.repository }}
gpg_private_key: ${{ secrets.APIX_BOT_GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.APIX_BOT_PASSPHRASE }}
file_to_commit: 'cfn-resources/${{ github.event.inputs.resourceName }}/compliance/v*/*'
commit_message:
"chore: Update SSDLC report for ${{ needs.publish.outputs.published_version }}"
repo-path: "cfn-resources/"
env:
KONDUKTO_TOKEN: ${{ secrets.KONDUKTO_TOKEN }}
SILKBOMB_IMG: ${{ vars.SILKBOMB_IMG }}
KONDUKTO_REPO: ${{ vars.KONDUKTO_REPO }}
KONDUKTO_BRANCH_PREFIX: ${{ vars.KONDUKTO_BRANCH_PREFIX }}
- name: Upload SBOM as release artifact
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
with:
files: compliance/sbom.json
tag_name: ${{ steps.extract-version.outputs.VERSION }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
19 changes: 19 additions & 0 deletions scripts/compliance/augment-sbom.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail

: "${RELEASE_VERSION:?RELEASE_VERSION environment variable not set}"
DATE=$(date +'%Y-%m-%d')

echo "Augmenting SBOM..."
docker run \
--pull=always \
--platform="linux/amd64" \
--rm \
-v "${PWD}:/pwd" \
-e KONDUKTO_TOKEN \
"$SILKBOMB_IMG" \
augment \
--sbom-in "/pwd/compliance/sbom.json" \
--repo "$KONDUKTO_REPO" \
--branch "$KONDUKTO_BRANCH_PREFIX" \
--sbom-out "/pwd/compliance/augmented-sbom-v${RELEASE_VERSION}-${DATE}.json"
17 changes: 17 additions & 0 deletions scripts/compliance/gen-purls.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

# Reference: .cursor/rules - be surgical, only output PURLs, use jq for JSON parsing

if ! command -v jq &> /dev/null; then
echo "jq is required but not installed. Please install jq to use this script."
exit 1
fi

mkdir -p compliance

PKG_JSON=package.json

# Output all npm dependencies, devDependencies, and peerDependencies as PURLs to compliance/purls.txt
yq -r --output-format json '.dependencies | to_entries | .[] | "pkg:npm/" + .key + "@" + .value' package.json > compliance/purls.txt
yq -r --output-format json '.devDependencies | to_entries | .[] | "pkg:npm/" + .key + "@" + .value' package.json >> compliance/purls.txt
yq -r --output-format json '.peerDependencies | to_entries | .[] | "pkg:npm/" + .key + "@" + .value' package.json >> compliance/purls.txt
10 changes: 10 additions & 0 deletions scripts/compliance/gen-sbom.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -euo pipefail

echo "Generating SBOM..."
docker run --rm \
-v "$PWD:/pwd" \
"$SILKBOMB_IMG" \
update \
--purls /pwd/compliance/purls.txt \
--sbom-out /pwd/compliance/sbom.json
45 changes: 45 additions & 0 deletions scripts/compliance/gen-ssdlc-report.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env bash
set -euo pipefail

release_date=${DATE:-$(date -u '+%Y-%m-%d')}

export DATE="${release_date}"

if [ -z "${AUTHOR:-}" ]; then
AUTHOR=$(git config user.name)
fi

if [ -z "${VERSION:-}" ]; then
VERSION=$(git tag --list 'v*' --sort=-v:refname | head -1 | cut -d 'v' -f 2)
fi

if [ "${AUGMENTED_REPORT:-false}" = "true" ]; then
target_dir="."
file_name="ssdlc-compliance-${VERSION}-${DATE}.md"
SBOM_TEXT=" - See Augmented SBOM manifests (CycloneDX in JSON format):
- This file has been provided along with this report under the name 'linux_amd64_augmented_sbom_v${VERSION}.json'
- Please note that this file was generated on ${DATE} and may not reflect the latest security information of all third party dependencies."

else # If not augmented, generate the standard report
target_dir="compliance/v${VERSION}"
file_name="ssdlc-compliance-${VERSION}.md"
SBOM_TEXT=" - See SBOM Lite manifests (CycloneDX in JSON format):
- https://github.com/mongodb/terraform-provider-mongodbatlas/releases/download/terraform-provider-mongodbatlas%2Fv${VERSION}/sbom.json"
# Ensure terraform-provider-mongodbatlas version directory exists
mkdir -p "${target_dir}"
fi

export AUTHOR
export VERSION
export SBOM_TEXT

echo "Generating SSDLC report for MongoDB Atlas AWS CDK Resources version ${VERSION}, author ${AUTHOR} and release date ${DATE}..."

envsubst < templates/ssdlc-compliance.template.md \
> "${target_dir}/${file_name}"

echo "SSDLC compliance report ready. Files in ${target_dir}/:"
ls -l "${target_dir}/"

echo "Printing the generated report:"
cat "${target_dir}/${file_name}"
12 changes: 12 additions & 0 deletions scripts/compliance/upload-sbom.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail

echo "Uploading SBOMs..."
docker run --rm \
-v "$PWD:/pwd" \
-e KONDUKTO_TOKEN \
"$SILKBOMB_IMG" \
upload \
--sbom-in /pwd/compliance/sbom.json \
--repo "$KONDUKTO_REPO" \
--branch "$KONDUKTO_BRANCH_PREFIX"
29 changes: 29 additions & 0 deletions templates/ssdlc-compliance.template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
SSDLC Compliance Report: MongoDB Atlas AWS CDK Resources ${VERSION}
=================================================================

- Release Creator: ${AUTHOR}
- Created On: ${DATE}

Overview:

- **Product and Release Name**
- MongoDB Atlas AWS CDK Resources ${VERSION}, ${DATE}.

- **Process Document**
- https://www.mongodb.com/blog/post/how-mongodb-protects-against-supply-chain-vulnerabilities

- **Tool used to track third party vulnerabilities**
- [Kondukto](https://arcticglow.kondukto.io/)

- **Dependency Information**
${SBOM_TEXT}

- **Security Testing Report**
- Available as needed from Cloud Security.

- **Security Assessment Report**
- Available as needed from Cloud Security.

Assumptions and attestations:

- Internal processes are used to ensure CVEs are identified and mitigated within SLAs.
Loading