安全なイメージ パイプラインを作成する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、ベースコンテナ イメージの生成を自動化する安全なイメージ パイプラインの設定方法について説明します。

概要

セキュア イメージ パイプラインは、Google Cloud のプロジェクト、リソース、GitHub リポジトリのフレームワークを設定するオープンソース ツールです。これを使用して、カスタマイズした安全なベースイメージの作成と維持を行えます。Google Cloud プロジェクトのイメージを使用できます。

次の図は、安全なイメージ パイプラインによって作成されるリソースのフレームワークを示しています。

安全なイメージ パイプライン

パイプラインを設定すると、次のリソースが作成されます。

  • コンテナ イメージのソースコードをホストする GitHub リポジトリ。

  • 3 つの Google Cloud プロジェクト(ビルド プロジェクトステージング プロジェクト検証済みプロジェクト)。イメージ リポジトリでイメージが更新されるたびに、ビルド プロジェクトのCloud Build トリガーはビルドして、署名し、ステージング プロジェクトのArtifact Registryリポジトリに更新されたイメージを push します。ステージング プロジェクトのイメージが手動で検証されると、パイプラインは検証されたプロジェクトにイメージを push します。

料金

安全なイメージ パイプラインは、次の Google Cloud プロダクトを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

必要な IAM 権限

安全なイメージ パイプラインを設定するには、Google Cloud 組織の roles/organization.adminroles/billing.admin の Identity and Access Management ロールが必要です。IAM のロールを付与する方法については、アクセス権の付与、変更、取り消しをご覧ください。

安全なイメージ パイプラインを設定する

安全なイメージ パイプライン GitHub リポジトリには、ベースイメージの生成を自動化するスクリプトが含まれています。

安全な画像パイプラインを設定するには:

  1. セキュア イメージ パイプラインの GitHub リポジトリのクローンをローカルマシンに作成します。

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. secure-image-pipeline ディレクトリに移動します。

    cd secure-image-pipeline/
    
  3. env.sh.tmplenv.sh にコピーします。

    cp env.sh.tmpl env.sh
    
  4. 任意のエディタで env.sh を開きます。

  5. 次の値を編集します。

    • PARENT_ORGANIZATION: Google Cloud 組織の ID を入力します。安全なイメージ パイプライン スクリプトは、この組織を使用して Cloud プロジェクトとベースイメージを生成します。
    • BASETOPICFCT_PROJECT: スクリプトが作成するプロジェクトのプロジェクト ID の作成に使用する文字列を入力します。文字列は 6 ~ 30 文字の小文字、数字、またはハイフンにする必要があります。先頭は文字にする必要があり、末尾にハイフンを使用することはできません。たとえば、foo を指定すると、ID が foo-builderfoo-stagefoo-verified の 3 つのプロジェクトが作成されます。
    • BASETOPICFCT_BUCKET: スクリプトが Terraform 自動化コードを保存するために作成する Cloud Storage バケットの名前を入力します。名前がバケットの命名要件を満たしていることを確認します。
    • BASESIGNFCT_REGION: 使用するリージョンの名前を入力するか、またはデフォルト値を使用します。
    • Billing_ACCOUNT: 組織に関連付けられている請求先アカウントを入力します。
    • GITHUB_TOKEN: GitHub 個人アクセス トークンを入力します。スクリプトは、このトークンを使用して、ベースイメージのソースコードを含む GitHub リポジトリを作成します。
  6. 設定スクリプトを実行する

    ./setup.sh
    
  7. プロンプトが表示されたら、次の GitHub アカウント情報を入力します。

    1. GitHub 組織の名前。

    2. GitHub メールアドレス

    3. GitHub のユーザー名。

  8. このスクリプトは、ベースイメージを保存するための新しいプロジェクトを作成する権限を必要とします。

    1. 「y」と入力します。

    この処理が完了するまでに数分かかります。完了すると、「GitHub のリポジトリをリンクし、いずれかのキーを押して次に進みます」というメッセージが表示されます。

  9. 続行するには、いずれかのキーを押してください。

    このスクリプトは、新しい Google Cloud Console ブラウザ ウィンドウを開き、GitHub リポジトリと Cloud プロジェクトをリンクさせます。

  10. Cloud Console ブラウザ ウィンドウに切り替えます。

  11. [GitHub アプリのインストールの管理] ポップアップで、GitHub アカウントを選択します。

  12. [別のプロジェクトを追加] をクリックします。

  13. [プロジェクトを選択] プルダウンで、YOUR_PROJECT_NAMEビルダー形式のプロジェクトを選択します。

  14. 同意のチェックボックスをオンにして、[次へ] をクリックします。

  15. リポジトリのリストで、baseimgfact-[some number]-containers という名前のリポジトリを選択し、[Connect (1) repositories] をクリックします。

  16. [push トリガーの作成] ページで [スキップ] をクリックします。このスクリプトは push トリガーを自動的に作成します。

  17. [完了] をクリックします。

  18. ターミナルに戻ります。

  19. 続行するには、いずれかのキーを押してください。

スクリプトの実行には数分かかります。

安全なイメージ パイプラインによって作成されたリソース

セットアップ スクリプトの実行が完了すると、次のリソースが作成されます。

GitHub:

  • コンテナ イメージの作成に使用されるソースコードを含む baseimgfct-[some number]-containers という名前のリポジトリ。setup スクリプトは、一般的な Linux ディストリビューションごとに 1 つずつ、簡単な Dockerfile でこのリポジトリにシードを設定します。
  • キーのデプロイ - リポジトリ向けに書き込みアクセスのデプロイキーを分離します。

Google Cloud プロジェクト:

  • GitHub リポジトリでソースコードが更新されるたびに、イメージをビルドしてステージング プロジェクトに push するリソースを含む YOUR_PROJECT_NAME-builder という名前の Cloud プロジェクト。

    このプロジェクトには、baseimgfct-[some number]-containers のメインブランチで pull リクエストまたはマージが実行されたときにビルドを呼び出す Cloud Build トリガーが含まれます。pull リクエストがビルドされ、ステージング プロジェクトにイメージが push されます。マージにより、イメージがビルドされ、検証されたプロジェクトに push されます。

    YOUR_PROJECT_NAME-builder の IAM 権限: このプロジェクトには、パイプラインの変更予定のチームメンバーにのみアクセス権を付与することをおすすめします。プロジェクトにアクセス権を付与する手順については、アクセス権の付与、変更、取り消しをご覧ください。

  • イメージが検証済みプロジェクトにリリースされる前に、手動審査のためにステージングイメージに使用される YOUR_PROJECT_NAME-stage という名前の Cloud プロジェクト。このプロジェクトには次のリソースが含まれています。

    • ビルドされたコンテナ イメージを含む Artifact Registry Docker リポジトリ。
    • プロジェクト内のイメージごとに Cloud Functions が作成されます。これにより、既知の脆弱性に対する新しい修正が見つかるたびに、イメージの再構築がトリガーされます。
    • Cloud Functions の実行に使用される Pub/Sub トピック。
    • Cloud Run デプロイメントとして実行される Voucher サーバーのインスタンス。Voucher サーバーがイメージをセキュリティ ポリシー要件のリストと合わせてチェックします。パイプラインに付属するデフォルトのポリシー要件を使用するか、カスタマイズされたセキュリティ ポリシーを指定します。セキュリティ チェックに合格すると、Voucher サーバーが Binary Authorization を使用してイメージに証明書を追加します。この証明済みイメージは「署名付きイメージ」とも呼ばれ、確認済みのプロジェクトに push されます。

    YOUR_PROJECT_NAME-stage の IAM 権限: Artifact Registry からステージングされたイメージの読み取りが許可されているデベロッパーにのみ、このプロジェクトへのアクセス権を付与することをおすすめします。プロジェクトにアクセス権を付与する手順については、アクセス権の付与、変更、取り消しをご覧ください。

  • YOUR_PROJECT_NAME-verified という名前の Cloud プロジェクト。このプロジェクトには、手動で審査された最終的な署名付きイメージが含まれています。

次のステップ