Red Hat Training

A Red Hat training course is available for RHEL 8

8.3. 秘密鍵を使用した sigstore 署名によるコンテナーイメージの署名

Podman バージョン 4.2 以降では、コンテナー署名の sigstore 形式を使用できます。

前提条件

  • container-tools モジュールがインストールされている。

手順

  1. sigstore 公開鍵/秘密鍵ペアを生成します。

    $ skopeo generate-sigstore-key --output-prefix myKey
    • 公開鍵と秘密鍵 myKey.pubmyKey.private が生成されます。

      注記

      skopeo generate-sigstore-key コマンドは、RHEL 8.8 から利用できます。それ以外の場合は、アップストリームの Cosign プロジェクトを使用して、公開鍵と秘密鍵のペアを生成する必要があります。

      • cosign ツールをインストールします。

        $ git clone -b v2.0.0 https://github.com/sigstore/cosign
        $ cd cosign
        $ make ./cosign
      • 公開鍵/秘密鍵のペアを生成します。

        $ ./cosign generate-key-pair
        ...
        Private key written to cosign.key
        Public key written to cosign.pub
  2. 次の内容を /etc/containers/registries.d/default.yaml ファイルに追加します。

    docker:
        <registry>:
            use-sigstore-attachments: true

    use-sigstore-attachments オプションを設定することで、Podman と Skopeo はコンテナーの sigstore 署名をイメージと共に読み書きし、署名されたイメージと同じリポジトリーに保存できます。

    注記

    /etc/containers/registries.d/default.yaml ファイルで、システム全体のレジストリー設定を編集できます。/etc/containers/registries.d ディレクトリーにある任意の YAML ファイルのレジストリーまたはリポジトリー設定セクションを編集することもできます。すべての YAML ファイルが読み取られ、ファイル名は任意です。単一のスコープ (default-docker、レジストリー、または名前空間) は、/etc/containers/registries.d ディレクトリー内の 1 つのファイルにのみ存在できます。

  3. 現在のディレクトリーで Containerfile を使用してコンテナーイメージをビルドします。

    $ podman build -t <registry>/<namespace>/<image>
  4. イメージに署名し、レジストリーにプッシュします。

    $ podman push --sign-by-sigstore-private-key ./myKey.private <registry>/<namespace>/image>

    podman push コマンドは、<registry>/<namespace>/<image> ローカルイメージを <registry>/<namespace>/<image> としてリモートレジストリーにプッシュします。--sign-by-sigstore-private-key オプションは、myKey.private 秘密鍵を使用して sigstore 署名を <registry>/<namespace>/<image> イメージに追加します。イメージと sigstore 署名がリモートレジストリーにアップロードされます。

注記

既存のイメージをコンテナーレジストリー間で移動するときに署名する必要がある場合は、skopeo copy コマンドを使用できます。

検証