1.5. OCI レジストリーへの認証
署名を OCI レジストリーにプッシュする前に、クラスター管理者は、レジストリーで認証するように Tekton Chains を設定する必要があります。Tekton Chains コントローラーは、タスクの実行と同じサービスアカウントを使用します。署名を OCI レジストリーにプッシュするために必要な認証情報を使用してサービスアカウントを設定するには、次の手順を実行します。
手順
Kubernetes サービスアカウントの namespace と名前を設定します。
$ export NAMESPACE=<namespace>1 $ export SERVICE_ACCOUNT_NAME=<service_account>2 Kubernetes シークレットを作成します。
$ oc create secret registry-credentials \ --from-file=.dockerconfigjson \1 --type=kubernetes.io/dockerconfigjson \ -n $NAMESPACE- 1
- Docker 設定ファイルへのパスに置き換えます。デフォルトのパスは
~/.docker/config.jsonです。
サービスアカウントにシークレットへのアクセス権限を付与します。
$ oc patch serviceaccount $SERVICE_ACCOUNT_NAME \ -p "{\"imagePullSecrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACERed Hat OpenShift Pipelines がすべてのタスク実行に割り当てるデフォルトの
pipelineサービスアカウントにパッチを適用すると、Red Hat OpenShift Pipelines Operator はサービスアカウントをオーバーライドします。ベストプラクティスとして、次の手順を実行できます。ユーザーのタスク実行に割り当てる別のサービスアカウントを作成します。
$ oc create serviceaccount <service_account_name>タスク実行テンプレートの
serviceaccountnameフィールドの値を設定して、サービスアカウントをタスク実行に関連付けます。apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: build-push-task-run-2 spec: serviceAccountName: build-bot1 taskRef: name: build-push ...- 1
- 新しく作成したサービスアカウントの名前に置き換えます。
1.5.1. 追加認証なしでタスク実行の署名を作成および検証する リンクのコピーリンクがクリップボードにコピーされました!
追加認証を使用して Tekton Chains でタスク実行の署名を検証するには、次のタスクを実行します。
- 暗号化された x509 キーペアを作成し、Kubernetes シークレットとして保存します。
- Tekton Chains バックエンドストレージを設定します。
- タスク実行を作成して署名し、署名とペイロードをタスク実行自体にアノテーションとして保存します。
- 署名されたタスクの実行から署名とペイロードを取得します。
- タスク実行の署名を確認します。
前提条件
以下がクラスターにインストールされていることを確認します。
- Red Hat OpenShift Pipelines Operator
- Tekton Chains
- Cosign
手順
暗号化された x509 鍵ペアを作成し、Kubernetes シークレットとして保存します。
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secretsプロンプトが表示されたらパスワードを入力します。Cosign は、結果の秘密鍵を
signing-secretsKubernetes シークレットの一部としてopenshift-pipelinesnamespace に保存します。Tekton Chains 設定で、OCI ストレージを無効にし、タスク実行ストレージとフォーマットを
tektonに設定します。$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.oci.storage": "", "artifacts.taskrun.format":"tekton", "artifacts.taskrun.storage": "tekton"}}'Tekton Chains コントローラーを再起動して、変更された設定が適用されていることを確認します。
$ oc delete po -n openshift-pipelines -l app=tekton-chains-controllerタスク実行を作成します。
$ oc create -f https://raw.githubusercontent.com/tektoncd/chains/main/examples/taskruns/task-output-image.yaml1 taskrun.tekton.dev/build-push-run-output-image-qbjvh created- 1
- タスクの実行を指す URI またはファイルパスに置き換えます。
ステップのステータスを確認し、プロセスが終了するまで待ちます。
$ tkn tr describe --last [...truncated output...] NAME STATUS ∙ create-dir-builtimage-9467f Completed ∙ git-source-sourcerepo-p2sk8 Completed ∙ build-and-push Completed ∙ echo Completed ∙ image-digest-exporter-xlkn7 Completedbase64でエンコードされたアノテーションとして保存されているオブジェクトから署名とペイロードを取得します。$ export TASKRUN_UID=$(tkn tr describe --last -o jsonpath='{.metadata.uid}') $ tkn tr describe --last -o jsonpath="{.metadata.annotations.chains\.tekton\.dev/signature-taskrun-$TASKRUN_UID}" > signature $ tkn tr describe --last -o jsonpath="{.metadata.annotations.chains\.tekton\.dev/payload-taskrun-$TASKRUN_UID}" | base64 -d > payload署名を確認します。
$ cosign verify-blob --key k8s://openshift-pipelines/signing-secrets --signature ./signature ./payload Verified OK