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

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

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

始める前に

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

パイプラインの使用

ベースイメージのソースコードは、安全なイメージ パイプラインを設定したときに指定した 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 サーバーの構築と構成をご覧ください。