1.6. Tekton Chain을 사용하여 이미지와 검증에 서명 및 확인
클러스터 관리자는 Tekton Chains를 사용하여 다음 작업을 수행하여 image 및 provenances에 서명하고 확인할 수 있습니다.
- 암호화된 x509 키 쌍을 생성하여 Kubernetes 시크릿으로 저장합니다.
- 이미지, 이미지 서명 및 서명된 이미지 테스트를 저장하기 위해 OCI 레지스트리에 대한 인증을 설정합니다.
- 검증 정보를 생성하고 서명하도록 Tekton 체인을 구성합니다.
- 작업 실행에 Kaniko로 이미지를 생성합니다.
- 서명된 이미지와 서명된 인증서를 확인합니다.
사전 요구 사항
다음 사항이 클러스터에 설치되어 있는지 확인합니다.
프로세스
암호화된 x509 키 쌍을 생성하여 Kubernetes 시크릿으로 저장합니다.
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
메시지가 표시되면 암호를 입력합니다. cosign은 생성된 개인 키를
openshift-pipelines
네임스페이스에signing-secrets
Kubernetes 시크릿의 일부로 저장하고 공개 키를cosign.pub
로컬 파일에 씁니다.이미지 레지스트리에 대한 인증을 구성합니다.
- OCI 레지스트리로 서명을 푸시하도록 Tekton 체인 컨트롤러를 구성하려면 작업 실행의 서비스 계정과 연결된 인증 정보를 사용합니다. 자세한 내용은 " OCI 레지스트리에 인증" 섹션을 참조하십시오.
이미지를 빌드하고 레지스트리로 내보내는 Kaniko 작업에 대한 인증을 구성하려면 필요한 인증 정보가 포함된 docker
config.json
파일의 Kubernetes 시크릿을 생성합니다.$ oc create secret generic <docker_config_secret_name> \ 1 --from-file <path_to_config.json> 2
chain-config 개체에서
구성합니다.artifacts.taskrun.format
,artifacts.taskrun.storage
및transparency.enabled
매개변수를 설정하여 Tekton 체인을$ 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
체인에서 인증 정보를 생성하고 서명할 때까지 1분 정도 기다린 다음 작업 실행 시 chain.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 중 하나에 인증 정보가 있습니다.
테스트를 확인하십시오.
$ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq