12.4. 이미지 정책 CR 생성


ImagePolicy 사용자 정의 리소스(CR)를 사용하면 클러스터 관리자나 애플리케이션 개발자가 특정 네임스페이스에 대한 sigstore 서명 확인 정책을 구성할 수 있습니다. MCO는 다양한 네임스페이스에서 ImagePolicy 인스턴스를 감시하고 클러스터의 모든 노드에서 /etc/crio/policies/<namespace>.json/etc/containers/registries.d/sigstore-registries.yaml 파일을 업데이트합니다.

참고

이미지 정책의 범위가 지정된 이미지나 저장소가 클러스터 이미지 정책의 범위가 지정된 이미지나 저장소 중 하나 아래에 중첩되어 있는 경우, 클러스터 이미지 정책의 정책만 적용됩니다. 하지만 이미지 정책 객체는 오류 메시지와 함께 생성됩니다. 예를 들어, 이미지 정책이 example.com/global/image를 지정하고 클러스터 이미지 정책이 example.com/global을 지정하는 경우 네임스페이스는 클러스터 이미지 정책에서 정책을 상속합니다.

다음 예제에서는 ImagePolicy 객체를 구성하는 방법에 대한 일반적인 지침을 보여줍니다. 매개변수에 대한 자세한 내용은 "클러스터 및 이미지 정책 매개변수 정보"를 참조하세요.

사전 요구 사항

  • Sigstore 지원 공개 키 인프라(PKI)가 있거나 서명 작업을 위해 Cosign 공개 및 개인 키 쌍을 제공합니다.
  • 이미지에 서명하기 위한 서명 프로세스가 마련되어 있습니다.
  • Cosign 서명을 사용하는 경우 Cosign 서명을 지원하는 레지스트리에 액세스할 수 있습니다.
  • OpenShift Container Platform 릴리스 이미지 저장소( quay.io/openshift-release-dev/ocp-releasequay.io/openshift-release-dev/ocp-v4.0-art-dev )에 대한 레지스트리 미러가 구성된 경우 Technology Preview 기능 세트를 활성화하기 전에 OpenShift Container Platform 릴리스 이미지의 sigstore 서명을 미러 레지스트리로 미러링해야 합니다. 그렇지 않으면 릴리스 저장소에 대한 서명 검증을 강제하는 기본 OpenShift 클러스터 이미지 정책이 클러스터 버전 운영자가 CVO Pod를 새 노드로 이동하는 기능을 차단하여 기능 세트 변경으로 인한 노드 업데이트를 방지합니다.

    oc image mirror 명령을 사용하면 서명을 미러링할 수 있습니다. 예를 들면 다음과 같습니다.

    $ oc image mirror quay.io/openshift-release-dev/ocp-release:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig \
    mirror.com/image/repo:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig
    Copy to Clipboard Toggle word wrap
  • 클러스터에 필요한 기술 미리 보기 기능을 활성화하려면 FeatureGate CR인 cluster를 편집해야 합니다.

    $ oc edit featuregate cluster
    Copy to Clipboard Toggle word wrap

    FeatureGate CR 예시

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 
    1
    Copy to Clipboard Toggle word wrap

    1
    필수 SigstoreImageVerification 기능을 활성화합니다.
    주의

    클러스터에서 TechPreviewNoUpgrade 기능 세트를 활성화하면 실행 취소할 수 없으며 사소한 버전 업데이트가 방지됩니다. 이 기능 세트를 사용하면 테스트 클러스터에서 이러한 기술 미리 보기 기능을 활성화하여 전체적으로 테스트할 수 있습니다. 프로덕션 클러스터에서 이 기능 세트를 활성화하지 마십시오.

    변경 사항을 저장하면 새로운 머신 구성이 생성되고, 머신 구성 풀이 업데이트되며, 변경 사항이 적용되는 동안 각 노드의 스케줄링이 비활성화됩니다.

프로세스

  1. 다음 예제와 유사한 이미지 정책 객체를 만듭니다. 이러한 매개변수에 대한 구체적인 내용은 "클러스터 및 이미지 정책 매개변수 정보"를 참조하세요.

    공개 키 정책과 MatchRepository 일치 정책이 포함된 이미지 정책 객체의 예

    apiVersion: config.openshift.io/v1alpha1
    kind: ImagePolicy 
    1
    
    metadata:
      name: p0
      namespace: mynamespace 
    2
    
    spec:
      scopes: 
    3
    
        - example.io/crio/signed
      policy: 
    4
    
        rootOfTrust: 
    5
    
          policyType: PublicKey 
    6
    
          publicKey:
            keyData: a2V5RGF0YQ== 
    7
    
            rekorKeyData: cmVrb3JLZXlEYXRh 
    8
    
        signedIdentity:
          matchPolicy: MatchRepository 
    9
    Copy to Clipboard Toggle word wrap

    1
    ImagePolicy 객체를 생성합니다.
    2
    이미지 정책이 적용되는 네임스페이스를 지정합니다.
    3
    이 정책에 할당된 저장소 또는 이미지 목록을 정의합니다.
    4
    이미지가 어떻게 검증되는지 정의하는 매개변수를 지정합니다.
    5
    정책에 대한 신뢰 루트를 정의합니다.
    6
    신뢰의 루트(공개 키 또는 Fulcio 인증서) 를 정의하는 정책 유형을 지정합니다. 여기에는 Rekor 검증을 거친 공개 키가 있습니다.
    7
    공개 키 정책의 경우 PEM 형식으로 base64로 인코딩된 공개 키를 지정합니다. 최대 길이는 8192자입니다.
    8
    선택 사항: PEM 형식의 base64로 인코딩된 Rekor 공개 키를 지정합니다. 최대 길이는 8192자입니다.
    9
    선택 사항: 서명의 신원과 실제 이미지의 신원을 확인하기 위해 다음 프로세스 중 하나를 지정합니다.
    • MatchRepoDigestOrExact.
    • 매치리포지토리 .
    • ExactRepository . exactRepository 매개변수를 지정해야 합니다.
    • 리맵아이덴티티 . prefixsignedPrefix 매개변수를 지정해야 합니다.

    Fulcio 인증서 정책과 ExactRepository 일치 정책이 포함된 이미지 정책 객체 예시

    apiVersion: config.openshift.io/v1alpha1
    kind: ImagePolicy 
    1
    
    metadata:
      name: p1
      namespace: mynamespace 
    2
    
    spec:
      scopes: 
    3
    
        - example.io/crio/signed
      policy: 
    4
    
        rootOfTrust: 
    5
    
          policyType: FulcioCAWithRekor 
    6
    
          fulcioCAWithRekor: 
    7
    
            fulcioCAData: a2V5RGF0YQ==
            fulcioSubject:
              oidcIssuer: "https://expected.OIDC.issuer/"
              signedEmail: "expected-signing-user@example.com"
            rekorKeyData: cmVrb3JLZXlEYXRh 
    8
    
        signedIdentity:
          matchPolicy: ExactRepository 
    9
    
          exactRepository:
            repository: quay.io/crio/signed 
    10
    Copy to Clipboard Toggle word wrap

    1
    ImagePolicy 객체를 생성합니다.
    2
    이미지 정책이 적용되는 네임스페이스를 지정합니다.
    3
    이 정책에 할당된 저장소 또는 이미지 목록을 정의합니다.
    4
    이미지가 어떻게 검증되는지 정의하는 매개변수를 지정합니다.
    5
    정책에 대한 신뢰 루트를 정의합니다.
    6
    신뢰의 루트(공개 키 또는 Fulcio 인증서) 를 정의하는 정책 유형을 지정합니다. 여기에는 Rekor 검증이 필요한 Fulcio 인증서가 있습니다.
    7
    Fulcio 인증서 정책의 경우 다음 매개변수가 필요합니다.
    • fulcioCAData : PEM 형식의 base64로 인코딩된 Fulcio 인증서를 지정합니다. 최대 길이는 8192자입니다.
    • fulcioSubject : OIDC 발급자와 Fulcio 인증 구성의 이메일을 지정합니다.
    8
    PEM 형식으로 base64로 인코딩된 Rekor 공개 키를 지정합니다. 이 매개변수는 policyTypeFulcioCAWithRekor 인 경우 필요합니다. 최대 길이는 8192자입니다.
    9
    선택 사항: 서명의 신원과 실제 이미지의 신원을 확인하기 위해 다음 프로세스 중 하나를 지정합니다.
    • MatchRepoDigestOrExact.
    • 매치리포지토리 .
    • ExactRepository . exactRepository 매개변수를 지정해야 합니다.
    • 리맵아이덴티티 . prefixsignedPrefix 매개변수를 지정해야 합니다.
    10
    정확한Repository 일치 정책의 경우 이미지 ID 및 서명이 포함된 리포지토리를 지정합니다.
  2. 이미지 정책 오브젝트를 생성합니다.

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

    MCO(Machine Config Operator)는 클러스터의 MCP(Machine config pool)를 업데이트합니다.

검증

  • 클러스터의 노드가 업데이트되면 이미지 정책이 구성되어 있는지 확인할 수 있습니다.

    1. 다음 명령을 실행하여 노드의 디버그 Pod를 시작합니다.

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 디버그 쉘 내에서 /host 를 root 디렉터리로 설정합니다.

      sh-5.1# chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 & lt;namespace>.json 파일을 검사합니다.

      sh-5.1# cat /etc/crio/policies/<namespace>.json
      Copy to Clipboard Toggle word wrap

      새 이미지 정책을 표시하는 공개 키가 있는 이미지 정책 오브젝트의 출력 예

      # ...
       "transports": {
      # ...
        "docker": {
         "example.io/crio/signed": [
          {
           "type": "sigstoreSigned",
           "keyData": "a2V5RGF0YQ==",
           "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
           "signedIdentity": {
            "type": "matchRepository",
            "dockerRepository": "example.org/crio/signed"
           }
      # ...
      Copy to Clipboard Toggle word wrap

      새 이미지 정책을 표시하는 Fulcio 인증서가 있는 이미지 정책 오브젝트의 출력 예

      # ...
       "transports": {
      # ...
        "docker": {
         "example.io/crio/signed": [
          {
           "type": "sigstoreSigned",
           "fulcio": {
            "caData": "a2V5RGF0YQ==",
            "oidcIssuer": "https://expected.OIDC.issuer/",
            "subjectEmail": "expected-signing-user@example.com"
           },
           "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
           "signedIdentity": {
            "type": "exactRepository",
            "dockerRepository": "quay.io/crio/signed"
           }
          }
         ],
      # ...
      Copy to Clipboard Toggle word wrap

    4. 다음 명령을 실행하여 sigstore-registries.yaml 파일을 검사합니다.

      sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
      Copy to Clipboard Toggle word wrap

      범위가 지정된 레지스트리가 추가되었음을 보여주는 출력 예

      docker:
        example.io/crio/signed:
          use-sigstore-attachments: true 
      1
      
        quay.io/openshift-release-dev/ocp-release:
          use-sigstore-attachments: true
      Copy to Clipboard Toggle word wrap

      1
      true 인 경우 sigstore 서명을 이미지와 함께 읽도록 지정합니다.
    5. 다음 명령을 실행하여 crio 로그에 sigstore 서명 확인이 있는지 확인합니다.

      sh-5.1#  journalctl -u crio | grep -A 100 "Pulling image: example.io/crio"
      Copy to Clipboard Toggle word wrap

      타임스탬프가 제거된 출력 예

      # ...
      msg="IsRunningImageAllowed for image docker:example.io/crio/signed:latest" file="signature/policy_eval.go:274" 
      1
      
      msg="Using transport \"docker\" specific policy section \"example.io/crio/signed\"" file="signature/policy_eval.go:150" 
      2
      
      msg="Reading /var/lib/containers/sigstore/crio/signed@sha256=18b42e8ea347780f35d979a829affa178593a8e31d90644466396e1187a07f3a/signature-1" file="docker/docker_image_src.go:545"
      msg="Looking for Sigstore attachments in quay.io/crio/signed:sha256-18b42e8ea347780f35d979a829affa178593a8e31d90644466396e1187a07f3a.sig" file="docker/docker_client.go:1138"
      msg="GET https://quay.io/v2/crio/signed/manifests/sha256-18b42e8ea347780f35d979a829affa178593a8e31d90644466396e1187a07f3a.sig" file="docker/docker_client.go:617"
      msg="Content-Type from manifest GET is \"application/vnd.oci.image.manifest.v1+json\"" file="docker/docker_client.go:989"
      msg="Found a Sigstore attachment manifest with 1 layers" file="docker/docker_image_src.go:639"
      msg="Fetching Sigstore attachment 1/1: sha256:8276724a208087e73ae5d9d6e8f872f67808c08b0acdfdc73019278807197c45" file="docker/docker_image_src.go:644"
      # ...
      Copy to Clipboard Toggle word wrap

      1
      IsRunningImageAllowed 줄은 구성된 sigstore 확인 정책에서 이미지를 허용하는지 확인합니다.
      2
      전송 사용 \"docker\" 특정 정책 섹션 \"example.io/crio/signed\" file="signature/policy_eval.go:150 줄은 이미지 정책이 적용되었는지 확인합니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat