安全なイメージ パイプラインを作成すると、ソースコードを変更するたびに、署名付きイメージを生成するワークフローを自動化できます。
このページでは、イメージ パイプラインを使用して安全で証明済みのイメージを作成する方法について説明します。
始める前に
安全なイメージ パイプラインを作成し、パイプラインによって作成されたリソースを理解します。
パイプラインの使用
ベースイメージのソースコードは、安全なイメージ パイプラインの設定時に指定した 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
にイメージをプッシュします。
次の手順では、安全なイメージ パイプラインを使用するデベロッパー ワークフローについて説明します。
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 が実行するチェックを他の条件とともに定義します。これを行う手順については、クーポン サーバーをビルドして構成するをご覧ください。