1.6. Tekton Chains を使用したイメージと取得元の署名および検証
クラスター管理者は、Tekton Chains を使用して、以下のタスクを実行することで、イメージと証明書を署名および検証できます。
- 暗号化された x509 鍵ペアを作成し、Kubernetes シークレットとして保存します。
- OCI レジストリーの認証を設定して、イメージ、イメージ署名、および署名されたイメージ証明書を保存します。
- Tekton Chains を設定して、証明書を生成し署名します。
- タスク実行で Kaniko を使用してイメージを作成します。
- 署名されたイメージと署名された証明書を検証する。
前提条件
以下がクラスターにインストールされていることを確認します。
手順
暗号化された x509 鍵ペアを作成し、Kubernetes シークレットとして保存します。
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 は、結果の秘密鍵を
signing-secrets
Kubernetes シークレットの一部としてopenshift-pipelines
namespace に保存し、公開鍵をcosign.pub
ローカルファイルに書き込みます。イメージレジストリーの認証を設定します。
- 署名を OCI レジストリーにプッシュするように Tekton Chains コントローラーを設定するには、タスク実行のサービスアカウントに関連付けられた認証情報を使用します。詳細については、OCI レジストリーへの認証を参照してください。
イメージをビルドしてレジストリーにプッシュする Kaniko タスクの認証を設定するには、必要な認証情報を含む docker
config.json
ファイルの Kubernetes シークレットを作成します。oc create secret generic <docker_config_secret_name> \ --from-file <path_to_config.json>
$ oc create secret generic <docker_config_secret_name> \
1 --from-file <path_to_config.json>
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Tekton Chains を設定するには、
chains-config
オブジェクトでartifacts.taskrun.format
、artifacts.taskrun.storage
、transparency.enabled
パラメーターを設定します。oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}' oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.storage": "oci"}}' oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"transparency.enabled": "true"}}'
$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}' $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.storage": "oci"}}' $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"transparency.enabled": "true"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kaniko タスクを開始します。
Kaniko タスクをクラスターに適用します。
oc apply -f examples/kaniko/kaniko.yaml
$ oc apply -f examples/kaniko/kaniko.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Kaniko タスクへの URI またはファイルパスに置き換えます。
適切な環境変数を設定します。
export REGISTRY=<url_of_registry> export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json>
$ export REGISTRY=<url_of_registry>
1 $ export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json>
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kaniko タスクを開始します。
tkn task start --param IMAGE=$REGISTRY/kaniko-chains --use-param-defaults --workspace name=source,emptyDir="" --workspace name=dockerconfig,secret=$DOCKERCONFIG_SECRET_NAME kaniko-chains
$ tkn task start --param IMAGE=$REGISTRY/kaniko-chains --use-param-defaults --workspace name=source,emptyDir="" --workspace name=dockerconfig,secret=$DOCKERCONFIG_SECRET_NAME kaniko-chains
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての手順が完了するまで、このタスクのログを確認してください。認証が成功すると、最終的なイメージが
$REGISTRY/kaniko-chains
にプッシュされます。
Tekton Chains が証明書を生成して署名するまで 1 分ほど待ち、タスク実行時に
chains.tekton.dev/signed=true
アノテーションが利用可能か確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- タスク実行の名前に置き換えます。
イメージとアテステーションを確認します。
cosign verify --key cosign.pub $REGISTRY/kaniko-chains cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
$ cosign verify --key cosign.pub $REGISTRY/kaniko-chains $ cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rekor でイメージの証明書を見つけます。
- $ REGISTRY/kaniko-chains イメージのダイジェストを取得します。タスクの実行中に検索するか、イメージをプルしてダイジェストをデプロイメントできます。
Rekor を検索して、イメージの
sha256
ダイジェストに一致するすべてのエントリーを見つけます。rekor-cli search --sha <image_digest>
$ rekor-cli search --sha <image_digest>
1 <uuid_1>
2 <uuid_2>
3 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 検索結果には、一致するエントリーの UUID が表示されます。それらの UUID の 1 つが証明書を保持します。
アテステーションを確認してください。
rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq
$ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow