12.3. 클러스터 이미지 정책 CR 생성
ClusterImagePolicy 사용자 정의 리소스(CR)를 사용하면 클러스터 관리자가 전체 클러스터에 대한 sigstore 서명 확인 정책을 구성할 수 있습니다. 이 기능을 활성화하면, Machine Config Operator(MCO)가 ClusterImagePolicy 객체를 감시하고 클러스터의 모든 노드에서 /etc/containers/policy.json 및 /etc/containers/registries.d/sigstore-registries.yaml 파일을 업데이트합니다.
다음 예제에서는 ClusterImagePolicy 객체를 구성하는 방법에 대한 일반적인 지침을 보여줍니다. 매개변수에 대한 자세한 내용은 "클러스터 및 이미지 정책 매개변수 정보"를 참조하세요.
사전 요구 사항
- 서명 작업을 위해 sigstore 지원 공개 키 인프라(PKI) 또는 Cosign 공개 키와 개인 키 쌍이 있습니다.
- 이미지에 서명하기 위한 서명 프로세스가 마련되어 있습니다.
- Cosign 서명을 사용하는 경우 Cosign 서명을 지원하는 레지스트리에 액세스할 수 있습니다.
클러스터에 필요한 기술 미리 보기 기능을 활성화하려면
FeatureGateCR인cluster를편집해야 합니다.$ oc edit featuregate clusterFeatureGateCR 예시apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade1 - 1
- 필수
SigstoreImageVerification기능을 활성화합니다.
주의클러스터에서
TechPreviewNoUpgrade기능 세트를 활성화하면 실행 취소할 수 없으며 사소한 버전 업데이트가 방지됩니다. 이 기능 세트를 사용하면 테스트 클러스터에서 이러한 기술 미리 보기 기능을 활성화하여 전체적으로 테스트할 수 있습니다. 프로덕션 클러스터에서 이 기능 세트를 활성화하지 마십시오.변경 사항을 저장하면 새로운 머신 구성이 생성되고, 머신 구성 풀이 업데이트되며, 변경 사항이 적용되는 동안 각 노드의 스케줄링이 비활성화됩니다.
프로세스
다음 예제와 유사한 클러스터 이미지 정책 객체를 만듭니다. 이러한 매개변수에 대한 구체적인 내용은 "이미지 정책 매개변수 정보"를 참조하세요.
공개 키 정책과
MatchRepoDigestOrExact일치 정책이 포함된 클러스터 이미지 정책 개체의 예apiVersion: config.openshift.io/v1alpha1 kind: ClusterImagePolicy1 metadata: name: p1 spec: scopes:2 - example.com policy:3 rootOfTrust:4 policyType: PublicKey5 publicKey: keyData: a2V5RGF0YQ==6 rekorKeyData: cmVrb3JLZXlEYXRh7 signedIdentity:8 matchPolicy: MatchRepoDigestOrExact- 1
ClusterImagePolicy객체를 생성합니다.- 2
- 이 정책에 할당된 저장소 또는 이미지 목록을 정의합니다. 클러스터 이미지 정책에서 해당 정책이
quay.io/openshift-release-dev/ocp-release및quay.io/openshift-release-dev/ocp-v4.0-art-dev저장소에 있는 OpenShift Container Platform 이미지의 배포를 차단하지 않는지 확인하세요. 이러한 저장소의 이미지는 클러스터 작동에 필요합니다. - 3
- 이미지가 어떻게 검증되는지 정의하는 매개변수를 지정합니다.
- 4
- 정책에 대한 신뢰 루트를 정의합니다.
- 5
- 신뢰의 루트(공개 키 또는 Fulcio 인증서) 를 정의하는 정책 유형을 지정합니다. 여기에는 Rekor 검증을 거친 공개 키가 있습니다.
- 6
- 공개 키 정책의 경우 PEM 형식으로 base64로 인코딩된 공개 키를 지정합니다. 최대 길이는 8192자입니다.
- 7
- 선택 사항: PEM 형식의 base64로 인코딩된 Rekor 공개 키를 지정합니다. 최대 길이는 8192자입니다.
- 8
- 선택 사항: 서명의 신원과 실제 이미지의 신원을 확인하기 위해 다음 프로세스 중 하나를 지정합니다.
-
MatchRepoDigestOrExact. -
매치리포지토리. -
ExactRepository.exactRepository매개변수를 지정해야 합니다. -
리맵아이덴티티.prefix및signedPrefix매개변수를 지정해야 합니다.
-
Fulcio 인증서 정책과
remapIdentity일치 정책이 포함된 클러스터 이미지 정책 개체의 예apiVersion: config.openshift.io/v1alpha1 kind: ClusterImagePolicy1 metadata: name: p1 spec: scopes:2 - example.com policy:3 rootOfTrust:4 policyType: FulcioCAWithRekor5 fulcioCAWithRekor:6 fulcioCAData: a2V5RGF0YQ== fulcioSubject: oidcIssuer: "https://expected.OIDC.issuer/" signedEmail: "expected-signing-user@example.com" rekorKeyData: cmVrb3JLZXlEYXRh7 signedIdentity: matchPolicy: RemapIdentity8 remapIdentity: prefix: example.com9 signedPrefix: mirror-example.com10 - 1
ClusterImagePolicy객체를 생성합니다.- 2
- 이 정책에 할당된 저장소 또는 이미지 목록을 정의합니다. 클러스터 이미지 정책에서 해당 정책이
quay.io/openshift-release-dev/ocp-release및quay.io/openshift-release-dev/ocp-v4.0-art-dev저장소에 있는 OpenShift Container Platform 이미지의 배포를 차단하지 않는지 확인하세요. 이러한 저장소의 이미지는 클러스터 작동에 필요합니다. - 3
- 이미지가 어떻게 검증되는지 정의하는 매개변수를 지정합니다.
- 4
- 정책에 대한 신뢰 루트를 정의합니다.
- 5
- 신뢰의 루트(공개 키 또는 Fulcio 인증서) 를 정의하는 정책 유형을 지정합니다. 여기에는 Rekor 검증이 필요한 Fulcio 인증서가 있습니다.
- 6
- Fulcio 인증서 정책의 경우 다음 매개변수가 필요합니다.
-
fulcioCAData: PEM 형식의 base64로 인코딩된 Fulcio 인증서를 지정합니다. 최대 길이는 8192자입니다. -
fulcioSubject: OIDC 발급자와 Fulcio 인증 구성의 이메일을 지정합니다.
-
- 7
- PEM 형식으로 base64로 인코딩된 Rekor 공개 키를 지정합니다. 이 매개변수는
policyType이FulcioCAWithRekor인 경우 필요합니다. 최대 길이는 8192자입니다. - 8
- 선택 사항: 서명의 신원과 실제 이미지의 신원을 확인하기 위해 다음 프로세스 중 하나를 지정합니다.
-
MatchRepoDigestOrExact. -
매치리포지토리. -
ExactRepository.exactRepository매개변수를 지정해야 합니다. -
리맵아이덴티티.prefix및signedPrefix매개변수를 지정해야 합니다.
-
- 9
remapIdentity일치 정책의 경우, 범위가 지정된 이미지 접두사와 일치해야 하는 접두사를 지정합니다. 두 가지가 일치하면 범위가 지정된 이미지 접두사는signedPrefix값으로 대체됩니다. 최대 길이는 512자입니다.- 10
remapIdentity일치 정책의 경우, 필요한 경우 다시 매핑할 이미지 접두사를 지정합니다. 최대 길이는 512자입니다.
클러스터 이미지 정책 객체를 생성합니다.
$ oc create -f <file_name>.yamlMCO(Machine Config Operator)는 클러스터의 MCP(Machine Config Pool)를 업데이트합니다.
검증
클러스터의 노드가 업데이트되면 클러스터 이미지 정책이 구성되었는지 확인할 수 있습니다.
다음 명령을 실행하여 노드의 디버그 포드를 시작합니다.
$ oc debug node/<node_name>다음 명령을 실행하여 디버그 셸에서
/host를루트 디렉터리로 설정합니다.sh-5.1# chroot /host/다음 명령을 실행하여
policy.json파일을 검사합니다.sh-5.1# cat /etc/containers/policy.json새 클러스터 이미지 정책을 보여주는 공개 키가 있는 클러스터 이미지 정책 개체에 대한 예시 출력
# ... "transports": { # ... "docker": { "example.com": [ { "type": "sigstoreSigned", "keyData": "a2V5RGF0YQ==", "rekorPublicKeyData": "cmVrb3JLZXlEYXRh", "signedIdentity": { "type": "matchRepoDigestOrExact" } } ], # ...새로운 클러스터 이미지 정책을 보여주는 Fulcio 인증서가 있는 클러스터 이미지 정책 개체에 대한 예시 출력
# ... "transports": { # ... "docker": { "example.com": [ { "type": "sigstoreSigned", "fulcio": { "caData": "a2V5RGF0YQ==", "oidcIssuer": "https://expected.OIDC.issuer/", "subjectEmail": "expected-signing-user@example.com" }, "rekorPublicKeyData": "cmVrb3JLZXlEYXRh", "signedIdentity": { "type": "remapIdentity", "prefix": "example.com", "signedPrefix": "mirror-example.com" } } ], # ...다음 명령을 실행하여
sigstore-registries.yaml파일을 살펴보세요.sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml범위가 지정된 레지스트리가 추가되었음을 보여주는 예제 출력
docker: example.com: use-sigstore-attachments: true1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true- 1
true인 경우 sigstore 서명을 이미지와 함께 읽도록 지정합니다.