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

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

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

始める前に

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

パイプラインの使用

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

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

安全なイメージ パイプラインを使用するためのデベロッパー ワークフローは次のとおりです。

  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 サーバーの設定ファイルで定義できます。その手順については、Voucher サーバーの構築と構成をご覧ください。