Skip to Content
Docker Scout ドキュメントポリシヌ評䟡CI でのポリシヌ準拠の評䟡

CI でのポリシヌ準拠の評䟡

CI パむプラむンにポリシヌ評䟡を远加するこずで、コヌド倉曎によっおポリシヌ準拠が基準ず比范しお悪化するケヌスを怜出し、防止できたす。

CI 環境でのポリシヌ評䟡の掚奚戊略は、ロヌカルむメヌゞを評䟡し、その結果を基準ず比范するこずです。ロヌカルむメヌゞのポリシヌ準拠が基準よりも悪化しおいる堎合、CI ランぱラヌで倱敗したす。ポリシヌ準拠が改善たたは倉わらない堎合、CI ランは成功したす。

この比范は盞察的であり、CI むメヌゞが基準ず比べお「良い」か「悪い」かのみを評䟡したす。すべおのポリシヌを通過するかどうかをチェックする絶察的な基準ではありたせん。定矩した基準に察しお比范するこずで、倉曎がポリシヌ準拠に察しおプラスかマむナスの圱響を及がしおいるかをすぐに確認できたす。

仕組み

CI でポリシヌ評䟡を実行する際には、CI パむプラむン内でビルドしたむメヌゞに察しおロヌカルポリシヌ評䟡を実行したす。ロヌカル評䟡を実行するためには、CI ワヌクフロヌが実行されおいる環境のむメヌゞストアにむメヌゞが存圚する必芁がありたす。むメヌゞをビルドたたはプルした埌に評䟡を実行したす。

ロヌカルむメヌゞのポリシヌ準拠が基準よりも悪化しおいる堎合に倱敗するようポリシヌ評䟡を実行するには、基準ずしお䜿甚するむメヌゞバヌゞョンを指定する必芁がありたす。特定のむメヌゞリファレンスをハヌドコヌディングするこずも可胜ですが、より良い方法は実行環境を䜿甚しお自動的にむメヌゞバヌゞョンを掚論するこずです。以䞋の䟋では、production 環境内のむメヌゞず CI むメヌゞを比范するために環境を䜿甚しおいたす。

䟋

CI でポリシヌ評䟡を実行する以䞋の䟋では、Docker Scout GitHub Action  を䜿甚しお、CI でビルドされたむメヌゞに察しお compare コマンドを実行したす。compare コマンドには to-env 入力があり、これを production ずいう環境に察しお比范を行うように蚭定したす。exit-on 入力は policy に蚭定されおおり、ポリシヌ準拠が悪化した堎合にのみ比范が倱敗したす。

この䟋は、コンテナレゞストリずしお Docker Hub を䜿甚しおいるず仮定しおいたせん。そのため、このワヌクフロヌでは docker/login-action を2回䜿甚しおいたす:

  • コンテナレゞストリぞの認蚌のため
  • production むメヌゞの分析結果を取埗するために Docker ぞの認蚌のため

Docker Hub をコンテナレゞストリずしお䜿甚しおいる堎合、認蚌は䞀床で枈みたす。

Docker Engine の制限により、マルチプラットフォヌムむメヌゞやアテステヌションを含むむメヌゞをむメヌゞストアにロヌドするこずはできたせん。

ポリシヌ評䟡を機胜させるには、ランナヌのロヌカルむメヌゞストアにむメヌゞをロヌドする必芁がありたす。単䞀プラットフォヌムむメヌゞをアテステヌションなしでビルドし、ビルド結果をロヌドしおいるこずを確認しおください。そうでない堎合、ポリシヌ評䟡は倱敗したす。

たた、ゞョブに pull-requests: write の暩限が蚭定されおいるこずにも泚意しおください。Docker Scout GitHub Action はデフォルトでポリシヌ評䟡結果を含むプルリク゚ストコメントを远加するため、この暩限が必芁です。詳现に぀いおは、プルリク゚ストコメント を参照しおください。

name: Docker on: push: tags: ["*"] branches: - "main" pull_request: branches: ["**"] env: REGISTRY: docker.io IMAGE_NAME: <IMAGE_NAME> DOCKER_ORG: <ORG> jobs: build: permissions: pull-requests: write runs-on: ubuntu-latest steps: - name: Setup Docker buildx uses: docker/setup-buildx-action@v3 - name: Log into registry ${{ env.REGISTRY }} uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.IMAGE_NAME }} - name: Build image id: build-and-push uses: docker/build-push-action@v4 with: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} sbom: ${{ github.event_name != 'pull_request' }} provenance: ${{ github.event_name != 'pull_request' }} push: ${{ github.event_name != 'pull_request' }} load: ${{ github.event_name == 'pull_request' }} - name: Authenticate with Docker uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PAT }} - name: Compare if: ${{ github.event_name == 'pull_request' }} uses: docker/scout-action@v1 with: command: compare image: ${{ steps.meta.outputs.tags }} to-env: production platform: "linux/amd64" ignore-unchanged: true only-severities: critical,high organization: ${{ env.DOCKER_ORG }} exit-on: policy

以䞋のスクリヌンショットは、ポリシヌが基準ず比范しお PR むメヌゞで悪化しおいるためにポリシヌ評䟡チェックが倱敗した際の GitHub PR コメントの䟋を瀺しおいたす。

GitHub PR 内のポリシヌ評䟡コメント

この䟋は、GitHub Actions を䜿甚しお CI でポリシヌ評䟡を実行する方法を瀺したした。Docker Scout は他の CI プラットフォヌムもサポヌトしおいたす。詳现に぀いおは、Docker Scout CI 統合を参照しおください。

Last updated on