1.3. Tekton 체인에서 데이터에 서명하기 위한 보안
클러스터 관리자는 키 쌍을 생성하고 Tekton Chains를 사용하여 Kubernetes 시크릿을 사용하여 아티팩트에 서명할 수 있습니다. Tekton 체인이 작동하려면 암호화된 키의 개인 키와 암호가 openshift-pipelines
네임스페이스에 signing-secrets
시크릿의 일부로 존재해야 합니다.
현재 Tekton 체인은 x509
및 cosign
서명 스키마를 지원합니다.
지원되는 서명 체계 중 하나만 사용하십시오.
x509 서명 스키마
Tekton 체인과 함께 x509
서명 체계를 사용하려면 다음 요구 사항을 충족해야 합니다.
-
x509.pem
구조와 함께signing-secrets
에 개인 키를 저장합니다. -
개인 키를 암호화되지 않은
PKCS #8
PEM 파일로 저장합니다. -
키는
ed25519
또는ecdsa
유형입니다.
코인 서명 서명 체계
Tekton 체인과 cosign
서명 스키마를 사용하려면 다음 요구 사항을 충족해야 합니다.
-
cosign.key
구조를 사용하여서명-
비밀번호에 개인 키를 저장합니다. -
cosign.password
구조를 사용하여signing-secrets
에 암호를 저장합니다. -
ENCRYPTED COSIGN PRIVATE KEY
유형의 암호화된 PEM 파일로 개인 키를 저장합니다.
1.3.1. TektonConfig CR을 사용하여 x509 키 쌍 생성
Tekton 체인 시크릿에 x509
서명 스키마를 사용하려면 x509
키 쌍을 생성해야 합니다.
TektonConfig
CR(사용자 정의 리소스)에서 generateSigningSecret
필드를 true
로 설정하여 x509
키 쌍을 생성할 수 있습니다. Red Hat OpenShift Pipelines Operator는 ecdsa
유형 키 쌍, 즉 x509.pem
개인 키와 x509-pub.pem
공개 키를 생성합니다. Operator는 openshift-pipelines
네임스페이스의 signing-secrets
시크릿에 키를 저장합니다.
generateSigningSecret
필드를 true
에서 false
로 설정하면 Red Hat OpenShift Pipelines Operator가 signing-secrets
시크릿의 모든 값을 재정의하고 유효성을 검사합니다. x509-pub.pem
공개 키를 시크릿 외부에 저장하여 삭제로부터 키를 보호해야 합니다. Operator는 이후 단계에서 키를 사용하여 아티팩트 강화를 확인할 수 있습니다.
Red Hat OpenShift Pipelines Operator는 잠재적인 보안 문제를 제한하는 다음 기능을 제공하지 않습니다.
- 키 교체
- 키 사용량 감사
- 키에 대한 적절한 액세스 제어
사전 요구 사항
-
OpenShift CLI(
oc
) 유틸리티를 설치했습니다. -
openshift-pipelines
네임스페이스에 대한 관리 권한이 있는 OpenShift Container Platform 클러스터에 로그인되어 있습니다.
프로세스
다음 명령을 실행하여
TektonConfig
CR을 편집합니다.$ oc edit TektonConfig config
TektonConfig
CR에서generateSigningSecret
값을true
로 설정합니다.TektonConfig CR을 사용하여 ecdsa 키 쌍을 생성하는 예
apiVersion: operator.tekton.dev/v1 kind: TektonConfig metadata: name: config spec: # ... chain: disabled: false generateSigningSecret: true 1 # ...
- 1
- 기본값은
false
입니다. 값을true
로 설정하면ecdsa
키 쌍이 생성됩니다.
1.3.2. 공동 서명 툴로 서명
툴을 사용하여 Tekton 체인에 공동 서명 스키마를 사용할 수 있습니다.
cosign
사전 요구 사항
- cosign 툴을 설치했습니다.
프로세스
다음 명령을 실행하여
cosign.key
및cosign.pub
키 쌍을 생성합니다.$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
cosign은 암호를 입력하라는 메시지를 표시한 다음 Kubernetes 시크릿을 생성합니다.
-
암호화된
cosign.key
개인 키와cosign.password
암호 해독 암호를signing-secrets
Kubernetes 시크릿에 저장합니다. 개인 키가ENCRYPTED COSIGN PRIVATE KEY
유형의 암호화된 PEM 파일로 저장되었는지 확인합니다.
1.3.3. skopeo 툴로 서명
skopeo
툴을 사용하여 키를 생성하고 Tekton 체인과 함께 cosign
서명 스키마에 사용할 수 있습니다.
사전 요구 사항
- skopeo 툴을 설치했습니다.
프로세스
다음 명령을 실행하여 공개/개인 키 쌍을 생성합니다.
$ skopeo generate-sigstore-key --output-prefix <mykey> 1
- 1
- &
lt;mykey
>를 선택한 키 이름으로 바꿉니다.
Skopeo는 개인 키에 대한 암호를 입력하라는 메시지를 표시한 다음 <mykey>
.private 및 <mykey
>.pub 라는 키
파일을 만듭니다.다음 명령을 실행하여
base64
툴을 사용하여 <mykey>.pub
파일을 인코딩합니다.$ base64 -w 0 <mykey>.pub > b64.pub
다음 명령을 실행하여
base64
툴을 사용하여 <mykey>.private
파일을 인코딩합니다.$ base64 -w 0 <mykey>.private > b64.private
다음 명령을 실행하여
base64
툴을 사용하여 passhprase를 인코딩합니다.$ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase 1
- 1
- &
lt;passphrase&
gt;를 키 쌍에 사용한 암호로 바꿉니다.
다음 명령을 실행하여
openshift-pipelines
네임스페이스에signing-secrets
시크릿을 생성합니다.$ oc create secret generic signing-secrets -n openshift-pipelines
다음 명령을 실행하여
signing-secrets
시크릿을 편집합니다.$ oc edit secret -n openshift-pipelines signing-secrets
다음과 같은 방식으로 시크릿 데이터에 인코딩된 키를 추가합니다.
apiVersion: v1 data: cosign.key: <Encoded <mykey>.private> 1 cosign.password: <Encoded passphrase> 2 cosign.pub: <Encoded <mykey>.pub> 3 immutable: true kind: Secret metadata: name: signing-secrets # ... type: Opaque
1.3.4. "비밀번호가 이미 있음" 오류 해결
signing-secret
시크릿이 이미 채워진 경우 이 보안을 생성하는 명령에서 다음 오류 메시지를 출력할 수 있습니다.
Error from server (AlreadyExists): secrets "signing-secrets" already exists
보안을 삭제하여 이 오류를 해결할 수 있습니다.
프로세스
다음 명령을 실행하여
signing-secret
시크릿을 삭제합니다.$ oc delete secret signing-secrets -n openshift-pipelines
- 키 쌍을 다시 생성하여 선호하는 서명 스키마를 사용하여 시크릿에 저장합니다.