地平線をスキャンする:ソフトウェアサプライチェーンにおけるセキュリティの左シフト (3/12)
2024-12-14
Machine-translated — the English original is authoritative.
サイバーセキュリティは長年、対応的なものであり、多くの場合、デプロイ後に脆弱性に対処してきました。しかし、クラウドネイティブアプリケーションの時代において、このアプローチはもはや十分ではありません。セキュリティを左にシフトする—開発の最も早い段階に組み込む—ことで、組織はリスクが本番環境に影響を与える前に、それを特定し、軽減することができます。
ソースコード、ビルドシステム、コンテナイメージを含むソフトウェアサプライチェーンは、攻撃者の主要な標的です。開発ワークフローにスキャンツールを直接統合することで、組織はプロアクティブなリスク管理と安全なソフトウェア配信パイプラインに関するNIS 2およびDORAの要件を満たすことができます。
なぜ左シフトが重要なのか
脆弱性が検出されるのが早ければ早いほど、修正にかかるコストと時間は少なくなります。セキュリティを左にシフトすることは、回復力とプロアクティブな対策を強調するDORAと完全に一致します。例えば、開発中のソースコードスキャンは、問題が下流に伝播する前にそれを捕捉し、リスクを軽減し、運用の継続性を維持します。
Aqua CNAPPで左シフトする方法
- レジストリのバルクスキャン:
- Aquaをすべてのソースコードリポジトリおよびコンテナレジストリに接続します。
- スケジュールされたスキャンを設定し、新しいアーティファクトがすべて脆弱性、誤設定、およびシークレットについて分析されるようにします。


-
継続的なモニタリング:
-
Aquaの自動プルスケジュールを活用し、新しいコードがコミットされたり、イメージがレジストリにプッシュされたりするたびに、スキャンを最新の状態に保ちます。
-
開発者のエンパワーメント:
-
CI/CDツールを使用して、スキャン結果を直接開発者のワークフローに統合します。Aquaのフィードバックメカニズムは実行可能な洞察を提供し、開発者が環境から離れることなく問題を迅速に修正できるようにします。
-
ベースラインの確立:
-
初期スキャン結果を使用して、脆弱性および誤設定のベースラインを作成します。クリティカルな問題の修正を優先し、時間の経過とともに進捗をモニタリングします。
実践的な例: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).