8.7. 秘密鍵と Rekor を使用した sigstore 署名によるコンテナーイメージの署名
Podman バージョン 4.4 以降、Rekor サーバーとともにコンテナー署名の sigstore 形式を使用できるようになりました。パブリック署名をパブリック rekor.sigstore.dev サーバーにアップロードすることもでき、これにより Cosign との相互運用性が向上します。その後、rekor を明示的に無効にしなくても、cosign verify
コマンドを使用して署名を検証できます。
前提条件
-
containers-tool
メタパッケージがインストールされている。
手順
sigstore 公開鍵/秘密鍵ペアを生成します。
$ skopeo generate-sigstore-key --output-prefix myKey
-
公開鍵と秘密鍵
myKey.pub
とmyKey.private
が生成されます。
-
公開鍵と秘密鍵
次の内容を
/etc/containers/registries.conf.d/default.yaml
ファイルに追加します。docker: <registry>: use-sigstore-attachments: true
use-sigstore-attachments
オプションを設定することで、Podman と Skopeo はコンテナーの sigstore 署名をイメージと共に読み書きし、署名されたイメージと同じリポジトリーに保存できます。注記/etc/containers/registries.d
ディレクトリー内の任意の YAML ファイルのレジストリーまたはリポジトリー設定セクションを編集できます。単一のスコープ (default-docker、レジストリー、または名前空間) は、/etc/containers/registries.d
ディレクトリー内の 1 つのファイルにのみ存在できます。/etc/containers/registries.d/default.yaml
ファイルでシステム全体のレジストリー設定を編集することもできます。すべての YAML ファイルが読み取られ、ファイル名は任意であることに注意してください。
現在のディレクトリーで
Containerfile
を使用してコンテナーイメージをビルドします。$ podman build -t <registry>/<namespace>/<image>
file.yml
ファイルを作成します。privateKeyFile: "/home/user/sigstore/myKey.private" privateKeyPassphraseFile: "/mnt/user/sigstore-myKey-passphrase" rekorURL: "https://<your-rekor-server>"
-
file.yml
は、sigstore 署名の作成に必要なオプションを保存するために使用される sigstore 署名パラメーター YAML ファイルです。
-
イメージに署名し、レジストリーにプッシュします。
$ podman push --sign-by-sigstore=file.yml <registry>/<namespace>/<image>
-
あるいは、同様の
--sign-by-sigstore
オプションを指定してskopeo copy
コマンドを使用して、既存のイメージをコンテナーレジストリー間で移動しながら署名することもできます。
-
あるいは、同様の
パブリックサーバーへの送信には、公開鍵に関するデータと署名に関するメタデータが含まれることに注意してください。
検証
次のいずれかの方法を使用して、コンテナーイメージが正しく署名されていることを確認します。
cosign verify
コマンドを使用します。$ cosign verify <registry>/<namespace>/<image> --key myKey.pub
podman pull
コマンドを使用します。/etc/containers/policy.json
ファイルにrekorPublicKeyPath
フィールドまたはrekorPublicKeyData
フィールドを追加します。{ ... "transports": { "docker": { "<registry>/<namespace>": [ { "type": "sigstoreSigned", "rekorPublicKeyPath": "/path/to/local/public/key/file", } ] ... } } ... }
イメージをプルします:
$ podman pull <registry>/<namespace>/<image>
-
podman pull
コマンドは、設定どおりに署名の存在を強制します。追加のオプションは必要ありません。
-
関連情報
-
podman-push
の man ページ -
podman-build
の man ページ -
container-registries.d
man ページ - Sigstore:ソフトウェアサプライチェーンの信頼とセキュリティーに対するオープンな答え