OCIcrypt
nerdctl >= 0.7 | |
---|---|
nerdctlは、OCIcryptを使用した暗号化と復号化をサポートしています (別名 containerd の imgcrypt)。
JWEモード
暗号化
openssl
を使用して、秘密鍵 (mykey.pem
) と対応する公開鍵 (mypubkey.pem
) を作成します。
nerdctl image encrypt
を使用して、暗号化されたイメージを作成します。
nerdctl image encrypt --recipient=jwe:mypubkey.pem --platform=linux/amd64,linux/arm64 foo example.com/foo:encrypted
nerdctl push example.com/foo:encrypted
注意: このコマンドはイメージレイヤーのみを暗号化し、
Env
や Cmd
などのコンテナ設定は暗号化しません。
暗号化されていない情報を表示するには、 nerdctl image inspect --mode=native --platform=PLATFORM example.com/foo:encrypted
を実行します。
復号化
構成
秘密キー・ファイルを/etc/containerd/ocicrypt/keys
(ルートレスの場合~/.config/containerd/ocicrypt/keys
)に配置します。
containerd 1.4 以前の場合の追加手順
containerd 1.4 以前では、以下の設定を `/etc/containerd/config.toml` に追加する必要があります (ルートレスの場合 ~/.config/`containerd/config.toml` ):
version = 2
[stream_processors]
[stream_processors."io.containerd.ocicrypt.decoder.v1.tar.gzip"]
accepts = ["application/vnd.oci.image.layer.v1.tar+gzip+encrypted"]
returns = "application/vnd.oci.image.layer.v1.tar+gzip"
path = "ctd-decoder"
args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
[stream_processors."io.containerd.ocicrypt.decoder.v1.tar"]
accepts = ["application/vnd.oci.image.layer.v1.tar+encrypted"]
returns = "application/vnd.oci.image.layer.v1.tar"
path = "ctd-decoder"
args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
# NOTE: On rootless, ~/.config/containerd is mounted as /etc/containerd in the namespace.
nerdctlの実行
秘密鍵が保存されている限り、nerdctl run
で暗号化されたイメージを実行するためのフラグは必要ありません
/etc/containerd/ocicrypt/keys
(ルートレスの場合 ~/.config/containerd/ocicrypt/keys
)
nerdctl run example.com/encrypted-image
を実行するだけです。
コンテナーを実行せずにイメージを復号化するには、nerdctl image decrypt
コマンドを使用します。
nerdctl pull --unpack=false example.com/foo:encrypted
nerdctl image decrypt --key=mykey.pem example.com/foo:encrypted foo:decrypted
PGP (GPG) モード
(Undocumented yet)
PKCS7 mode
(Undocumented yet)
PKCS11 mode
(Undocumented yet)
詳細情報
- https://github.com/containerd/imgcrypt (
containers/ocicrypt
を使用したcontainerdの高レベルライブラリ) - https://github.com/containers/ocicrypt (
containerd/imgcrypt
で使用 低レベルライブラリ) - https://github.com/opencontainers/image-spec/pull/775(OCIイメージ仕様の提案)
- https://github.com/containerd/containerd/blob/main/docs/cri/decryption.md (設定ガイド)
plugins."io.containerd.grpc.v1.cri"
の章は nerdctlに適用できません。nerdctl は CRIを使用しません。