1.6. Tekton Chains を使用したイメージと取得元の署名および検証
クラスター管理者は、Tekton Chains を使用して、以下のタスクを実行することで、イメージと証明書を署名および検証できます。
-
暗号化された
x509
またはcosign
キーペアを生成し、Kubernetes シークレットとして保存します。 - OCI レジストリーの認証を設定して、イメージ、イメージ署名、および署名されたイメージ証明書を保存します。
- Tekton Chains を設定して、証明書を生成し署名します。
- タスク実行で Kaniko を使用してイメージを作成します。
- 署名されたイメージと署名された証明書を検証する。
前提条件
以下がクラスターにインストールされていることを確認します。
手順
-
暗号化された
x509
またはcosign
キーペアを生成します。キーペアの作成とそれをシークレットとして保存する方法の詳細は、「Tekton Chains でデータを署名するためのシークレット」を参照してください。 イメージレジストリーの認証を設定します。
- 署名を OCI レジストリーにプッシュするように Tekton Chains コントローラーを設定するには、タスク実行のサービスアカウントに関連付けられた認証情報を使用します。詳細は、「OCI レジストリーへの認証」を参照してください。
イメージをビルドしてレジストリーにプッシュする Kaniko タスクの認証を設定するには、必要な認証情報を含む docker
config.json
ファイルの Kubernetes シークレットを作成します。$ oc create secret generic <docker_config_secret_name> \ 1 --from-file <path_to_config.json> 2
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"}}'
Kaniko タスクを開始します。
Kaniko タスクをクラスターに適用します。
$ oc apply -f examples/kaniko/kaniko.yaml 1
- 1
- Kaniko タスクへの URI またはファイルパスに置き換えます。
適切な環境変数を設定します。
$ export REGISTRY=<url_of_registry> 1 $ export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json> 2
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
すべての手順が完了するまで、このタスクのログを確認してください。認証が成功すると、最終的なイメージが
$REGISTRY/kaniko-chains
にプッシュされます。
Tekton Chains が証明書を生成して署名するまで 1 分ほど待ち、タスク実行時に
chains.tekton.dev/signed=true
アノテーションが利用可能か確認します。$ oc get tr <task_run_name> \ 1 -o json | jq -r .metadata.annotations { "chains.tekton.dev/signed": "true", ... }
- 1
- タスク実行の名前に置き換えます。
イメージとアテステーションを確認します。
$ cosign verify --key cosign.pub $REGISTRY/kaniko-chains $ cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
Rekor でイメージの証明書を見つけます。
- $ REGISTRY/kaniko-chains イメージのダイジェストを取得します。タスクの実行中に検索するか、イメージをプルしてダイジェストをデプロイメントできます。
Rekor を検索して、イメージの
sha256
ダイジェストに一致するすべてのエントリーを見つけます。$ rekor-cli search --sha <image_digest> 1 <uuid_1> 2 <uuid_2> 3 ...
検索結果には、一致するエントリーの UUID が表示されます。それらの UUID の 1 つが証明書を保持します。
アテステーションを確認してください。
$ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq