1.5. OCI 레지스트리에 인증
클러스터 관리자는 OCI 레지스트리로 서명을 푸시하기 전에 레지스트리에 인증하도록 Tekton 체인을 구성해야 합니다. Tekton 체인 컨트롤러는 작업이 실행되는 동일한 서비스 계정을 사용합니다. 서명을 OCI 레지스트리로 내보내는 데 필요한 자격 증명으로 서비스 계정을 설정하려면 다음 단계를 수행합니다.
프로세스
Kubernetes 서비스 계정의 네임스페이스 및 이름을 설정합니다.
export NAMESPACE=<namespace> export SERVICE_ACCOUNT_NAME=<service_account>
$ export NAMESPACE=<namespace>1 $ export SERVICE_ACCOUNT_NAME=<service_account>2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes 시크릿을 생성합니다.
oc create secret registry-credentials \ --from-file=.dockerconfigjson \ --type=kubernetes.io/dockerconfigjson \ -n $NAMESPACE
$ oc create secret registry-credentials \ --from-file=.dockerconfigjson \1 --type=kubernetes.io/dockerconfigjson \ -n $NAMESPACECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Docker 구성 파일의 경로로 바꿉니다. 기본 경로는
~/.docker/config.json입니다.
서비스 계정에 시크릿에 대한 액세스 권한을 부여합니다.
oc patch serviceaccount $SERVICE_ACCOUNT_NAME \ -p "{\"imagePullSecrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACE$ oc patch serviceaccount $SERVICE_ACCOUNT_NAME \ -p "{\"imagePullSecrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACECopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Pipelines가 모든 작업 실행에 할당하는 기본
파이프라인서비스 계정을 패치하면 Red Hat OpenShift Pipelines Operator가 서비스 계정을 재정의합니다. 모범 사례로 다음 단계를 수행할 수 있습니다.사용자의 작업 실행에 할당할 별도의 서비스 계정을 생성합니다.
oc create serviceaccount <service_account_name>
$ oc create serviceaccount <service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작업 실행 템플릿에서
serviceaccountname필드의 값을 설정하여 서비스 계정을 작업 실행에 연결합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 generate-key-pair k8s://openshift-pipelines/signing-secretsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 메시지가 표시되면 암호를 입력합니다. 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"}}'$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.oci.storage": "", "artifacts.taskrun.format":"tekton", "artifacts.taskrun.storage": "tekton"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tekton 체인 컨트롤러를 다시 시작하여 수정된 구성이 적용되었는지 확인합니다.
oc delete po -n openshift-pipelines -l app=tekton-chains-controller
$ oc delete po -n openshift-pipelines -l app=tekton-chains-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 작업 실행을 생성합니다.
oc create -f https://raw.githubusercontent.com/tektoncd/chains/main/examples/taskruns/task-output-image.yaml taskrun.tekton.dev/build-push-run-output-image-qbjvh created
$ 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 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 작업 실행을 가리키는 URI 또는 파일 경로로 바꿉니다.
단계 상태를 확인하고 프로세스가 완료될 때까지 기다립니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64인코딩 주석으로 저장된 오브젝트에서 서명 및 페이로드를 검색합니다.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$ 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 > payloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명을 확인합니다.
cosign verify-blob --key k8s://openshift-pipelines/signing-secrets --signature ./signature ./payload Verified OK
$ cosign verify-blob --key k8s://openshift-pipelines/signing-secrets --signature ./signature ./payload Verified OKCopy to Clipboard Copied! Toggle word wrap Toggle overflow