安全なイメージ パイプラインを作成したら、ソースコードを変更するたびに、署名付きイメージを生成するワークフローを自動化できます。
このページでは、イメージ パイプラインを使用して安全に証明されたイメージを作成する方法について説明します。
始める前に
安全なイメージ パイプラインを作成し、パイプラインによって作成されたリソースについて理解します。
パイプラインの使用
ベースイメージのソースコードは、安全なイメージ パイプラインを設定したときに指定した 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 します。
次の手順では、安全なイメージ パイプラインを使用するためのデベロッパー ワークフローについて説明します。
baseimgfact-[some number]-containers リポジトリに移動します。
変更するイメージに対応するフォルダを開きます(例:
ubuntu_18_0_4
)。編集します。たとえば、コンテナ イメージを更新するには、
Dockerfile
を編集します。[この commit のために新しいブランチを作成し、pull リクエストを開始する] を選択します。
[変更を提案] をクリックします。
[コメントの説明] に「/gcbrun」と入力します。これは、承認されたユーザーのみがリポジトリの変更を提案できるようにするためです。
[Create pull request] をクリックします。
pull リクエストを作成すると、
YOUR_PROJECT_NAME-builder
のビルドトリガーがイメージをビルドし、イメージをYOUR_PROJECT_NAME-stage
に push します。pull リクエストを確認するチームメンバーを追加します。
イメージを手動で検証した後、チームメンバーは 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 サーバーの構築と構成をご覧ください。