1.3. Tekton Chains でデータに署名するための秘密
クラスター管理者は、キーペアを生成し、Tekton Chains を使用して、Kubernetes シークレットでアーティファクトに署名できます。Tekton Chains が機能するには、暗号化されたキーの秘密鍵とパスワードが、openshift-pipelines
namespace の signing-secrets
シークレットの一部として存在している必要があります。
現在、Tekton Chains は x509
および cosign
署名スキームをサポートしています。
使用できるのは、サポートされている署名スキームのいずれか 1 つのみです。
x509 署名スキーム
Tekton Chains で x509
署名スキームを使用するには、次の要件を満たす必要があります。
-
x509.pem
構造を使用してsigning-secrets
に秘密鍵を保存します。 -
秘密鍵を暗号化されていない
PKCS #8
PEM ファイルとして保存します。 -
鍵は
ed25519
またはecdsa
タイプです。
cosign 署名スキーム
Tekton Chains で cosign
署名スキームを使用するには、次の要件を満たす必要があります。
-
秘密鍵を
cosign.key
構造を使用してsigning-secrets
に保存します。 -
パスワードを
cosign.password
構造でsigning-secrets
に保存します。 -
秘密鍵を
ENCRYPTED COSIGN PRIVATE KEY
タイプの暗号化された PEM ファイルとして保存します。
1.3.1. TektonConfig CR を使用した cosign キーペアの生成 リンクのコピーリンクがクリップボードにコピーされました!
Tekton Chains シークレットの cosign
署名スキームを使用するには、TektonConfig
カスタムリソース (CR) の generateSigningSecret
フィールドを true
に設定して、ECDSA 暗号化を使用する cosign
キーペアを生成します。
前提条件
-
OpenShift CLI (
oc
) ユーティリティーがインストールされている。 -
openshift-pipelines
namespace の管理者権限で OpenShift Container Platform クラスターにログインしている。
手順
次のコマンドを実行して、
TektonConfig
CR を編集します。oc edit TektonConfig config
$ oc edit TektonConfig config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TektonConfig
CR で、generateSigningSecret
の値をtrue
に設定します。TektonConfig CR を使用した ECDSA cosign キーペアの作成例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- デフォルト値は
false
です。値をtrue
に設定すると、ecdsa
キーペアが生成されます。
数分経過してから、アーティファクトアテステーションの検証に使用できるように、シークレットから公開鍵を抽出して保存します。キーを抽出するには、次のコマンドを使用します。
oc extract -n openshift-pipelines secret/signing-secrets --keys=cosign.pub
$ oc extract -n openshift-pipelines secret/signing-secrets --keys=cosign.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果
OpenShift Pipelines Operator は、ecdsa
タイプの cosign
キーペアを生成し、それを openshift-pipelines
namespace の signing-secrets
シークレットに保存します。シークレットには次のファイルが含まれます。
-
cosign.key
: 秘密鍵 -
cosign.password
: 秘密鍵を復号するためのパスワード -
cosign.pub
: 公開鍵
signing-secrets
シークレットがすでに存在する場合、Operator はそのシークレットを上書きしません。
カレントディレクトリー内の cosign.pub
ファイルには、シークレットから抽出された公開鍵が含まれています。
generateSigningSecret
フィールドを true
から false
に設定すると、Red Hat OpenShift Pipelines Operator は signing-secrets
シークレットの値をオーバーライドおよび空にします。
Red Hat OpenShift Pipelines Operator は、以下のセキュリティー機能を提供しません。
- キーのローテーション
- 鍵の使用の監査
- 鍵への適切なアクセス制御
1.3.2. cosign ツールを使用した署名シークレットの手動生成 リンクのコピーリンクがクリップボードにコピーされました!
cosign
署名ツールを使用すると、Tekton Chains で cosign
スキームを使用できます。
前提条件
- Cosign ツールをインストールしている。Cosign ツールのインストールは、Cosign の Sigstore ドキュメント を参照してください。
手順
次のコマンドを実行して、
cosign.key
とcosign.pub
キーのペアを生成します。cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cosign はパスワードの入力を求め、Kubernetes シークレットを作成します。
-
暗号化された
cosign.key
秘密鍵とcosign.password
復号化パスワードを、signing-secrets
Kubernetes シークレットに保存します。秘密鍵がENCRYPTED COSIGN PRIVATE KEY
型の暗号化された PEM ファイルとして保存されていることを確認します。
1.3.3. skopeo ツールを使用した署名シークレットの手動生成 リンクのコピーリンクがクリップボードにコピーされました!
skopeo
ツールを使用して鍵を生成し、Tekton Chains で cosign
署名スキームで使用できます。
前提条件
-
Linux システムに
skopeo
パッケージをインストールした。
手順
次のコマンドを実行して、公開鍵と秘密鍵のペアを生成します。
skopeo generate-sigstore-key --output-prefix <mykey>
$ skopeo generate-sigstore-key --output-prefix <mykey>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<mykey>
を選択した鍵名に置き換えます。
Skopeo は秘密鍵のパスフレーズの入力を求め、
<mykey>.private
および<mykey>.pub
という名前の鍵ファイルを作成します。次のコマンドを実行し、
base64
ツールを使用して<mykey>.pub
ファイルをエンコードします。base64 -w 0 <mykey>.pub > b64.pub
$ base64 -w 0 <mykey>.pub > b64.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、
base64
ツールを使用して<mykey>.private
ファイルをエンコードします。base64 -w 0 <mykey>.private > b64.private
$ base64 -w 0 <mykey>.private > b64.private
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、
base64
ツールを使用してパスフレーズをエンコードします。echo -n '<passphrase>' | base64 -w 0 > b64.passphrase
$ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<passphrase>
を鍵ペアに使用したパスフレーズに置き換えます。
次のコマンドを実行して、
openshift-pipelines
namespace にsigning-secrets
シークレットを作成します。oc create secret generic signing-secrets -n openshift-pipelines
$ oc create secret generic signing-secrets -n openshift-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
signing-secrets
シークレットを編集します。oc edit secret -n openshift-pipelines signing-secrets
$ oc edit secret -n openshift-pipelines signing-secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の方法で、エンコードされた鍵をシークレットのデータに追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3.4. "secret already exists" エラーの解決 リンクのコピーリンクがクリップボードにコピーされました!
signing-secret
シークレットがすでに入力されている場合、このシークレットを作成するコマンドは次のエラーメッセージを出力する可能性があります。
Error from server (AlreadyExists): secrets "signing-secrets" already exists
Error from server (AlreadyExists): secrets "signing-secrets" already exists
このエラーは、シークレットを削除することで解決できます。
手順
次のコマンドを実行して、
signing-secret
シークレットを削除します。oc delete secret signing-secrets -n openshift-pipelines
$ oc delete secret signing-secrets -n openshift-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 鍵ペアを再作成し、任意の署名スキームを使用してシークレットに保存します。