署名鍵
このページでは、キーのブートストラッププロセスについて、その方法とブートストラッププロセスが必要な理由を含めて説明します。
提供するもの
署名検証を容易にするため、cert-managerのウェブサイトから直接公開鍵情報を提供しています。鍵は、成果物がホストされている場所とは異なる場所から提供することが重要です。もし鍵が成果物と同じ場所にホストされていた場合、成果物を変更できる攻撃者は鍵も変更できてしまうでしょう!
static/public-keys
の下に、いくつかの鍵の種類を提供しています。
cert-manager-pgp-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.asc
: ASCIIアーマー化されたPGP公開鍵で、helm verify
を介してhelm chartの署名を検証するために使用します(キーリングに変換した後)。cert-manager-keyring-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg
: 古い形式のGPGキーリングで、helm verify
の--keyring
パラメータで必要となります。以下のキーリングを参照してください。cert-manager-pubkey-2021-09-20.pem
: 署名に使用される生のPEMエンコードされた公開鍵です。GPG(したがってhelm)では使用できませんが、他の検証タイプで使用する必要があります。
背景/アーキテクチャ
cert-managerの成果物のコード署名は、クラウドKMSキーを使用して完全に行われます。これにより、誰も平文で秘密鍵にアクセスできないようにします。したがって、鍵を使用したすべての署名操作はクラウドAPIを通じて行われ、ログが記録されます。
現在、cert-managerのリリースインフラストラクチャの残りの部分もGCPにあるため、すべての鍵はGoogle KMSにあります。鍵、および鍵へのアクセスを許可するロールバインディングは、クローズドソースのJetstackリポジトリ内のterraformで指定されています。
なぜブートストラップが必要なのか?
KMSキーの場合、秘密鍵は取得できませんが、公開鍵は取得可能であり、鍵によって作成された署名をエンドユーザーが検証できるように *必ず* 取得する必要があります。GCPでは、公開鍵の取得自体がAPI呼び出しであり、生のキーをPEMエンコードされた形式で返します。
そのPEMエンコードされた公開鍵は、一部のケース(たとえば、cosign
を使用して作成されたコンテナ署名の検証など)では機能しますが、Helmチャートの署名(残念ながら)にはPGPを使用する必要があるため、Helmチャートの検証には十分ではありません。
PGP IDのブートストラップ
GCP KMSをPGPキーとして使用するためのシムを使用し、2つの別々の署名キーを使用しないようにすることが可能ですが、PGP公開IDは単純な公開鍵よりも少し複雑です。署名者を識別するための名前、作成時間、コメント、および電子メールアドレスも含まれています。この公開「ID」自体は、秘密鍵によって署名される必要があります(ID内の情報が正当であることを証明するため)。
このブートストラップは、cert-managerリリースツール、cmrel
を使用して実行できます。
# note that the key name might not exactly match this in the future$ cmrel bootstrap-pgp --key "projects/cert-manager-release/locations/europe-west1/keyRings/cert-manager-release/cryptoKeys/cert-manager-release-signing-key/cryptoKeyVersions/1"
これにより、アーマー化されたPGP IDと生のPEM公開鍵の両方を出力するクラウドビルドジョブがトリガーされます。値はジョブ出力からコピーできます。
GPGキーリング
追加のUX機能として、PGP IDからGPGキーリングを生成することもできます。これは、キーリングがHelm CLIで実際にチャートを検証するために必要なものであるためです。
# Example of verifying a chart.$ helm verify --keyring cert_manager_keyring_1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg /path/to/chart.tgzSigned by: cert-manager Maintainers <cert-manager-maintainers@googlegroups.com>Using Key With Fingerprint: 1020....Chart Hash Verified: sha256:bb86...
キーリングは、このスクリプトを使用して生成できます。