第8章 コンテナーイメージへの署名
GNU Privacy Guard (GPG) 署名または sigstore 署名を使用して、コンテナーイメージに署名できます。両方の署名手法は、通常、OCI 準拠のコンテナーレジストリーと互換性があります。Podman を使用して、リモートレジストリーにプッシュする前にイメージに署名し、署名されていないイメージが拒否されるようにコンシューマーを設定できます。コンテナーイメージに署名すると、サプライチェーンへの攻撃を防ぐことができます。
GPG キーを使用して署名するには、署名を配布するために別のルックアサイドサーバーをデプロイメントする必要があります。ルックアサイドサーバーは、任意の HTTP サーバーにすることができます。Podman バージョン 4.2 以降では、コンテナー署名の sigstore 形式を使用できます。GPG キーと比較して、sigstore 署名はコンテナーレジストリーに格納されるため、個別のルックアサイドサーバーは必要ありません。
8.1. GPG 署名を使用したコンテナーイメージへの署名
GNU Privacy Guard (GPG) キーを使用してイメージに署名できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - GPG ツールがインストールされます。
ルックアサイド Web サーバーがセットアップされ、その上でファイルを公開できます。
システム全体のレジストリー設定は、
/etc/containers/registries.d/default.yaml
ファイルで確認できます。lookaside-staging
オプションは、署名を書き込むためのファイルパスを参照し、通常、署名を発行するホストで設定されます。# cat /etc/containers/registries.d/default.yaml docker: <registry>: lookaside: https://registry-lookaside.example.com lookaside-staging: file:///var/lib/containers/sigstore ...
手順
GPG キーを生成します。
# gpg --full-gen-key
公開鍵をエクスポートします。
# gpg --output <path>/key.gpg --armor --export <username@domain.com>
現在のディレクトリーで
Containerfile
を使用してコンテナーイメージをビルドします。$ podman build -t <registry>/<namespace>/<image>
<registry>
、<namespace>
、および<image>
をコンテナーイメージ識別子に置き換えます。詳細については、コンテナーレジストリー を参照してください。イメージに署名し、レジストリーにプッシュします。
$ podman push \ --sign-by <username@domain.com> \ <registry>/<namespace>/<image>
注記既存のイメージをコンテナーレジストリー間で移動するときに署名する必要がある場合は、
skopeo copy
コマンドを使用できます。オプション: 新しいイメージシグネチャーを表示します。
# (cd /var/lib/containers/sigstore/; find . -type f) ./<image>@sha256=<digest>/signature-1
ローカル署名をルックアサイド Web サーバーにコピーします。
# rsync -a /var/lib/containers/sigstore <user@registry-lookaside.example.com>:/registry-lookaside/webroot/sigstore
署名は、lookaside-staging
オプションによって決定される場所 (この場合は /var/lib/containers/sigstore
ディレクトリー) に保存されます。
検証
- 詳細は、GPG イメージ署名の検証 を参照してください。
関連情報
-
podman-image-trust
の man ページ -
podman-push
の man ページ -
podman-build
の man ページ - GPG キーペアの生成方法