安全なイメージ パイプラインの使用

安全なイメージ パイプラインを作成すると、ソースコードを変更するたびに、署名付きイメージを生成するワークフローを自動化できます。

このページでは、イメージ パイプラインを使用して安全で証明済みのイメージを作成する方法について説明します。

始める前に

安全なイメージ パイプラインを作成し、パイプラインによって作成されたリソースを理解します。

パイプラインの使用

ベースイメージのソースコードは、安全なイメージ パイプラインの設定時に指定した GitHub 組織の baseimgfct-[some number]-containers リポジトリにあります。イメージを更新するには、リポジトリ内の関連ファイルを編集し、変更内容を含む pull リクエストをチームメンバーに送信して確認します。プル リクエストを作成すると、YOUR_PROJECT_NAME-builder の Cloud Build トリガーが更新されたイメージをビルドし、YOUR_PROJECT_NAME-stage の Artifact Registry リポジトリに push します。

チームメンバーが YOUR_PROJECT_NAME-stage でイメージをテストして検証したら、pull リクエストを承認してマージできます。マージ アクションは、イメージのビルド、スキャン、構成証明を行い、ステージング プロジェクトから YOUR_PROJECT_NAME-verified にイメージをプッシュします。

次の手順では、安全なイメージ パイプラインを使用するデベロッパー ワークフローについて説明します。

  1. baseimgfact-[some number]-containers リポジトリに移動します。

  2. 変更する画像に対応するフォルダを開きます(例: ubuntu_18_0_4)。

  3. 編集します。たとえば、Dockerfile を編集してコンテナ イメージを更新します。

  4. [この commit のために新しいブランチを作成し、pull リクエストを開始する] を選択します。

  5. [変更を提案] をクリックします。

  6. [コメントの説明] に「/gcbrun」と入力します。これは、承認されたユーザーのみがリポジトリの変更を提案できるようにするためです。

  7. [Create pull request] をクリックします。

    pull リクエストを作成すると、YOUR_PROJECT_NAME-builder のビルドトリガーによってイメージがビルドされ、YOUR_PROJECT_NAME-stage に push されます。

  8. pull リクエストを確認するチームメンバーを追加します。

  9. チームメンバーはイメージを手動で検証した後、pull リクエストを承認してマージします。

    マージ アクションは、イメージのビルド、テスト、脆弱性スキャンを行い、コンテナ イメージの場合はイメージを証明してから、イメージを YOUR_PROJECT_NAME-verified に push します。

カスタマイズされたセキュリティ ポリシーを指定する

安全なイメージ パイプラインを使用してベース コンテナ イメージを生成および管理する場合は、イメージの検証に使用するカスタム セキュリティ ポリシーを指定できます。

YOUR_PROJECT_NAME-stage は、インスタンス Voucher を実行します。これは、コンテナ イメージのチェックスイートを実行し、Binary Authorization 証明書を作成するオープンソース ツールです。YOUR_PROJECT_NAME-stage のイメージを手動で検証し、チームメンバーが GitHub コンテナ イメージ リポジトリで pull リクエストをマージすると、Voucher によってそのイメージに脆弱性がないかチェックされ、脆弱性は Voucher 構成ファイルで定義されています。チェックが完了した後、検出された脆弱性すべてがしきい値を下回ると、Voucher はイメージの Binary Authorization 証明書を作成し、イメージが YOUR_PROJECT_NAME-verified に push されます。検出された脆弱性のいずれかがしきい値を上回る場合、Voucher は証明書を作成しません。検証された証明書がなければ、Binary Authorization 適用者はイメージの YOUR_PROJECT_NAME-verified への push を拒否します。

Voucher サーバー構成ファイルに、Voucher が実行するチェックを他の条件とともに定義します。これを行う手順については、クーポン サーバーをビルドして構成するをご覧ください。