第8章 コンテナーイメージへの署名
Red Hat Enterprise Linux 上でコンテナーイメージに署名することで、イメージの真正性と完全性を確保できます。イメージに署名するには、sigstore 署名を使用してください。この署名方法は、OCI 準拠のコンテナーレジストリーであればどれでも互換性があります。Podman を使用して、リモートレジストリーにプッシュする前にイメージに署名し、署名されていないイメージが拒否されるようにコンシューマーを設定できます。
sigstore 署名を使用すると、署名がコンテナーレジストリーに保存されるため、別途ルックアサイドサーバーを用意する必要がなくなります。コンテナーイメージに署名すると、サプライチェーンへの攻撃を防ぐことができます。
8.1. 秘密鍵を使用して sigstore 署名でコンテナーイメージに署名する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux (RHEL) 上で秘密鍵を使用して sigstore 署名でコンテナーイメージに署名するには、ローカルで管理されている鍵ペアを使用して Podman ツールを使用できます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
sigstore の公開鍵または秘密鍵のペアを生成します。
$ skopeo generate-sigstore-key --output-prefix myKey.private次の内容を
/etc/containers/registries.d/default.yamlファイルに追加します。docker: <registry>: use-sigstore-attachments: trueuse-sigstore-attachmentsオプションを設定することで、Podman と Skopeo はコンテナーの sigstore 署名をイメージと共に読み書きし、署名されたイメージと同じリポジトリーに保存できます。/etc/containers/registries.d/default.yamlファイルで、システム全体のレジストリー設定を編集できます。/etc/containers/registries.dディレクトリーにある任意の YAML ファイルのレジストリーまたはリポジトリー設定セクションを編集することもできます。すべての YAML ファイルが読み取られ、ファイル名は任意です。単一のスコープ (default-docker、registry、または namespace) は、
/etc/containers/registries.d/ディレクトリー内の 1 つのファイルにのみ存在できます。カレントディレクトリーにある
Containerfileを使用して、コンテナーイメージをビルドします。$ podman build -t <registry>/<namespace>/<image>イメージに署名し、レジストリーにプッシュします。
$ 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秘密鍵を使用して<registry>/<namespace>/<image>イメージに sigstore 署名を追加します。イメージと sigstore 署名がリモートレジストリーにアップロードされます。注記既存のイメージをコンテナーレジストリー間で移動するときに署名する必要がある場合は、
skopeo copyコマンドを使用できます。詳細は、お使いのシステムの
podman-push(1)およびpodman-build(1) のman ページを参照してください。
検証
イメージをプルします。
$ podman pull <registry>/<namespace>/<image>設定したとおりに署名の存在を強制するには、
podman pullコマンドを実行する必要があります。設定済みのレジストリーから、署名されていないイメージ、または誤ったキーで署名されたイメージを取得しようとすると、コマンドは失敗します。