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

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

概要

安全なイメージ パイプラインは、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 プロジェクトとベースイメージを生成します。
    • BASEIMGFCT_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. 続行するには、いずれかのキーを押してください。

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

  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 します。

    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 プロジェクト。このプロジェクトには、手動で審査された最終的な署名付きイメージが含まれています。

次のステップ