diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml
new file mode 100644
index 00000000..5c45843e
--- /dev/null
+++ b/.github/workflows/trivy-scan.yml
@@ -0,0 +1,38 @@
+name: Trivy Scan
+
+on:
+  # Run weekly
+  schedule:
+  - cron: '0 12 * * 1'
+  # Allow manual runs
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+jobs:
+  trivy-scan:
+    strategy:
+      matrix:
+        branch:
+        - main
+        - release-1.10.0
+    runs-on: ubuntu-latest
+    permissions:
+      security-events: write
+    steps:
+    - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+      with:
+        persist-credentials: false
+        ref: ${{ matrix.branch }}
+    - uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d # 0.18.0
+      with:
+        scanners: 'vuln,secret'
+        scan-type: 'fs'
+        format: 'sarif'
+        output: 'trivy-results.sarif'
+        ignore-unfixed: true
+        severity: 'HIGH,CRITICAL'
+    - uses: github/codeql-action/upload-sarif@1b1aada464948af03b950897e5eb522f92603cc2 # v3.24.9
+      with:
+        sarif_file: 'trivy-results.sarif'