Skip to main content

Sikkerhetsscanning med Pharos

Pharos er en GitHub action som forenkler statisk skanning av konfigurasjon og container images.

Det er anbefalt å skanne images minst en gang i døgnet og ved bygging av images fra hovedbranchen.

For å få Pharos-oppdateringer automatisk er det anbefalt å sette opp Dependabot.

Eksempler

Kjør skannere en gang i døgnet

Scanning en gang i døgnet kan se ut som eksempelet under. Merk at matrix er brukt for å scanne flere images i parallel, men det er ikke nødvendig for repoer med kun ett image:

name: Sikkerhetsscanning av images

on:
schedule:
- cron: '00 5 * * *' # 05:00 UTC each day.

env:
registry: ghcr.io

jobs:
pharos:
name: Run Pharos
runs-on: ubuntu-latest
strategy:
fail-fast: false # De andre jobbene i matrisen vil kjøre selv om en av dem feiler
matrix:
package-name: [ 'image1', 'image2', 'image3', 'image4' ]

# Permissions påkrevd av pharos
permissions:
actions: read
packages: read
contents: read
security-events: write

steps:
- name: Run Pharos
uses: kartverket/pharos@v0.2.5
with:
trivy_category: ${{ matrix.package-name }}
image_url: ${{ env.registry }}/${{ github.repository_owner }}/${{ matrix.package-name }}:latest

Kjør skannere for hver gang et nytt image bygges

Det er lurt å skanne images ved hvert push til hovedbranchen. Da må imaget pushes først, og så kan det skannes av Pharos. Det er anbefalt å kjøre scanning for push til hovedbranchen, og ikke ved f.eks. push til tag. Om scanning kjøres ved push til hovebranchen for repoet blir "Code scanning"-oversikten blir intuitiv og resultatene dukker også opp i sikkerhetsmetrikkerverktøyet i Utviklerportalen.

on:
push:
branches:
- main

env:
image_name: ghcr.io/${{ github.repository }} # ghcr.io/kartverket/repo-name

jobs:
build:
steps:
# Most steps skipped for brevity
- name: Build and push container image
id: build-image
uses: docker/build-push-action@v6
with:
push: true # Image must be pushed before scanning
tags: ${{ env.image_name }}:latest
# Remaining properties skipped for brevity

outputs:
image_digest: ${{ steps.build-image.outputs.image_digest }}

run-pharos:
name: Run Pharos
runs-on: ubuntu-latest
# Only run on pushes to default branch
if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch
permissions:
actions: read
packages: read
contents: read
security-events: write
steps:
- name: "Run Pharos"
uses: kartverket/pharos@v0.2.5
with:
image_url: ${{ env.image_name }}@${{ needs.build.outputs.image_digest }}

Konfigurasjon av skannere

Konfigurasjonsskanning gjøres automatisk om det ikke skrus av. Da vil bl.a. Dockerfile og Terraform-kode skannes. Skanning av container images gjøres automatisk om image_url er spesifisert.

Workflowen vil feile om sårbarheter vurdert som high eller critical finnes. Dette kan konfigureres enten ved å sette allow_serverity_level til high eller critical, eller med å sette disable_serverity_check til false.

For mer informasjon, se på dokumentasjonen for konfigurerbare inputs.