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 を使用した x509 キーペアの生成
Tekton Chains シークレット用に x509
署名スキームを使用するには、x509
キーペアを生成する必要があります。
TektonConfig
カスタムリソース (CR) の generateSigningSecret
フィールドを true
に設定することで、x509
キーペアを生成できます。Red Hat OpenShift Pipelines Operator は、ecdsa
タイプのキーペア (x509.pem
秘密鍵および x509-pub.pem
公開鍵) を生成します。Operator はキーを openshift-pipelines
namespace の signing-secrets
シークレットに保存します。
generateSigningSecret
フィールドを true
から false
に設定すると、Red Hat OpenShift Pipelines Operator は signing-secrets
シークレットの値をオーバーライドおよび空にします。鍵が削除されないようにするには、シークレットの外部に x509-pub.pem
公開鍵を保存するようにしてください。Operator は後でキーを使用して、アーティファクトの証明を検証できます。
Red Hat OpenShift Pipelines Operator は、潜在的なセキュリティー問題を制限するために、以下の機能を提供しません。
- キーのローテーション
- 鍵の使用の監査
- 鍵への適切なアクセス制御
前提条件
-
OpenShift CLI (
oc
) ユーティリティーがインストールされている。 -
openshift-pipelines
namespace の管理者権限で OpenShift Container Platform クラスターにログインしている。
手順
次のコマンドを実行して、
TektonConfig
CR を編集します。$ oc edit TektonConfig config
TektonConfig
CR で、generateSigningSecret
の値をtrue
に設定します。TektonConfig CR を使用して ecdsa キーペアを作成する例
apiVersion: operator.tekton.dev/v1 kind: TektonConfig metadata: name: config spec: # ... chain: disabled: false generateSigningSecret: true 1 # ...
- 1
- デフォルト値は
false
です。値をtrue
に設定すると、ecdsa
キーペアが生成されます。
1.3.2. cosign ツールを使用した署名
cosign
署名ツールを使用すると、Tekton Chains で cosign
スキームを使用できます。
前提条件
- cosign ツールをインストールしている。
手順
次のコマンドを実行して、
cosign.key
とcosign.pub
キーのペアを生成します。$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
Cosign はパスワードの入力を求め、Kubernetes シークレットを作成します。
-
暗号化された
cosign.key
秘密鍵とcosign.password
復号化パスワードを、signing-secrets
Kubernetes シークレットに保存します。秘密鍵がENCRYPTED COSIGN PRIVATE KEY
型の暗号化された PEM ファイルとして保存されていることを確認します。
1.3.3. skopeo ツールを使用した署名
skopeo
ツールを使用して鍵を生成し、Tekton Chains で cosign
署名スキームで使用できます。
前提条件
- skopeo ツールをインストールしている。
手順
次のコマンドを実行して、公開鍵と秘密鍵のペアを生成します。
$ skopeo generate-sigstore-key --output-prefix <mykey> 1
- 1
<mykey>
を選択した鍵名に置き換えます。
Skopeo は秘密鍵のパスフレーズの入力を求め、
<mykey>.private
および<mykey>.pub
という名前の鍵ファイルを作成します。次のコマンドを実行し、
base64
ツールを使用して<mykey>.pub
ファイルをエンコードします。$ base64 -w 0 <mykey>.pub > b64.pub
次のコマンドを実行し、
base64
ツールを使用して<mykey>.private
ファイルをエンコードします。$ base64 -w 0 <mykey>.private > b64.private
次のコマンドを実行し、
base64
ツールを使用してパスフレーズをエンコードします。$ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase 1
- 1
<passphrase>
を鍵ペアに使用したパスフレーズに置き換えます。
次のコマンドを実行して、
openshift-pipelines
namespace にsigning-secrets
シークレットを作成します。$ oc create secret generic signing-secrets -n openshift-pipelines
以下のコマンドを実行して
signing-secrets
シークレットを編集します。$ oc edit secret -n openshift-pipelines signing-secrets
次の方法で、エンコードされた鍵をシークレットのデータに追加します。
apiVersion: v1 data: cosign.key: <Encoded <mykey>.private> 1 cosign.password: <Encoded passphrase> 2 cosign.pub: <Encoded <mykey>.pub> 3 immutable: true kind: Secret metadata: name: signing-secrets # ... type: Opaque
1.3.4. "secret already exists" エラーの解決
signing-secret
シークレットがすでに入力されている場合、このシークレットを作成するコマンドは次のエラーメッセージを出力する可能性があります。
Error from server (AlreadyExists): secrets "signing-secrets" already exists
このエラーは、シークレットを削除することで解決できます。
手順
次のコマンドを実行して、
signing-secret
シークレットを削除します。$ oc delete secret signing-secrets -n openshift-pipelines
- 鍵ペアを再作成し、任意の署名スキームを使用してシークレットに保存します。