1.5. OCI 레지스트리에 인증
클러스터 관리자는 OCI 레지스트리로 서명을 푸시하기 전에 레지스트리에 인증하도록 Tekton 체인을 구성해야 합니다. Tekton 체인 컨트롤러는 작업이 실행되는 동일한 서비스 계정을 사용합니다. 서명을 OCI 레지스트리로 내보내는 데 필요한 자격 증명으로 서비스 계정을 설정하려면 다음 단계를 수행합니다.
프로세스
Kubernetes 서비스 계정의 네임스페이스 및 이름을 설정합니다.
$ 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가 모든 작업 실행에 할당하는 기본
파이프라인서비스 계정을 패치하면 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 체인 백엔드 스토리지를 구성합니다.
- 작업 실행을 생성하고 서명하고, 서명 및 페이로드를 작업 실행 자체에 주석으로 저장합니다.
- 서명된 작업 실행에서 서명 및 페이로드를 검색합니다.
- 작업 실행 서명을 확인합니다.
사전 요구 사항
다음 사항이 클러스터에 설치되어 있는지 확인합니다.
- Red Hat OpenShift Pipelines Operator
- Tekton 체인
- cosign
프로세스
암호화된 x509 키 쌍을 생성하여 Kubernetes 시크릿으로 저장합니다.
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets메시지가 표시되면 암호를 입력합니다. cosign은 생성된 개인 키를
openshift-pipelines네임스페이스에signing-secretsKubernetes 시크릿의 일부로 저장합니다.Tekton 체인 구성에서 OCI 스토리지를 비활성화하고 작업 실행 스토리지 및 형식을
tekton로 설정합니다.$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.oci.storage": "", "artifacts.taskrun.format":"tekton", "artifacts.taskrun.storage": "tekton"}}'Tekton 체인 컨트롤러를 다시 시작하여 수정된 구성이 적용되었는지 확인합니다.
$ 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