地平線をスキャンする:ソフトウェアサプライチェーンにおけるセキュリティの左シフト (3/12)

2024-12-14

地平線をスキャンする:ソフトウェアサプライチェーンにおけるセキュリティの左シフト (3/12)

Machine-translated — the English original is authoritative.

サイバーセキュリティは長年、対応的なものであり、多くの場合、デプロイ後に脆弱性に対処してきました。しかし、クラウドネイティブアプリケーションの時代において、このアプローチはもはや十分ではありません。セキュリティを左にシフトする—開発の最も早い段階に組み込む—ことで、組織はリスクが本番環境に影響を与える前に、それを特定し、軽減することができます。

ソースコード、ビルドシステム、コンテナイメージを含むソフトウェアサプライチェーンは、攻撃者の主要な標的です。開発ワークフローにスキャンツールを直接統合することで、組織はプロアクティブなリスク管理と安全なソフトウェア配信パイプラインに関するNIS 2およびDORAの要件を満たすことができます。

なぜ左シフトが重要なのか

脆弱性が検出されるのが早ければ早いほど、修正にかかるコストと時間は少なくなります。セキュリティを左にシフトすることは、回復力とプロアクティブな対策を強調するDORAと完全に一致します。例えば、開発中のソースコードスキャンは、問題が下流に伝播する前にそれを捕捉し、リスクを軽減し、運用の継続性を維持します。

Aqua CNAPPで左シフトする方法

  1. レジストリのバルクスキャン:
  2. Aquaをすべてのソースコードリポジトリおよびコンテナレジストリに接続します。
  3. スケジュールされたスキャンを設定し、新しいアーティファクトがすべて脆弱性、誤設定、およびシークレットについて分析されるようにします。

Image Registry Integration

Source Code Management Registry Integration

  1. 継続的なモニタリング:

  2. Aquaの自動プルスケジュールを活用し、新しいコードがコミットされたり、イメージがレジストリにプッシュされたりするたびに、スキャンを最新の状態に保ちます。

  3. 開発者のエンパワーメント:

  4. CI/CDツールを使用して、スキャン結果を直接開発者のワークフローに統合します。Aquaのフィードバックメカニズムは実行可能な洞察を提供し、開発者が環境から離れることなく問題を迅速に修正できるようにします。

  5. ベースラインの確立:

  6. 初期スキャン結果を使用して、脆弱性および誤設定のベースラインを作成します。クリティカルな問題の修正を優先し、時間の経過とともに進捗をモニタリングします。

実践的な例:CI/CDパイプラインでのスキャンの自動化

CI/CDパイプラインにおける典型的なAquaの設定は、この例ではGithub Actionsを使用しており、以下のようになります:


name: allthingsclowd APP 
on:
  push:
    branches:
      - main
  pull_request:
    branches: 
      - main

  workflow_dispatch:

env:
   DOCKER_REPOSITORY: allthingscloud # name of Docker Hub ID
   IMAGE_NAME: allthingsclowd-app
   IMAGE_TAG: ${{ github.run_number }} # $GITHUB_RUN_NUMBER

jobs:
  CI-Code:
    runs-on: ubuntu-22.04
    steps:

      - name: Checkout code
        uses: actions/checkout@v2

      - name: Integrity pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Aqua code scanning(SCA,IaC, Secrets/Sensitive Data, Pipeline file and SAST)
        uses: docker://aquasec/aqua-scanner
        with:
          args: trivy fs --scanners config,vuln,secret --sast --reachability --package-json . 
          # To customize which severities to scan for, add the following flag: --severity UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
          # To enable SAST scanning, add: --sast
          # To enable npm/dotnet non-lock file scanning, add: --package-json / --dotnet-proj
        env:
          AQUA_KEY: ${{ secrets.AQUA_KEY }}
          AQUA_SECRET: ${{ secrets.AQUA_SECRET }}
          GITHUB_TOKEN: ${{ github.token }}
          TRIVY_RUN_AS_PLUGIN: 'aqua'

  CI-Build:
    needs: CI-Code
    runs-on: ubuntu-22.04

    steps:   

      - name: Checkout code
        uses: actions/checkout@v2

      - name: Integrity pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Build application
        run: echo Application has been succesfully built   

      - name: Build image container
        run: |
          sudo docker build -t $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG .

      - name: Login to Aqua Registry
        uses: docker/login-action@v1
        with:
          registry: registry.aquasec.com
          username: ${{ secrets.AQUA_REGISTRY_USERNAME }}
          password: ${{ secrets.AQUA_REGISTRY_PASS }}

      - name: Scanning container image
        run: |
          docker run --rm -v /var/run/docker.sock:/var/run/docker.sock registry.aquasec.com/scanner:2022.4 scan --register --registry "CI/CD_graham_images" --host ${{ secrets.AQUA_HOST }} --local $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG --token ${{ secrets.AQUA_TOKEN }} --layer-vulnerabilities --no-verify --html > .github/workflows/scan-output.html

      - name: Docker Login & Push
        run: |
          echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
          docker push $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG 
          docker tag $DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG $DOCKER_REPOSITORY/$IMAGE_NAME:latest
          docker push $DOCKER_REPOSITORY/$IMAGE_NAME:latest 

      - name: SBOM Generation
        run: |
          export BILLY_SERVER=https://billy.codesec.aquasec.com
          curl -sLo install.sh download.codesec.aquasec.com/billy/install.sh
          curl -sLo install.sh.checksum https://github.com/argonsecurity/releases/releases/latest/download/install.sh.checksum
          if ! cat install.sh.checksum | sha256sum ; then
          echo "install.sh checksum failed"
          exit 1
          fi
          BINDIR="." sh install.sh
          rm install.sh install.sh.checksum
          ./billy generate \
            --access-token "${{ github.token }}" \
            --aqua-key "${{ secrets.AQUA_KEY }}" \
            --aqua-secret "${{ secrets.AQUA_SECRET }}" \
            --artifact-path "$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"

  CD-Deploy_to_dev:

    needs: CI-Build
    runs-on: ubuntu-22.04

    steps: 

      - name: Checkout code
        uses: actions/checkout@v2

      - name: interity Pipeline
        uses: aquasecurity/pipeline-enforcer-action@main
        with:
          aqua-key: ${{ secrets.AQUA_KEY }}
          aqua-secret: ${{ secrets.AQUA_SECRET }}
          verbose: true

      - name: Setting K8s context
        uses: azure/k8s-set-context@v3
        with:
           method: kubeconfig
           kubeconfig: ${{ secrets.KUBE_CONFIG_GRAZ }}
           context: graz-dev-context


      - name: Deploying to Dev
        run: |
          export IMAGE_CONTAINER="docker.io/$DOCKER_REPOSITORY/$IMAGE_NAME:$IMAGE_TAG"
          sed -e "s#{{ IMAGE_CONTAINER }}#$IMAGE_CONTAINER#g" "./manifests/dev/deployment.yaml" |
          kubectl apply -f -
          kubectl apply -f ./manifests/dev/service.yaml

この自動化により、すべてのビルドが高重大度の脆弱性についてスキャンされ、開発者に即座にフィードバックが提供されます。

まとめ

セキュリティを左にシフトすることは、ソフトウェアサプライチェーンを脆弱性のホットスポットから回復力の要塞へと変革します。Aquaのスキャンツールをワークフローに組み込むことで、セキュリティを改善するだけでなく、運用回復力に対するDORAのプロアクティブなアプローチとも整合します。早期に行動すればするほど、防御は強固になります。

Originally published on allthingscloud.eu (2024-12-14).

← All posts